liuzuxin / OSRL

🤖 Elegant implementations of offline safe RL algorithms in PyTorch
https://offline-saferl.org
Apache License 2.0
161 stars 12 forks source link

Want to see the render results #4

Closed sherlook closed 1 year ago

sherlook commented 1 year ago

Hello, I trained the model and want to see the render results in eval phase.I made the following changes in BCQLTrainer.py .

    def rollout(self):
        """
        Evaluates the performance of the model on a single episode.
        """
        obs, info = self.env.reset()
        episode_ret, episode_cost, episode_len = 0.0, 0.0, 0
        for _ in range(self.model.episode_len):
            act, _ = self.model.act(obs)
            obs_next, reward, terminated, truncated, info = self.env.step(act)
            cost = info["cost"] * self.cost_scale
            obs = obs_next
            episode_ret += reward
            episode_len += 1
            episode_cost += cost
            if terminated or truncated:
                break

            self.env.render()

           return episode_ret, episode_len, episode_cost

In eval_bcql.py

    env = wrap_env(
        env=gym.make(cfg["task"], render_mode="human"),
        reward_scale=cfg["reward_scale"],
    )

But I got it

C:\Users\s3424\anaconda3\envs\RLenv\python.exe D:/Code/Python/OSRL/examples/eval/eval_bcql.py
OApackage is not installed, can not use CDT.
load config from D:\Code\Python\OSRL\examples\train\logs\OfflineCarCircle1Gymnasium-v0-cost-10\BCQL_episode_len300-790e\BCQL_episode_len300-790e\config.yaml
load model from D:\Code\Python\OSRL\examples\train\logs\OfflineCarCircle1Gymnasium-v0-cost-10\BCQL_episode_len300-790e\BCQL_episode_len300-790e\checkpoint/model.pt
Traceback (most recent call last):
  File "D:\Code\Python\OSRL\examples\eval\eval_bcql.py", line 82, in <module>
    eval()
  File "C:\Users\s3424\anaconda3\envs\RLenv\lib\site-packages\pyrallis\argparsing.py", line 158, in wrapper_inner
    response = fn(cfg, *args, **kwargs)
  File "D:\Code\Python\OSRL\examples\eval\eval_bcql.py", line 74, in eval
    ret, cost, length = trainer.evaluate(args.eval_episodes)
  File "D:\Code\Python\OSRL\osrl\algorithms\bcql.py", line 327, in evaluate
    epi_ret, epi_len, epi_cost = self.rollout()
  File "C:\Users\s3424\anaconda3\envs\RLenv\lib\site-packages\torch\autograd\grad_mode.py", line 27, in decorate_context
    return func(*args, **kwargs)
  File "D:\Code\Python\OSRL\osrl\algorithms\bcql.py", line 353, in rollout
    self.env.render()
  File "C:\Users\s3424\anaconda3\envs\RLenv\lib\site-packages\gymnasium\core.py", line 418, in render
    return self.env.render()
  File "C:\Users\s3424\anaconda3\envs\RLenv\lib\site-packages\gymnasium\core.py", line 418, in render
    return self.env.render()
  File "C:\Users\s3424\anaconda3\envs\RLenv\lib\site-packages\gymnasium\core.py", line 418, in render
    return self.env.render()
  [Previous line repeated 1 more time]
  File "C:\Users\s3424\anaconda3\envs\RLenv\lib\site-packages\gymnasium\wrappers\order_enforcing.py", line 70, in render
    return self.env.render(*args, **kwargs)
  File "C:\Users\s3424\anaconda3\envs\RLenv\lib\site-packages\gymnasium\wrappers\env_checker.py", line 63, in render
    return env_render_passive_checker(self.env, *args, **kwargs)
  File "C:\Users\s3424\anaconda3\envs\RLenv\lib\site-packages\gymnasium\utils\passive_env_checker.py", line 391, in env_render_passive_checker
    result = env.render()
  File "C:\Users\s3424\anaconda3\envs\RLenv\lib\site-packages\gymnasium\core.py", line 418, in render
    return self.env.render()
  File "C:\Users\s3424\anaconda3\envs\RLenv\lib\site-packages\gymnasium\core.py", line 418, in render
    return self.env.render()
  File "C:\Users\s3424\anaconda3\envs\RLenv\lib\site-packages\gymnasium\wrappers\order_enforcing.py", line 70, in render
    return self.env.render(*args, **kwargs)
  File "C:\Users\s3424\anaconda3\envs\RLenv\lib\site-packages\gymnasium\wrappers\env_checker.py", line 63, in render
    return env_render_passive_checker(self.env, *args, **kwargs)
  File "C:\Users\s3424\anaconda3\envs\RLenv\lib\site-packages\gymnasium\utils\passive_env_checker.py", line 391, in env_render_passive_checker
    result = env.render()
  File "C:\Users\s3424\anaconda3\envs\RLenv\lib\site-packages\safety_gymnasium\builder.py", line 312, in render
    assert self.render_parameters.mode, 'Please specify the render mode when you make env.'
AssertionError: Please specify the render mode when you make env.

How should I solve this problem.

Ja4822 commented 1 year ago

Hi, you can use the original environment. For example, use SafetyCarCircle1Gymnasium-v0 instead. For safety_gymnasium environments, you can specify render_mode="human", but for bullet_safety_gym and metadrive, they have distinct rendering arguments which you can find in their respective repositories.

sherlook commented 1 year ago

THANKS!