safe_rl/pg/algos.py (48 lines of code) (raw):
from functools import partial
from safe_rl.pg.agents import PPOAgent, TRPOAgent, CPOAgent
from safe_rl.pg.run_agent import run_polopt_agent
def ppo(**kwargs):
ppo_kwargs = dict(
reward_penalized=False,
objective_penalized=False,
learn_penalty=False,
penalty_param_loss=False # Irrelevant in unconstrained
)
agent = PPOAgent(**ppo_kwargs)
run_polopt_agent(agent=agent, **kwargs)
def ppo_lagrangian(**kwargs):
# Objective-penalized form of Lagrangian PPO.
ppo_kwargs = dict(
reward_penalized=False,
objective_penalized=True,
learn_penalty=True,
penalty_param_loss=True
)
agent = PPOAgent(**ppo_kwargs)
run_polopt_agent(agent=agent, **kwargs)
def trpo(**kwargs):
trpo_kwargs = dict(
reward_penalized=False,
objective_penalized=False,
learn_penalty=False,
penalty_param_loss=False # Irrelevant in unconstrained
)
agent = TRPOAgent(**trpo_kwargs)
run_polopt_agent(agent=agent, **kwargs)
def trpo_lagrangian(**kwargs):
# Objective-penalized form of Lagrangian TRPO.
trpo_kwargs = dict(
reward_penalized=False,
objective_penalized=True,
learn_penalty=True,
penalty_param_loss=True
)
agent = TRPOAgent(**trpo_kwargs)
run_polopt_agent(agent=agent, **kwargs)
def cpo(**kwargs):
cpo_kwargs = dict(
reward_penalized=False, # Irrelevant in CPO
objective_penalized=False, # Irrelevant in CPO
learn_penalty=False, # Irrelevant in CPO
penalty_param_loss=False # Irrelevant in CPO
)
agent = CPOAgent(**cpo_kwargs)
run_polopt_agent(agent=agent, **kwargs)