From ab71c56617f76c8e54ae167c3ad9bd71102fbffa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20D=C3=B6ring?= <tobias.doering@stud.hs-bochum.de> Date: Thu, 3 Mar 2022 12:16:12 +0100 Subject: [PATCH] Only saving best weights --- EvolutionStrategies/main.py | 13 +++++++++---- EvolutionStrategies/mlp_visualizer.py | 2 +- MutateActions/main.py | 2 +- MutateActions/population.py | 6 +++++- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/EvolutionStrategies/main.py b/EvolutionStrategies/main.py index d8c8a50..d8edb31 100644 --- a/EvolutionStrategies/main.py +++ b/EvolutionStrategies/main.py @@ -13,8 +13,8 @@ GENS = 7000 MAX_STEPS = 300 # after 1600 steps the Environment gives us a done anyway. DECAY_ALPHA = True -VERSION = 1 -TEST_WALKER = True +VERSION = 100 +TEST_WALKER = False LOAD_BRAIN = False RENDER_BEST = False if TEST_WALKER: @@ -31,6 +31,7 @@ def plot_reward(rewards): if __name__ == '__main__': avg_rewards = [] + best_avg_reward = -1000 try: population = Population(POP_SIZE, HIDDEN_LAYER, BIAS, MUTATION_FACTOR, MAX_STEPS, LOAD_BRAIN, VERSION, LEARNING_RATE, RENDER_BEST) @@ -53,8 +54,12 @@ if __name__ == '__main__': population.evolve() print("Time for Gen: ", time.time() - start_time) if gen % 10 == 0: - population.walker.save() - avg_rewards.append(population.get_walker_stats()) + avg_reward = population.get_walker_stats() + if avg_reward > best_avg_reward: + population.walker.save() + best_avg_reward = avg_reward + print("New best walker found") + avg_rewards.append(avg_reward) population.walker.save_mlp_weights(gen) with open(f'./models/{HIDDEN_LAYER}_{VERSION}_{POP_SIZE}_{LEARNING_RATE}_AvgRewards', 'wb') as fp: pickle.dump(avg_rewards, fp) diff --git a/EvolutionStrategies/mlp_visualizer.py b/EvolutionStrategies/mlp_visualizer.py index ff933fc..cd10d30 100644 --- a/EvolutionStrategies/mlp_visualizer.py +++ b/EvolutionStrategies/mlp_visualizer.py @@ -88,7 +88,7 @@ class NeuralNetwork(): for layer in self.layers: layer.draw() pyplot.axis('scaled') - pyplot.savefig(f'./models/mlp_{gen}.png', dpi=300) + pyplot.savefig(f'./models/NN_Images/mlp_{gen}.png', dpi=300) pyplot.cla() #pyplot.show() diff --git a/MutateActions/main.py b/MutateActions/main.py index a8d4fe7..794b670 100644 --- a/MutateActions/main.py +++ b/MutateActions/main.py @@ -10,7 +10,7 @@ MUTATION_FACTOR = 0.2 # 0 <= x <= 1 GAME_CANCELLED = False LOAD_BRAIN = False RENDER_BEST = False -TEST_WALKER = True +TEST_WALKER = False if TEST_WALKER: LOAD_BRAIN = True diff --git a/MutateActions/population.py b/MutateActions/population.py index 4f62c2c..2822442 100644 --- a/MutateActions/population.py +++ b/MutateActions/population.py @@ -21,6 +21,7 @@ class Population: self.walkers = [] self.envs = [] self.fitnesses = None + self.best_fitness = -1000 for i in range(self.size): self.walkers.append(Walker(self.brain_size, load_brain, render_best)) self.reset_environments() @@ -56,7 +57,10 @@ class Population: def natural_selection(self): # gets the next generation of players self.calculate_fitness_sum() self.set_best_walker() - self.walkers[self.best_walker_index].brain.save() + if self.best_walker_fitness > self.best_fitness: + self.walkers[self.best_walker_index].brain.save() + self.best_fitness = self.best_walker_fitness + print("New best walker found") # the champion lives on new_walkers = [self.walkers[self.best_walker_index].get_baby()] new_walkers[0].is_best = True -- GitLab