adding average absolute delta v, and tracking positions and setting up architecture to implement rwse

This commit is contained in:
Arec
2022-02-21 00:06:39 -08:00
parent d2932951f6
commit 8c4ff03208
3 changed files with 48 additions and 7 deletions

View File

@@ -7,7 +7,7 @@ from stable_baselines3.common.base_class import BaseAlgorithm
from src.baselines import IDMRulePolicy
from src.evaluation import IntersimpleEvaluation
import src.gail.options as options_envs
from src.evaluation.metrics import divergence, visualize_distribution
from src.evaluation.metrics import divergence, visualize_distribution, rwse
from src.evaluation.utils import save_metrics
from src.core.policy import SetPolicy, SetDiscretePolicy
from src.core.reparam_module import ReparamPolicy
@@ -103,7 +103,7 @@ def form_expert_metrics(states:torch.Tensor, actions:torch.Tensor) ->Dict[str, l
hard_brake = -3.
timestep = 0.1
keys = ['col_all','v_all', 'a_all','j_all', 'v_avg', 'a_avg', 'col', 'brake', 't']
keys = ['col_all','x_all','y_all','v_all', 'a_all','j_all', 'v_avg', 'a_avg', 'col', 'brake', 't']
metrics = {key:[None]*nv for key in keys}
for i in range(nv):
@@ -111,6 +111,8 @@ def form_expert_metrics(states:torch.Tensor, actions:torch.Tensor) ->Dict[str, l
nni = ~torch.isnan(states[:,i,0])
metrics['col_all'][i] = [False] * sum(nni)
metrics['x_all'][i] = states[nni,i,0].numpy()
metrics['y_all'][i] = states[nni,i,1].numpy()
metrics['v_all'][i] = states[nni,i,2].numpy()
metrics['a_all'][i] = actions[nni,i,0].numpy()
@@ -243,7 +245,7 @@ def summary_metrics(metrics:List[Dict[str,list]]) -> Dict[str,float]:
# average acceleration
all_aalls = np.concatenate([np.concatenate(d['a_all']) for d in metrics])
summary_metrics['mean acceleartion'] = np.mean(all_aalls)
summary_metrics['mean acceleration'] = np.mean(all_aalls)
# average +acceleration
pos_accels = all_aalls[all_aalls>0]
@@ -261,11 +263,11 @@ def summary_metrics(metrics:List[Dict[str,list]]) -> Dict[str,float]:
summary_metrics['mean |jerk|'] = np.mean(np.abs(all_jerks))
# collision rate
all_collisions = sum([d['col'] for d in metrics],[]) # aggregate to single list
all_collisions = sum([d['col'] for d in metrics],[]) # aggregate to single list
summary_metrics['collision rate'] = sum(all_collisions)/len(all_collisions)
# hard brake rate
all_hard_brakes = sum([d['brake'] for d in metrics],[]) # aggregate to single list
all_hard_brakes = sum([d['brake'] for d in metrics],[]) # aggregate to single list
summary_metrics['hard brake rate'] = sum(all_hard_brakes)/len(all_hard_brakes)
# average number of timesteps
@@ -294,11 +296,23 @@ def comparison_metrics(policy_metrics:List[Dict[str,list]],
"""
comparison_metrics = {}
# rwse
expert_traj, policy_traj = [], []
for iR in range(len(policy_metrics)):
for iTraj in range(len(policy_metrics[iR]['x_all'])):
expert_traj.append(np.vstack((expert_metrics[iR]['x_all'][iTraj], expert_metrics[iR]['y_all'][iTraj])))
policy_traj.append(np.vstack((policy_metrics[iR]['x_all'][iTraj], policy_metrics[iR]['y_all'][iTraj])))
assert len(expert_traj)==len(policy_traj)
comparison_metrics['rwse'] = rwse(expert_traj, policy_traj)
# average velocity shortfall
expert_vavg = np.array(sum([d['v_avg'] for d in expert_metrics],[]))
policy_vavg = np.array(sum([d['v_avg'] for d in policy_metrics],[]))
assert len(expert_vavg)==len(policy_vavg)
comparison_metrics['mean shortfall velocity'] = np.mean(expert_vavg - policy_vavg)
# Average |Delta V average|
comparison_metrics['average absolute average velocity'] = np.mean(np.abs(expert_vavg - policy_vavg))
# velocity JSD
expert_vs = torch.tensor(np.concatenate([np.concatenate(d['v_all']) for d in expert_metrics]))