Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def algorithm(fun,pop_size, pk, pm, generations, dx):
- fun=obj_func
- B,dx_new = nbits(-5.12,5.12,dx) #ILE BITÓW POTRZEBA DO ZAKODOWANIA
- pop=gen_population(pop_size,N, B) #GENEROWANIE POPULACJI
- tab_decode=np.zeros((pop_size,N))
- for i in range(0,pop_size):
- tab_decode[i]=decode_individual(pop[i], N, B, -5.12, dx_new)
- #ROZKODOWYWANIE OSOBNIKÓW
- evaluated_pop=evaluate_population(fun, pop, N, B, -5.12, dx_new)
- #OCENA OSOBNIKÓW
- best_individual, best_value=get_best(pop, evaluated_pop)
- #NAJLEPSZY OSOBNIK W DANEJ POPULACJI
- new_pop=pop
- best_sol_value=best_value
- best_generation=0
- list_best=[]
- list_best_generation=[]
- list_mean=[]
- for i in range (0,generations):
- new_pop=roulette(new_pop, evaluated_pop) #SELEKCJA
- new_pop=cross(new_pop, pk) #KRZYŻOWANIE
- new_pop=mutate(new_pop, pm) #MUTACJA
- evaluated_pop=evaluate_population(fun, new_pop, N, B, -5.12, dx_new) #OCENA
- best_individual, best_value=get_best(new_pop, evaluated_pop) #WYBÓR NAJLEPSZEGO
- list_best_generation.append(best_value) #LISTA Z NAJLEPSZYMI OCENAMI W KAŻDYM POKOLENIU
- suma=evaluated_pop.sum()
- srednia=suma/pop_size
- list_mean.append(srednia) #LISTA ŚREDNICH OCEN W KAŻDYM POKOLENIU
- if(best_value > best_sol_value):
- best_sol=best_individual
- best_sol_value=best_value
- list_best.append(best_value) #LISTA Z NAJLEPSZYMI OCENAMI DO TEJ PORY
- best_generation=i+1
- else:
- list_best.append(best_sol_value)
- return(best_sol, best_generation, list_best, list_best_generation, list_mean)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement