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


Download 0.57 Mb.
Pdf ko'rish
bet3/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)

for generation in range (num_generations): 
# Populyatsiyadagi har bir xromosomaning yaroqliligini o'lchash. 



parents = ga.select_mating_pool(new_population, fitness,
num_parents_mating) 
# Juftlash uchun aholi orasida eng yaxshi ota-onalarni tanlash. 
offspring_crossover = ga.crossover(parents, 
offspring_size=(pop_size[0]- 
parents.shape[0], num_weights)) 
# Chatishtiruv yordamida keyingi avlodni yaratish. 
offspring_crossover = ga.crossover(parents, 
offspring_size=(pop_size[0]- 
parents.shape[0], num_weights)) 
# Mutatsiya yordamida naslga ba'zi o'zgarishlar qo'shish. 
offspring_mutation = ga.mutation(offspring_crossover 
# Yangisini yaratishda ota-onalar va avlodlarga asoslangan populyatsiya. 
new_population[0:parents.shape[0], :] = parents 
new_population[parents.shape[0]:, :] = offspring_mutatioon 
Hozirgi avlodlar soni 5. Darslikdagi barcha avlodlarning natijalarini taqdim etish 
uchun kichik tanlangan. Algoritmni amalga oshirishni o'z ichiga olgan GA nomli 
modul mavjud. 
Birinchi 
qadam 
.cal_pop_fitness 
funksiyasidan 
foydalangan 
holda 
populyatsiyadagi har bir yechimning mosligini aniqlashdir. GA modulida bunday 
funktsiyani amalga oshirish quyidagicha ko'rinadi: 
ef cal_pop_fitness(equation_inputs, pop): 
# Joriy populyatsiyada har bir yechimning yaroqlilik qiymatini hisoblash. 
# Fitness (MosF) funksiyasi har bir kirish va unga mos keladigan koeffitsient 
o'rtasidagi mahsulotlar yig'indisini hisoblab chiqadi. 
fitness = numpy.sum(pop*equation_inputs, axis=1) 
return fitness 
Fitness (MosF) agregatga qo'shimcha ravishda tenglamaning ikkala o’zgaruvchi 
qiymatini ham (x
1
dan x
6
gacha) oladi. Moslanuvchanlik qiymati bizning 
funksiyamizga muvofiq har bir o’zgaruvchi va unga mos keladigan gen (koeffitsent) 
o'rtasidagi mahsulot yig'indisi sifatida hisoblanadi.Bir populyatsiya guruhiga to'g'ri 
keladigan individlar soniga qarab, mahsulot yig'indisi soni aniqlanadi. Ilgari biz 
yechimlar sonini 8 ga o‘rnatganimizdek, sol_per_pop nomli o‘zgaruvchi quyida 
ko‘rsatilganidek, 8 ta mahsulot yig'indisiga ega bo‘ladi: 
[-63.41070188 14.40299221 -42.22532674 18.24112489 -45.44363278
-37.00404311 15.99527402 17.0688537] 
E'tibor bering, moslik qiymati qanchalik yuqori bo'lsa, yechim shunchalik yaxshi 
bo'ladi. 
Barcha echimlar uchun MosF qiymatlarini hisoblab chiqqandan so'ng, keyingi 
vazifa .ga.select_mating_pool funksiyasiga muvofiq juftlikda ota-onalar sifatida eng 
yaxshilarini tanlashdir. Bunday funksiya populyatsiya soni, MosF ko'rsatkichlari va 
kerakli ota-onalar sonini oladi. Tanlangan ota-onalarni qaytaradi. Uning GA modulida 
amalga oshirilishi quyidagicha ko'rinadi: 
def select_mating_pool(pop, fitness, num_parents): 



# Keyingi avlod avlodlarini etishtirish uchun hozirgi avlodning eng yaxshi 
shaxslarini ota-ona sifatida tanlash. 
parents = numpy.empty((num_parents, pop.shape[1])) 
for parent_num in range(num_parents): 
max_fitness_idx = numpy.where(fitness == numpy.max(fitness)) 
max_fitness_idx = max_fitness_idx[0][0] 
parents[parent_num, :] = pop[max_fitness_idx, :] 
fitness[max_fitness_idx] = -99999999999 
return parents 
num_parents_mating o'zgaruvchisida aniqlanganidek, talab qilinadigan ota-
onalar soniga asoslanib, funktsiya ushbu qatordagi kabi ularni ushlab turish uchun 
bo'sh massiv yaratadi: 

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