def generate(generations, population, nn_param_chices, dataset): genetic = Genetic(nn_param_chices) gans = genetic.create_population(population) for i in range(generations): train_gan(gans, dataset) average_accuracy = get_average_accuracy(gans) if i != generations - 1: gans = genetic.evolve(gans) gans = sorted(gans, key=lambda x: x.accuracy, reverse=True)
print("") for r in robots_sorted[:5]: print ("{:.2f}%\t{:.2f}%\t{:.2f}%\t{}".format(100*r.get_fitness(), 100*r.get_fitness_distances(), 100*r.get_fitness_sensors(), r.id)) print ("#"*40) print ("\nEnded generation {} after {} steps".format(generation, step)) print ("Best robot got to distance {} and fitness {:.2f}%".format(closest_distance, 100*best_fitness)) generation_scores.append([closest_distance, best_fitness]) print ("#"*40) generation += 1 # input("press enter to continue") #get robots gains and fitness value to run genetic algorithm results = list() for r in robots: gains = r.control_unit.get_gains() fitness = r.get_fitness() robot_result = {"gains":gains, "fitness":fitness, "id":r.id} results.append(robot_result) g = Genetic(results) new_gains = g.evolve(keep_percent=0.20) for i, n in enumerate(neurals): n.set_gains(new_gains[i]["gains"])