separated reward function
BIN
.DS_Store
vendored
BIN
agents/saved_models/older_models/A0
Normal file
BIN
agents/saved_models/older_models/C0
Normal file
BIN
agents/saved_models/older_models/good_runA0
Normal file
BIN
agents/saved_models/older_models/good_runC0
Normal file
|
@ -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
|
||||
|
|
|
|
@ -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',
|
||||
|
|
|
@ -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],
|
||||
|
|
BIN
figures/.DS_Store
vendored
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 19 KiB |
66
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':
|
||||
|
||||
|
|
23
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
|
||||
|
|