虽然我可以设法让示例和我自己的代码运行,但我对 OpenAI 健身房 API 背后的真实语义/期望更加好奇,尤其是 Env.reset()
什么时候需要重置?每集结尾?还是只有在创建环境之后?
我宁愿认为在每一集之前都是有道理的,但我无法明确地阅读!
我想在 OpenAI 环境中修改一些东西。如果我们使用Cartpole示例,那么我们可以编辑类 init 函数中的内容,但使用Box2D它的环境似乎并不那么简单。
例如,考虑BipedalWalker环境。
在这种情况下,我将如何编辑SPEED_HIP或SPEED_KNEE变量之类的内容?
我正在使用 openAI 的stable-baselines训练强化学习代理。我还使用optuna优化代理超参数。
为了加快该过程,我在不同的函数调用中使用多重处理。具体参见SubprocVecEnv此处文档study.optimize中的建议(分别在 1.15.3 和 1.10.4 下)。
import numpy as np
from stable_baselines.common.vec_env import SubprocVecEnv
from stable_baselines import PPO2
from stable_baselines.common.policies import MlpLnLstmPolicy
import optuna
n_cpu = 4
def optimize_ppo2(trial):
""" Learning hyperparamters we want to optimise"""
return {
'n_steps': int(trial.suggest_loguniform('n_steps', 16, 2048)),
'gamma': trial.suggest_loguniform('gamma', 0.9, 0.9999),
'learning_rate': trial.suggest_loguniform('learning_rate', 1e-5, 1.),
'ent_coef': trial.suggest_loguniform('ent_coef', 1e-8, 1e-1),
'cliprange': trial.suggest_uniform('cliprange', 0.1, 0.4),
'noptepochs': int(trial.suggest_loguniform('noptepochs', 1, 48)),
'lam': trial.suggest_uniform('lam', 0.8, 1.)
}
def optimize_agent(trial):
""" …Run Code Online (Sandbox Code Playgroud) 因此,我尝试使用gym 在自定义环境中执行一些强化学习,但是我对spaces.box 的工作原理感到非常困惑。每个参数的含义是什么?例如,如果我有一个涉及大量信息的游戏状态,例如角色的生命值、他们的统计数据和能力,我不确定这样的东西是否会在 Box 中表示为观察状态。另外,在一款具有多种能力的游戏中,最好对它们进行一次性编码,还是将它们保留为常规增量 Id,因为我想使用神经网络来查找预期的 Q 值。
我正在尝试使用 OpenAI 执行以下代码:
import gym
env = gym.make('CarRacing-v0')
env.reset()
for _ in range(1000):
env.render()
env.step(env.action_space.sample())
Run Code Online (Sandbox Code Playgroud)
但它会抛出错误:
fn = getattr(mod, attr_name) AttributeError: 模块 'gym.envs.box2d' 没有属性 'CarRacing'
然后我尝试通过 pip install box2d-py 安装 box2d 并抛出此错误:
ERROR: Command errored out with exit status 1:
command: 'C:\Users\Junior\Anaconda\envs\gym\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\Junior\\AppData\\Local\\Temp\\pip-install-w8awn22p\\box2d-py\\setup.py'"'"'; __file__='"'"'C:\\Users\\Junior\\AppData\\Local\\Temp\\pip-install-w8awn22p\\box2d-py\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\Junior\AppData\Local\Temp\pip-record-netg1nlq\install-record.txt' --single-version-externally-managed --compile --install-headers 'C:\Users\Junior\Anaconda\envs\gym\Include\box2d-py'
cwd: C:\Users\Junior\AppData\Local\Temp\pip-install-w8awn22p\box2d-py\
Complete output (16 lines):
Using setuptools (version 45.2.0.post20200210).
running install
running build
running build_py …Run Code Online (Sandbox Code Playgroud) python machine-learning reinforcement-learning box2d openai-gym
我想创建自己的健身房环境。我已按照此处解释的步骤进行操作: https: //github.com/openai/gym/blob/master/docs/creating-environments.md。根据他们的建议,我创建了环境(链接:https://drive.google.com/open? id=1RmcSBZYKCARaNsdlOsACrk9ls8snqxlj )。安装并运行后,将创建环境并显示打印输出“已创建,步骤”。但是,当我再次按下“运行”按钮(spyder ide:python3.7)时,它向我显示“错误:无法重新注册 id:foo-v0”。如果我按“重新启动内核”按钮,问题将暂时消失。但再次“运行”会显示相同的错误。请帮我解决这个问题。
runfile('F:/gym-foo/a.py', wdir='F:/gym-foo')
Created
Step
runfile('F:/gym-foo/a.py', wdir='F:/gym-foo')
Reloaded modules: gym_foo, gym_foo.envs, gym_foo.envs.foo_env
Traceback (most recent call last):
File "F:\gym-foo\a.py", line 3, in <module>
env = gym.make('gym_foo:foo-v0')
File "C:\Users\nasif\anaconda3\lib\site-packages\gym\envs\registration.py", line 142, in make
return registry.make(id, **kwargs)
File "C:\Users\nasif\anaconda3\lib\site-packages\gym\envs\registration.py", line 86, in make
spec = self.spec(path)
File "C:\Users\nasif\anaconda3\lib\site-packages\gym\envs\registration.py", line 106, in spec
importlib.import_module(mod_name)
File "C:\Users\nasif\anaconda3\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line …Run Code Online (Sandbox Code Playgroud) 我对 OpenAi 健身房完全陌生,我刚刚安装了健身房,然后尝试为其创建环境,
env = gym.make('MsPacman-v0')所以我收到以下错误:
---------------------------------------------------------------------------
Exception Traceback (most recent call last)
<ipython-input-21-e04adf623175> in <module>
----> 1 env = gym.make('MsPacman-v0')
~\Anaconda3\envs\env_project\lib\site-packages\gym\envs\registration.py in make(id, **kwargs)
~\Anaconda3\envs\env_project\lib\site-packages\gym\envs\registration.py in make(self, path, **kwargs)
~\Anaconda3\envs\env_project\lib\site-packages\gym\envs\registration.py in make(self, **kwargs)
~\Anaconda3\envs\env_project\lib\site-packages\gym\envs\atari\atari_env.py in __init__(self, game,
mode, difficulty, obs_type, frameskip, repeat_action_probability, full_action_space)
~\Anaconda3\envs\env_project\lib\site-packages\atari_py\games.py in get_game_path(game_name)
18 path = os.path.join(_games_dir, game_name) + ".bin"
19 if not os.path.exists(path):
---> 20 raise Exception('ROM is missing for %s, see https://github.com/openai/atari-py#roms
for instructions' % (game_name,))
21 return path
22
Exception: ROM is …Run Code Online (Sandbox Code Playgroud) python machine-learning reinforcement-learning jupyter-notebook openai-gym
我正在使用 RL 编写自动驾驶代码。我正在使用稳定的基线3和开放的人工智能健身房环境。我在 jupyter 笔记本中运行以下代码,但出现以下错误:
# Testing our model
episodes = 5 # test the environment 5 times
for episodes in range(1,episodes+1): # looping through each episodes
bs = env.reset() # observation space
# Taking the obs and passing it through our model
# tells that which kind of the action is best for our work
done = False
score = 0
while not done:
env.render()
action, _ = model.predict(obs) # now using model here # returns model action and …Run Code Online (Sandbox Code Playgroud) 在一些OpenAI健身房环境中,有一个"ram"版本.例如:Breakout-v0和Breakout-ram-v0.
使用时Breakout-ram-v0,每个观察是一个长度为128的数组.
问题:如何将Breakout-v0(160 x 210图像)的观察值转换为观察形式Breakout-ram-v0(长度为128的数组)?
我的想法是训练模型Breakout-ram-v0并显示使用Breakout-v0环境播放的训练模型.