def train(self): self.initParams() ga = GA(self) population = [] for i in range(self.MAX_ITER): population = ga.selection(ga.population) parents = ga.select_parents(population) children = ga.crossover(parents) newPopulation = ga.mutation(children) population = newPopulation best_chromosome, best_fit = ga.get_best_chromosome(population) W1, W2 = ga.chromosome_to_matrix(best_chromosome) self.setAllParams(W1, W2) print(best_fit)
print("{}".format(204 * "-")) print("|{:^19s} | {:^54} | {:^123}|".format( "OPTIMAL", "MANUFACTURER", "RETAILER")) print("{}".format(204 * "-")) print('[{:^3s}] | {:^12s} | {:^8s} | {:^6s} | {:^8s} | {:^10s}'.format( 'STT', '#NP', 'A', 'C', 'DEMAND', 'NP_M'), end='') for i in range(len(config.M)): print('| {:^5s}'.format('n' + str(i+1)), end='') for i in range(len(config.K)): idx = str(i+1) print('| {:^8s} | {:^12s}'.format('a' + idx, "NP_b" + idx), end='') print("|\n{}".format(204 * "-")) for i in range(generation_count): ga.evaluation() ga.selection() ga.crossover() ga.mutation() if i % 1 == 0: print('[{:>3d}] | '.format(i), end='') ga.show_optimal() manufacture = ga.get_best_mf() e_A = manufacture.e_A A = manufacture.A sum_e_bi = 0 for i in range(len(config.e_a)): sum_e_bi += manufacture.retailers[i].e_a sys.exit() for i in range(len(config.e_a)):
_cnt_generations = 100 fitness_avg = list() fitness_max = list() diversity = list() valid_candidate = list() gen = GA(population_cnt=_population_cnt, rate_crossover=_rate_crossover, rate_mutation=_rate_mutation, sample_candidate=_sample_candidate) print("Cross: " + str(_rate_crossover) + "- Mutation: " + str(_rate_mutation) + "- tourSize: " + str(_tournament_size) + "- tourRate: " + str(_tournament_win_rate)) for generation in range(_cnt_generations): gen.mutate() gen.crossover(strategy=_strategy) gen.evaluate(calc_diversity=_calc_diversity) gen.selection(tournament_win_rate=_tournament_win_rate, tournament_size=_tournament_size) if gen.generation % 10 == 0: print("Gen: " + str(gen.generation) + "- Fitness_avg: " + str(gen.fitness_avg) + "- Fitness_best: " + str(gen.best_candidate.get_fitness()) + "- Diversity: " + str(gen.diversity)) fitness_avg.append(gen.fitness_avg) fitness_max.append(gen.best_candidate.get_fitness()) diversity.append(gen.diversity) if (gen.best_candidate.get_fitness() > 1.0): valid_candidate.append(deepcopy(gen.best_candidate)) for best in valid_candidate: print("Candidate Fitness " + str(best.get_fitness()))
hidden_shape=int(np.sqrt(traindata)), kernel='gaussian') model[2] = RBFN(input_shape=dimension, hidden_shape=int(np.sqrt(traindata)), kernel='gaussian') resetmodel(x, y) max_iter = 100 ga = GA(pop_size=100, dimension=dimension, lower_bound=lower_bound, upper_bound=upper_bound) ga.init_Population() for i in range(max_iter): updatemodel(ga.pop) ga.crossover(ga.pc) ga.mutation(ga.pm) ga.pop = np.unique(ga.pop, axis=0) for j in range(0, 3): temp = model[j].predict(ga.pop) if j == 0: fit_value = temp else: fit_value = fit_value + temp fit_value = fit_value.reshape((len(ga.pop), 1)) ga.selection(fit_value) resetmodel(x, y) optimum = ga.first[-1] endtime = time.perf_counter() print('Optimal solution :', optimum)
#Calculate fitness for each population_vector in population fitness_train, fitness_test = fitness(population_vectors) train_error.append(np.min(fitness_train)) test_error.append(np.min(fitness_test)) print('Train Error:', train_error[-1]) print('Test Error:', test_error[-1]) #Select best parents parents = ga.select_mating_pool(population=population_vectors, fitness=fitness_train.copy(), mode='min', num_parents=num_parents_mating) print(parents.shape[0], 'New parents generated...') #Crossover parents offsprings = ga.crossover(parents=parents, num_offsprings=sol_per_pop - num_parents_mating) print(offsprings.shape[0], 'New offsprings produced...') #Mutate offsprings mutated_offsprings = ga.mutate(offsprings, mutation_percent=mutation_percent) print(mutated_offsprings.shape[0], 'offsprings mutated') #Create new population population_vectors[:parents.shape[0], :] = parents population_vectors[parents.shape[0]:, :] = mutated_offsprings print('New population created') #Update the result of this generation in report files f = open('train_error.pkl', 'wb') pickle.dump(train_error, f)