diff --git a/.DS_Store b/.DS_Store index 13f2c08..5e72f9e 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/agents/saved_models/A0 b/agents/saved_models/A0 index 63dd231..5a8b585 100644 Binary files a/agents/saved_models/A0 and b/agents/saved_models/A0 differ diff --git a/agents/saved_models/C0 b/agents/saved_models/C0 index 4c96720..ef9db9e 100644 Binary files a/agents/saved_models/C0 and b/agents/saved_models/C0 differ diff --git a/agents/saved_models/older_models/A0 b/agents/saved_models/older_models/A0 new file mode 100644 index 0000000..8b630e7 Binary files /dev/null and b/agents/saved_models/older_models/A0 differ diff --git a/agents/saved_models/older_models/C0 b/agents/saved_models/older_models/C0 new file mode 100644 index 0000000..30a22ad Binary files /dev/null and b/agents/saved_models/older_models/C0 differ diff --git a/agents/saved_models/older_models/good_runA0 b/agents/saved_models/older_models/good_runA0 new file mode 100644 index 0000000..dfc1ea8 Binary files /dev/null and b/agents/saved_models/older_models/good_runA0 differ diff --git a/agents/saved_models/older_models/good_runC0 b/agents/saved_models/older_models/good_runC0 new file mode 100644 index 0000000..01a179e Binary files /dev/null and b/agents/saved_models/older_models/good_runC0 differ diff --git a/assets/map/Entities.csv b/assets/map/Entities.csv index 88c8391..d07fe1f 100644 --- a/assets/map/Entities.csv +++ b/assets/map/Entities.csv @@ -3,7 +3,7 @@ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 +-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,400,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,392,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,391,-1,-1,-1,391,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,391,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 @@ -16,27 +16,27 @@ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -1,-1,-1,-1,-1,-1,-1,-1,-1,393,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,400,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 +-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,400,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 +-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,400,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 +-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,400,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,400,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 +-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,400,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,400,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 +-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,400,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,393,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 +-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,400,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,393,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,393,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,393,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,393,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,391,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 --1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 +-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,391,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 +-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 +-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,400,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,393,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 diff --git a/configs/game/monster_config.py b/configs/game/monster_config.py index 14d5344..65e9cb2 100644 --- a/configs/game/monster_config.py +++ b/configs/game/monster_config.py @@ -1,6 +1,6 @@ monster_data = { 'squid': {'id': 1, - 'health': 100, + 'health': 1, 'exp': 10, 'attack': 50, 'attack_type': 'slash', @@ -10,7 +10,7 @@ monster_data = { 'notice_radius': 360}, 'raccoon': {'id': 2, - 'health': 300, + 'health': 1, 'exp': 25, 'attack': 80, 'attack_type': 'claw', @@ -20,7 +20,7 @@ monster_data = { 'notice_radius': 400}, 'spirit': {'id': 3, - 'health': 80, + 'health': 1, 'exp': 11, 'attack': 60, 'attack_type': 'thunder', @@ -30,7 +30,7 @@ monster_data = { 'notice_radius': 350}, 'bamboo': {'id': 4, - 'health': 50, + 'health': 1, 'exp': 9, 'attack': 20, 'attack_type': 'leaf_attack', diff --git a/entities/player.py b/entities/player.py index 8fb0e97..0686de1 100644 --- a/entities/player.py +++ b/entities/player.py @@ -146,6 +146,26 @@ class Player(pygame.sprite.Sprite): spell_damage = magic_data[self._input.combat.magic]['strength'] return (base_damage + spell_damage) + def get_reward(self): + + self.reward = 0 + + # Base reward on player exp + self.reward += self.stats.exp + print(f'Player exp added to reward: {self.stats.exp} -> {self.reward}') + + # Add relative hp of player + self.reward += self.stats.health/self.stats.stats['health'] + print(f"Player hp added to reward: {self.stats.health/self.stats.stats['health']} -> {self.reward}") + + # Take into account distance of nearest enemy from player relative to the map length + self.reward -= self.nearest_dist/np.sqrt(np.sum(self.map_edge)) + print(f'Relative distance of enemy: {self.nearest_dist/np.sqrt(np.sum(self.map_edge))} -> {self.reward}') + + # Take into account nearest enemy relative health + self.reward -= self.nearest_enemy.stats.health/self.nearest_enemy.stats.monster_info['health'] + print(f"Enemy hp added: {self.nearest_enemy.stats.health/self.nearest_enemy.stats.monster_info['health']} -> {self.reward}") + def get_current_state(self): if self.distance_direction_from_enemy != []: @@ -154,15 +174,11 @@ class Player(pygame.sprite.Sprite): else: sorted_distances = np.zeros(self.num_features) - nearest_dist, _, nearest_enemy = sorted_distances[0] + self.nearest_dist, _, self.nearest_enemy = sorted_distances[0] self.action_features = [self._input.action] - self.reward = self.stats.exp\ - + self.stats.health/self.stats.stats['health'] - 1\ - - nearest_dist/np.sqrt(np.sum(self.map_edge))\ - - nearest_enemy.stats.health/nearest_enemy.stats.monster_info['health']\ - - 2*len(self.distance_direction_from_enemy)/self.max_num_enemies + self.get_reward() self.state_features = [ self.animation.rect.center[0]/self.map_edge[0], diff --git a/figures/.DS_Store b/figures/.DS_Store index 2e4e618..4afe4dd 100644 Binary files a/figures/.DS_Store and b/figures/.DS_Store differ diff --git a/figures/actor_loss.png b/figures/actor_loss.png index 73bb246..656f2d5 100644 Binary files a/figures/actor_loss.png and b/figures/actor_loss.png differ diff --git a/figures/critic_loss.png b/figures/critic_loss.png index 882c2e0..fce84c7 100644 Binary files a/figures/critic_loss.png and b/figures/critic_loss.png differ diff --git a/figures/older_figures/actor_loss.png b/figures/older_figures/actor_loss.png deleted file mode 100644 index d12160e..0000000 Binary files a/figures/older_figures/actor_loss.png and /dev/null differ diff --git a/figures/older_figures/critic_loss.png b/figures/older_figures/critic_loss.png deleted file mode 100644 index af6a27e..0000000 Binary files a/figures/older_figures/critic_loss.png and /dev/null differ diff --git a/figures/older_figures/score.png b/figures/older_figures/score.png deleted file mode 100644 index 4987f79..0000000 Binary files a/figures/older_figures/score.png and /dev/null differ diff --git a/figures/older_figures/total_loss.png b/figures/older_figures/total_loss.png deleted file mode 100644 index 88a6bd4..0000000 Binary files a/figures/older_figures/total_loss.png and /dev/null differ diff --git a/figures/score.png b/figures/score.png index 0fd60cd..0214495 100644 Binary files a/figures/score.png and b/figures/score.png differ diff --git a/figures/total_loss.png b/figures/total_loss.png index f738615..69a7301 100644 Binary files a/figures/total_loss.png and b/figures/total_loss.png differ diff --git a/level.py b/level.py index 671514d..b9a9bdf 100644 --- a/level.py +++ b/level.py @@ -89,27 +89,27 @@ class Level: 'invisible') elif col == '700' and self.n_players > 1: print(f"Prison set at:{(x, y)}") - # Generate grass - if style == 'grass': - random_grass_image = choice(self.graphics['grass']) - - Terrain((x, y), [ - self.visible_sprites, - self.obstacle_sprites, - self.attackable_sprites - ], - 'grass', - random_grass_image) - - # Generate objects like trees and statues - if style == 'objects': - surface = self.graphics['objects'][int(col)] - Terrain((x, y), [ - self.visible_sprites, - self.obstacle_sprites - ], - 'object', - surface) + # # Generate grass + # if style == 'grass': + # random_grass_image = choice(self.graphics['grass']) + # + # Terrain((x, y), [ + # self.visible_sprites, + # self.obstacle_sprites, + # self.attackable_sprites + # ], + # 'grass', + # random_grass_image) + # + # # Generate objects like trees and statues + # if style == 'objects': + # surface = self.graphics['objects'][int(col)] + # Terrain((x, y), [ + # self.visible_sprites, + # self.obstacle_sprites + # ], + # 'object', + # surface) # Generate observer, players and monsters if style == 'entities': @@ -162,18 +162,18 @@ class Level: if int(col) != -1: x = col_index * TILESIZE y = row_index * TILESIZE - # Regenerate grass - if style == 'grass': - random_grass_image = choice( - self.graphics['grass']) - - Terrain((x, y), [ - self.visible_sprites, - self.obstacle_sprites, - self.attackable_sprites - ], - 'grass', - random_grass_image) + # # Regenerate grass + # if style == 'grass': + # random_grass_image = choice( + # self.graphics['grass']) + # + # Terrain((x, y), [ + # self.visible_sprites, + # self.obstacle_sprites, + # self.attackable_sprites + # ], + # 'grass', + # random_grass_image) if style == 'entities': diff --git a/pneuma.py b/pneuma.py index 57bb83f..c141ccd 100644 --- a/pneuma.py +++ b/pneuma.py @@ -1,3 +1,4 @@ +import os import random import argparse import torch as T @@ -103,6 +104,11 @@ if __name__ == "__main__": default=0.95, help="The lambda parameter of the GAE") + parser.add_argument('--no_training', + default=False, + action="store_true", + help="Decides if the algorithm should train.") + args = parser.parse_args() random.seed(args.seed) @@ -113,10 +119,13 @@ if __name__ == "__main__": episode_length = args.ep_length n_players = args.n_players - chkpt_path = args.chkpt_path - figure_folder = args.figure_path + home_folder = os.path.dirname(os.path.abspath(__file__)) + + chkpt_path = os.path.join(home_folder, args.chkpt_path) + figure_path = os.path.join(home_folder, args.figure_path) horizon = args.horizon + no_training = args.no_training learnings_per_episode = int(episode_length/horizon) learn_iters = 0 @@ -184,7 +193,7 @@ if __name__ == "__main__": episode_reward[player.player_id][step] = player.reward - if (step % horizon == 0 and step != 0) or player.is_dead(): + if not no_training and ((step % horizon == 0 and step != 0) or player.is_dead()): player.agent.learn() @@ -244,7 +253,7 @@ if __name__ == "__main__": plt.legend([f"Agent {num}" for num in range(n_players)]) for player_score in score_history: plt.plot(player_score) - plt.savefig(f"{figure_folder}/score.png") + plt.savefig(os.path.join(figure_path, 'score.png')) plt.close() plt.figure() @@ -254,7 +263,7 @@ if __name__ == "__main__": plt.legend([f"Agent {num}" for num in range(n_players)]) for actor in actor_loss: plt.plot(actor) - plt.savefig(f"{figure_folder}/actor_loss.png") + plt.savefig(os.path.join(figure_path, 'actor_loss.png')) plt.close() plt.figure() @@ -264,7 +273,7 @@ if __name__ == "__main__": plt.legend([f"Agent {num}" for num in range(n_players)]) for critic in critic_loss: plt.plot(critic) - plt.savefig(f"{figure_folder}/critic_loss.png") + plt.savefig(os.path.join(figure_path, 'critic_loss.png')) plt.close() plt.figure() @@ -274,7 +283,7 @@ if __name__ == "__main__": plt.legend([f"Agent {num}" for num in range(n_players)]) for total in total_loss: plt.plot(total) - plt.savefig(f"{figure_folder}/total_loss.png") + plt.savefig(os.path.join(figure_path, 'total_loss.png')) plt.close() # End of training session