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


GA moduli quyidagicha ko'rinishda beriladi


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

GA moduli quyidagicha ko'rinishda beriladi: 
import numpy 
def cal_pop_fitness(equation_inputs, pop): 
# Joriy populyatsiyada har bir yechimning yaroqlilik qiymatini hisoblash. 


11 
# Fitness (MosF) funksiyasi har bir kirish o’zgaruvchisi va unga mos 
keladigan koeffitsiyent o'rtasidagi mahsulotlar yig'indisini hisoblab 
chiqadi. 
fitness = numpy.sum(pop*equation_inputs, axis=1) 
return fitness 
def select_mating_pool(pop, fitness, num_parents): 
# Keyingi avlod vakillarini etishtirish uchun hozirgi avlodning eng 
yaxshi shaxslarini ota-onalar 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 
def crossover(parents, offspring_size): 
offspring = numpy.empty(offspring_size) 
# Ikki ota-ona o'rtasida o'zaro faoliyat sodir bo'ladigan nuqta. Odatda u 
markazda joylashgan. 
crossover_point = numpy.uint8(offspring_size[1]/2) 
for k in range(offspring_size[0]): 
# Index of the first parent to mate. 
parent1_idx = k%parents.shape[0] 
# Index of the second parent to mate. 
parent2_idx = (k+1)%parents.shape[0] 
# Yangi nasl genlarining birinchi yarmini birinchi ota-onadan oladi. 
offspring[k, 0:crossover_point] = parents[parent1_idx, 
0:crossover_point] 
# Yangi nasl o'z genlarining ikkinchi yarmini ikkinchi ota-onadan oladi. 
offspring[k, crossover_point:] = parents[parent2_idx, 
crossover_point:] 
return offspring 
def mutation(offspring_crossover): 
# Mutatsiya har bir nasldagi bitta genni tasodifiy o'zgartiradi. 
for idx in range(offspring_crossover.shape[0]): 
# Genga qo'shiladigan tasodifiy qiymat. 
random_value = numpy.random.uniform(-1.0, 1.0, 1) 
offspring_crossover[idx, 4] = offspring_crossover[idx, 4] + 
random_value 
return offspring_crossover 

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