大家好!今天咱们来聊聊在OpenAI里创建新的Gym环境这个事儿。有小伙伴接到了用机器学习让AI智能体玩电子游戏的作业,不想用现成的环境,想自己创建一个新的,那该咋整呢?还有没有其他办法让AI智能体玩特定游戏,而不用依赖OpenAI Gym呢?
创建新环境的步骤
首先,咱们可以参考Martin Thoma给出的方法。可以看看他的banana - gym,这是个非常小的环境示例。创建新环境的具体步骤如下:
1. 创建带有PIP包结构的新仓库
仓库结构得像下面这样:
gym-foo/
README.md
setup.py
gym_foo/
__init__.py
envs/
__init__.py
foo_env.py
foo_extrahard_env.py
具体内容可以参考这个链接。不过这里面没提到的细节,特别是foo_env.py里一些函数该怎么写,可以看看例子,也可以去gym.openai.com/docs/找找答案。
下面是个示例代码:
import gym
class FooEnv(gym.Env):
metadata = {'render.modes': ['human']}
def __init__(self):
pass
def _step(self, action):
self._take_action(action)
self.status = self.env.step()
reward = self._get_reward()
ob = self.env.getState()
episode_over = self.status != hfo_py.IN_GAME
return ob, reward, episode_over, {}
def _reset(self):
pass
def _render(self, mode='human', close=False):
pass
def _take_action(self, action):
pass
def _get_reward(self):
if self.status == FOOBAR:
return 1
elif self.status == ABC:
return self.somestate ** 2
else:
return 0
2. 使用自己创建的环境
创建好环境后,使用方法如下:
import gym
import gym_foo
env = gym.make('MyEnv-v0')
另外,还有不少例子可以参考,像gym - soccer、gym - wikinav等。
其他方法和建议
Guilherme de Lazari也给出了一些建议。文档里提到创建新环境是可行的,大家可以参考现有环境的源代码获取灵感,这些代码在GitHub上都能找到。很多环境并不是从头实现的,而是给现有环境做了个包装,弄了个方便强化学习的接口。要是想自己做,也可以朝着这个方向试试,不过可能挺费时间。
还有个OpenAI的Universe也值得关注,它能和网站集成,比如可以让模型在Kongregate游戏上训练。但它没有Gym那么容易上手。
如果是新手,建议先在标准环境上做个基础实现,把基础问题解决了,再进一步探索。
要是你在创建环境时遇到“gym_foo imported but unused”这样的提示,可以告诉编辑器忽略这个导入,一般用import gym_foo # noqa就行。要是按照上面步骤操作后出现“gym_foo”导入错误,执行pip install -e .命令可能会有帮助。
希望这些内容能帮助大家在OpenAI中顺利创建新的Gym环境,让AI智能体在自己定制的游戏世界里大显身手!