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