8-laboratoriya mashg’uloti. Matematik funksiylarning optimal qiymatini genetik algoritmlar yordamida aniqlashning dasturiy ta’minoti Klassik genetik algoritm va uning asosiy bosqichlari


Pythonda genetik algoritmni amalga oshirish


Download 0.57 Mb.
Pdf ko'rish
bet2/9
Sana21.01.2023
Hajmi0.57 Mb.
#1106215
1   2   3   4   5   6   7   8   9
Bog'liq
8-Lab.mash. (Genetik algoritm) (1)

Pythonda genetik algoritmni amalga oshirish. Ushbu laboratotiya ishi 
Pythonda GAni optimallashtirish masalasiga qo’llash, ya’ni funksiyaning optimal 
qiymatini GA yordamida qidirish jarayonining dasturiy ta’minotini ishlab chiqishga 
bag’ishlanadi. laboratoriya ishida genlar, bir nuqtada chatishtiruv va bir xil mutatsiya 
uchun o'nli belgidan foydalanadi. 
Bu ishni bajarishda 8.1-rasmda keltirilgan GA blok sxemasidan foydalanamiz. 
Laboratoriya ishida genlardan, bir nuqtali chatishtiruv va bir xil mutatsiyalar uchun 
o'nli ko'rinishdagi sonlardan foydalaniladi. 
Misol. Laboratoriya ishi biz amalga oshirmoqchi bo'lgan tenglamani taqdim 
etishdan boshlanadi. Tenglama quyida ko'rsatilgan: 
Y = w
1
x
1
 + w
2
x
2
 + w
3
x
3
 + w
4
x
4
 + w
5
x
5
 + w
6
x
6
 
Tenglamada ko'rsatilgandek 6 ta o’zgaruvchi (x
1
dan x
6
gacha) va 6 ta koeffitsent 
(w
1
dan w
6
gacha) mavjud va o’zgaruvchilar qiymatlar (x
1
, x
2
, x
3
, x
4
, x
5
, x
6
) = (4, -2, 7, 
5, 11, 1). Biz ushbu tenglamani maksimal qiymatga keltiradigan koeffitsentlarni 
qidiramiz. Bunday tenglamani maksimallashtirish g'oyasi oddiy ko'rinadi. Musbat 
qiymat mumkin bo'lgan eng katta musbat songa ko'paytirilishi kerak, manfiy son esa 
mumkin bo'lgan eng kichik manfiy songa ko'paytirilishi kerak. Ammo biz izlayotgan 
g'oya GAni mustaqil ravishda musbat o’zgaruvchilarning musbat koeffitsenti yoki 
manfiy o’zgaruvchilarning manfiy koeffitsenti bilan ishlash yaxshiroq ekanligini 
amalga oshirish kerakligini bilishini aniqlashdir. GAni amalga oshirishni ko’rib 
chiqamiz. 
Birinchidan, 6 ta o’zgaruvchi ro'yxatini va shunga o'xshash koeffitsentlar sonini 
saqlash uchun o'zgaruvchini yarataylik: 
# Tenglama o’zgaruvchilarining koeffitsentlari. 



equation_inputs = [4,-2,3.5,5,-11,-4.7] 
# Biz optimallashtirmoqchi bo'lgan koeffitsentlar soni. 
num_weights = 
Navbatdagi qadam dastlabki populyatsiyani aniqlashdir. Koeffitsentlar soniga 
qarab, populyatsiyadagi har bir xromosoma (individ) har bir koeffitsent uchun bittadan 
6 ta genga ega bo'ladi. Ammo savol tug‘iladi: aholiga qancha qaror to‘g‘ri keladi? 
Buning uchun qat'iy qiymat yo'q va biz muammomizga mos keladigan qiymatni 
tanlashimiz mumkin. Lekin biz uni umumiy qoldirishimiz mumkin, shunda uni kodda 
o'zgartirish mumkin. Keyin biz har bir populyatsiya uchun yechimlar sonini o'z ichiga 
olgan o'zgaruvchini, populyatsiya hajmini ushlab turish uchun boshqasini va nihoyat, 
haqiqiy boshlang'ich populyatsiyani o'z ichiga olgan o'zgaruvchini yaratamiz: 
import numpysol_per_pop = 8 # Populyatsiya sonini aniqlash. 
pop_size = (sol_per_pop, num_weights) #Populyatsiyada sol_per_pop 
xromosomasi bo'ladi, bunda har bir xromosomada sonli vaznli genlar mavjud. 
#Boshlang'ich populyatsiyani yaratish. 
new_population = numpy.random.uniform(low(quyi)=-4.0, high(yuqori)=4.0, 
size(hajmi)=pop_size) 
Numpy kutubxonasini import qilgandan so'ng, biz numpy.random.uniform 
funksiyasidan foydalanib tasodifiy boshlang'ich populyatsiyani yaratishimiz mumkin. 
Tanlangan koeffitsentlarga ko'ra, u (8, 6) shaklga ega bo'ladi. Bular 8 ta xromosoma 
bo'lib, har birida har bir koeffitsent uchun bittadan 6 ta gen mavjud. Ushbu kodni ishga 
tushirgandan so'ng, populyatsiya quyidagicha ko'rinadi: 
[[-2.19134006 -2.88907857 2.02365737 -3.97346034 3.45160502 2.05773249] 
[1.81098962 0.35130155 1.03049548 -0.33163294 3.52586421 2.53845644] 
[-2.12480298 2.97122243 3.60375452 3.78571392 0.28776565 3.5170347] 
[0.63698911 -2.8638447 2.93392615 -1.40103767 -1.20313655 0.30567304] 
[-1.48998583 -1.53845766 1.11905299 -3.67541087 1.33225142 2.86073836] 
[1.14159503 2.88160332 1.74877772 -3.45854293 0.96125878 2.99178241]
[1.96561297 0.51030292 0.52852716 -1.56909315 -2.35855588 2.29682254] 
[1.96561297 0.51030292 0.52852716 -1.56909315 -2.35855588 2.29682254] 
[ 3.00912373 -2.745417 3.27131287 -0.72163167 0.7516408 0.00677938]] 
Bu populyarsiya tasodifiy yaratilgan va shuning uchun uni qayta ishga 
tushirganingizda albatta o'zgaradi. 
Populyatsiyani tayyorlagandan so'ng, 8.1-rasmdagi sxema bo'yicha bajariladi. 
Fitness(MosF)dan kelib chiqib, biz hozirgi populyatsiyadan eng yaxshi odamlarni 
juftlashuvchi ota-onalar sifatida tanlaymiz. Keyingi qadam - navbatdagi avlod 
vakillarini olish uchun GA variantlarini (chatishtiruv va mutatsiya) qo'llash, ikkala ota-
onani ham, avlodni ham qo'shish orqali yangi populyatsiyani yaratish va bu 
bosqichlarni bir necha iteratsiya/avlod uchun takrorlashdan iborat. Quyidagi kod ushbu 
qadamlarni bajaradi: 
import ganum_generations = 5 
num_parents_mating (ota-onalar_soni) = 4 

Download 0.57 Mb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling