| """ |
| Run CSPO vs PPO-Lag on SafetyPointGoal1-v0 for comparison. |
| Reduced scale: 200K steps (paper uses 10M). |
| """ |
| import warnings |
| warnings.filterwarnings('ignore') |
| import os |
| os.environ['WANDB_MODE'] = 'disabled' |
|
|
| import omnisafe |
| import numpy as np |
|
|
| def run_experiment(algo, env_id, seed, total_steps, log_dir): |
| agent = omnisafe.Agent( |
| algo, |
| env_id, |
| custom_cfgs={ |
| 'seed': seed, |
| 'train_cfgs': { |
| 'total_steps': total_steps, |
| 'vector_env_nums': 1, |
| 'torch_threads': 4, |
| 'device': 'cpu', |
| }, |
| 'algo_cfgs': { |
| 'steps_per_epoch': 20000, |
| 'update_iters': 10, |
| 'batch_size': 512, |
| }, |
| 'logger_cfgs': { |
| 'use_wandb': False, |
| 'use_tensorboard': False, |
| 'log_dir': log_dir, |
| 'window_lens': 10, |
| }, |
| }, |
| ) |
| agent.learn() |
| |
| final_ret = agent._logger.get_stats('Metrics/EpRet') |
| final_cost = agent._logger.get_stats('Metrics/EpCost') |
| return final_ret, final_cost |
|
|
| |
| print("Running CSPO on SafetyPointGoal1-v0...") |
| cspo_ret, cspo_cost = run_experiment( |
| 'CSPO', 'SafetyPointGoal1-v0', seed=0, |
| total_steps=200000, log_dir='/tmp/cspo_bench/cspo' |
| ) |
| print(f"CSPO - Return: {cspo_ret:.2f}, Cost: {cspo_cost:.2f}") |
|
|
| |
| print("\nRunning PPO-Lag on SafetyPointGoal1-v0...") |
| ppolag_ret, ppolag_cost = run_experiment( |
| 'PPOLag', 'SafetyPointGoal1-v0', seed=0, |
| total_steps=200000, log_dir='/tmp/cspo_bench/ppolag' |
| ) |
| print(f"PPO-Lag - Return: {ppolag_ret:.2f}, Cost: {ppolag_cost:.2f}") |
|
|
| print("\nComparison:") |
| print(f"CSPO: Return={cspo_ret:.2f}, Cost={cspo_cost:.2f}") |
| print(f"PPO-Lag: Return={ppolag_ret:.2f}, Cost={ppolag_cost:.2f}") |
|
|