python - 谷歌 RL 足球模拟器的录制屏幕
问题描述
我正在尝试使用基于openAI-Gym的谷歌足球模拟器模拟足球比赛时录制屏幕。我目前的代码是:
import gfootball.env as football_env
env = football_env.create_environment(env_name='11_vs_11_stochastic', render=True)
env.reset()
done = False
while not done:
action = env.action_space.sample()
observation, reward, done, info = env.step(action)
它显示了游戏,但我不知道如何记录它。任何帮助,将不胜感激。
解决方案
如果其他人想知道,这里有一个很好的文档。您需要做的就是添加write_video = True
到环境配置中。我的代码现在看起来像这样并且可以工作:
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from absl import app
from absl import flags
from absl import logging
from gfootball.env import config
from gfootball.env import football_env
FLAGS = flags.FLAGS
flags.DEFINE_string('players', 'keyboard:left_players=1',
'Semicolon separated list of players, single keyboard '
'player on the left by default')
flags.DEFINE_string('level', '', 'Level to play')
flags.DEFINE_enum('action_set', 'default', ['default', 'full'], 'Action set')
flags.DEFINE_bool('real_time', True,
'If true, environment will slow down so humans can play.')
flags.DEFINE_bool('render', True, 'Whether to do game rendering.')
def main(_):
players = FLAGS.players.split(';') if FLAGS.players else ''
assert not (any(['agent' in player for player in players])
), ('Player type \'agent\' can not be used with play_game.')
cfg = config.Config({
'action_set': FLAGS.action_set,
'dump_full_episodes': True,
'players': players,
'real_time': FLAGS.real_time,
'dump_full_episodes': True,
'tracesdir': 'path/to/dir',
'write_video': True,
'render': True
})
if FLAGS.level:
cfg['level'] = FLAGS.level
env = football_env.FootballEnv(cfg)
if FLAGS.render:
env.render()
env.reset()
try:
while True:
_, _, done, _ = env.step([])
if done:
env.reset()
except KeyboardInterrupt:
logging.warning('Game stopped, writing dump...')
env.write_dump('shutdown')
exit(1)
if __name__ == '__main__':
app.run(main)
请注意,我刚刚在官方 github repo 的文件中添加了一些配置。
推荐阅读
- php - 我们如何获得动态下拉菜单以根据先前的下拉菜单显示特定选项,并能够随机化输出?
- java - 用vue和spring下载excel文件
- mysql - 尝试从链接服务器检索数据 - 在“等待初始通信数据包”时丢失与 MySQL 服务器的连接,系统错误:10060”
- python-3.x - 无法在标签上显示变量
- javascript - React - 如何构建一个简单的按钮应用程序?
- tfs - 如何从 TFS WorkItemTrackingHttpClient QueryByWiqlAsync 分页结果
- java - 找不到适合 jdbc:postgresql - 可执行的 java jar 的驱动程序
- java - EventSourceHandler 被错误的事件触发?
- javascript - 为什么 for..of 不能处理这个规范函数
- javascript - 刷新饼图后,切片值被清除