def main(): global fileName_input, N fileName_input = "fricker.txt" fileName_output = fileName_input[:-4] + "_solutie.txt" N = None N, cityList=read() # N, cityList=readCiudat() print(cityList) popSize = 100 noGen = 1000 mutationRate = 0.01 eliteSize = 20 ga = GA(popSize, eliteSize, cityList, mutationRate) ga.initialise() ga.evaluate() maximFitness = -1 f = open(fileName_output, 'w') global currentChromosome for g in range(noGen): currentChromosome = ga.bestChromosome() if currentChromosome.fitness > maximFitness: maximFitness = currentChromosome.fitness # bestChromo = currentChromosome f.write('Best solution in generation ' + str(g) + ' is: x = ' + str(currentChromosome.repres) + ' f(x) = ' + str(currentChromosome.fitness)) f.write('\n') ga.oneGeneration() f.write(str(N)) f.write('\n') index = 0 for i in range(0, len(currentChromosome.repres)): if currentChromosome.repres[i] == 0: index = i i = index f.write(str(currentChromosome.repres[i] + 1) + ' ') i += 1 while i != index: if i == len(currentChromosome.repres): i = 0 else: f.write(str(currentChromosome.repres[i] + 1) + ' ') i += 1 f.write('\n') route = currentChromosome.repres distance = 0 for i in range(0, len(route)): fromCity = route[i] toCity = None if i + 1 < len(route): toCity = route[i + 1] else: toCity = route[0] distance += cityList[fromCity][toCity] f.write(str(distance)) f.write('\n') f.close()
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())) best.print()