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
|
8-Lab.mash. (Genetik algoritm) (1)
for generation in range (num_generations):
# Populyatsiyadagi har bir xromosomaning yaroqliligini o'lchash. 4 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): 5 # 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: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling