making option list indexable to visualize in tensorboard. noticing run from last night had much better performance under more long options, unclear if due to choice or environment factors, like episodes lasting longer. making stoponcollision and seed parameters. fixing ability to see reward metrics under ray/tune/, problem was they were being returned as tensors, not floats
This commit is contained in:
@@ -6,8 +6,8 @@ from src.safe_options.options import gail_ppo, Buffer
|
||||
from src.core.value import SetValue
|
||||
from src.safe_options.policy import SetMaskedDiscretePolicy
|
||||
from src.core.discriminator import DeepsetDiscriminator
|
||||
import torch.optim
|
||||
import torch.nn
|
||||
import torch
|
||||
|
||||
from intersim.envs import IntersimpleLidarFlatRandom
|
||||
from intersim.envs.intersimple import speed_reward
|
||||
import functools
|
||||
@@ -18,25 +18,35 @@ from torch.utils.tensorboard import SummaryWriter
|
||||
from ray import tune
|
||||
|
||||
DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
option_list = [[(vel, time) for vel in [0, 1, 2, 4, 6, 8, 10] for time in [5]],
|
||||
[(vel, time) for vel in [0, 1, 2, 5, 7.5, 10] for time in [5, 20]],
|
||||
[(vel, time) for vel in [0, 1, 2, 4, 6, 8, 10] for time in [5, 10, 20]], # was the best in training with single hidden layer, but very slow
|
||||
[(vel, time) for vel in [0, 1, 2, 5, 7.5, 10] for time in [5, 20, 40]],
|
||||
[(vel, time) for vel in [0, 2, 5, 10] for time in [5, 10, 20]],
|
||||
[(vel, time) for vel in [0, 3, 10] for time in [5, 20, 40]]
|
||||
]
|
||||
|
||||
obs_min = np.array([
|
||||
[-1000, -1000, 0, -np.pi, -1e-1, 0.],
|
||||
[0, -np.pi, -20, -20, -np.pi, -1e-1],
|
||||
[0, -np.pi, -20, -20, -np.pi, -1e-1],
|
||||
[0, -np.pi, -20, -20, -np.pi, -1e-1],
|
||||
[0, -np.pi, -20, -20, -np.pi, -1e-1],
|
||||
[0, -np.pi, -20, -20, -np.pi, -1e-1],
|
||||
]).reshape(-1)
|
||||
|
||||
obs_max = np.array([
|
||||
[1000, 1000, 20, np.pi, 1e-1, 0.],
|
||||
[50, np.pi, 20, 20, np.pi, 1e-1],
|
||||
[50, np.pi, 20, 20, np.pi, 1e-1],
|
||||
[50, np.pi, 20, 20, np.pi, 1e-1],
|
||||
[50, np.pi, 20, 20, np.pi, 1e-1],
|
||||
[50, np.pi, 20, 20, np.pi, 1e-1],
|
||||
]).reshape(-1)
|
||||
|
||||
def training_function(config):
|
||||
obs_min = np.array([
|
||||
[-1000, -1000, 0, -np.pi, -1e-1, 0.],
|
||||
[0, -np.pi, -20, -20, -np.pi, -1e-1],
|
||||
[0, -np.pi, -20, -20, -np.pi, -1e-1],
|
||||
[0, -np.pi, -20, -20, -np.pi, -1e-1],
|
||||
[0, -np.pi, -20, -20, -np.pi, -1e-1],
|
||||
[0, -np.pi, -20, -20, -np.pi, -1e-1],
|
||||
]).reshape(-1)
|
||||
|
||||
obs_max = np.array([
|
||||
[1000, 1000, 20, np.pi, 1e-1, 0.],
|
||||
[50, np.pi, 20, 20, np.pi, 1e-1],
|
||||
[50, np.pi, 20, 20, np.pi, 1e-1],
|
||||
[50, np.pi, 20, 20, np.pi, 1e-1],
|
||||
[50, np.pi, 20, 20, np.pi, 1e-1],
|
||||
[50, np.pi, 20, 20, np.pi, 1e-1],
|
||||
]).reshape(-1)
|
||||
np.random.seed(config['seed'])
|
||||
torch.manual_seed(config['seed'])
|
||||
|
||||
envs = sum([[SafeOptionsEnv(Setobs(
|
||||
TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlatRandom(
|
||||
@@ -45,9 +55,9 @@ def training_function(config):
|
||||
speed_reward,
|
||||
collision_penalty=0
|
||||
),
|
||||
stop_on_collision=False, track=track,
|
||||
stop_on_collision=config['stop_on_collision'], track=track,
|
||||
), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10))
|
||||
), options=config['policy']['option'], safe_actions_collision_method='circle',
|
||||
), options=option_list[config['policy']['option']], safe_actions_collision_method='circle',
|
||||
abort_unsafe_collision_method='circle') for _ in range(20)] for track in range(4)],[])
|
||||
|
||||
env_fn = lambda i: envs[i]
|
||||
@@ -79,7 +89,9 @@ def training_function(config):
|
||||
expert_data = Buffer(*expert_data)
|
||||
|
||||
def callback(info):
|
||||
tune.report(gen_mean_reward_per_episode=info['gen/mean_reward_per_episode'])
|
||||
tune.report(gen_mean_reward_per_episode=info['gen/mean_reward_per_episode'],
|
||||
disc_mean_reward_per_episode=info['disc/mean_reward_per_episode'],
|
||||
mean_episode_length=info['gen/mean_episode_length'])
|
||||
|
||||
value, policy = gail_ppo(
|
||||
env_fn=env_fn,
|
||||
@@ -91,9 +103,9 @@ def training_function(config):
|
||||
value=value,
|
||||
v_opt=v_opt,
|
||||
v_iters=config['value']['iterations_per_epoch'],
|
||||
epochs=200,
|
||||
rollout_episodes=60,
|
||||
rollout_steps=60,
|
||||
epochs=2, # 200 FIXME
|
||||
rollout_episodes=6, #60, FIXME
|
||||
rollout_steps=6, #60, FIXME
|
||||
gamma=0.99,
|
||||
gae_lambda=0.9,
|
||||
clip_ratio=config['policy']['clip_ratio'],
|
||||
@@ -104,33 +116,33 @@ def training_function(config):
|
||||
lr_schedulers=[pi_lr_scheduler],
|
||||
)
|
||||
|
||||
# save value, policy
|
||||
|
||||
|
||||
analysis = tune.run(
|
||||
training_function,
|
||||
config={
|
||||
'stop_on_collision': tune.grid_search([True, False]),
|
||||
'policy': {
|
||||
'learning_rate': tune.grid_search([3e-4]),
|
||||
'learning_rate_decay': tune.grid_search([1.0]),
|
||||
'clip_ratio': tune.grid_search([0.2]),
|
||||
'iterations_per_epoch': tune.grid_search([100]),
|
||||
'hidden_layer_size': tune.grid_search([10, 20, 30]),
|
||||
'n_hidden_layers': tune.grid_search([1, 2, 3]),
|
||||
'learning_rate': 3e-4, # tune.grid_search([3e-4]),
|
||||
'learning_rate_decay': 1.0, #tune.grid_search([1.0]),
|
||||
'clip_ratio': 0.2, #tune.grid_search([0.2]),
|
||||
'iterations_per_epoch': 100, #tune.grid_search([100]),
|
||||
'hidden_layer_size': tune.grid_search([10, 20, 40]),
|
||||
'n_hidden_layers': 1, #tune.grid_search([1, 2, 3]), #FIXME
|
||||
'activation':tune.grid_search([torch.nn.LeakyReLU, torch.nn.Tanh]),
|
||||
'option': tune.grid_search([[(0, 5), (1, 5), (2, 5), (4, 5), (6, 5), (8, 5), (10, 5)],
|
||||
[(0, 5), (1, 5), (2, 5), (4, 5), (6, 5), (8, 5), (10, 5),
|
||||
(0, 10), (1, 10), (2, 10), (4, 10), (6, 10), (8, 10), (10, 10)],
|
||||
[(0, 5), (1, 5), (2, 5), (4, 5), (6, 5), (8, 5), (10, 5),
|
||||
(0, 10), (1, 10), (2, 10), (4, 10), (6, 10), (8, 10), (10, 10),
|
||||
(0, 20), (1, 20), (2, 20), (4, 20), (6, 20), (8, 20), (20, 10)]])
|
||||
'option': tune.grid_search(list(range(len(option_list))))
|
||||
},
|
||||
'value': {
|
||||
'learning_rate': tune.grid_search([1e-3]),
|
||||
'iterations_per_epoch': tune.grid_search([1000]),
|
||||
'learning_rate': 1e-3, # tune.grid_search([1e-3]),
|
||||
'iterations_per_epoch': 1000, #tune.grid_search([1000]),
|
||||
},
|
||||
'discriminator': {
|
||||
'learning_rate': tune.grid_search([1e-3]),
|
||||
'weight_decay': tune.grid_search([1e-4]),
|
||||
'iterations_per_epoch': tune.grid_search([100]),
|
||||
}
|
||||
'learning_rate': 1e-3, #tune.grid_search([1e-3]),
|
||||
'weight_decay': 1e-4, #tune.grid_search([1e-4]),
|
||||
'iterations_per_epoch': 100, #tune.grid_search([100]),
|
||||
},
|
||||
'seed': 0,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user