一个简单的遗传算法

it2024-11-09  3

import numpy as np size=10 UPPER_BOUND=4 LOWER_BOUND=0 deviation=0.25 num_offspring=3 num_iter=30 def check_bound(x): if x<LOWER_BOUND: return LOWER_BOUND if x>UPPER_BOUND: return UPPER_BOUND return x def fitness(x): return -x*(x-1)*(x-2)*(x-3)*(x-4) def get_birth(x,y): child = (x+y)*0.5 child = child + np.random.normal(0,deviation) return check_bound(child) #init population = np.random.uniform(LOWER_BOUND,UPPER_BOUND,size) for iter in range(num_iter): population.sort(key=lambda x:fitness(x)) #offspring offspring=[] mother=population[-num_offspring*2::2] father=population[-num_offspring*2+1::2] offspring=[] for x,y in zip(mother,father) offspring.append(get_birth(x,y)) population=population.extend(offspring) #die population.sort(key=lambda x:fitness(x)) population=population[-size:] print(population)

 

最新回复(0)