关键词:
ELF是一个用于游戏研究的应用广泛的(Extensive)、轻量级的(Lightweight)、灵活的(Flexible)平台,特别适用于实时战略(RTS)游戏。在C++方面,ELF采用C++线程来并发运行多个游戏。在Python方面,ELF可以一次性返回一批游戏状态,使其对现代RL(强化学习)非常友好。另一方面,在其他平台(例如OpenAI Gym)中,一个Python接口只能包含一个游戏实例。这使得游戏的并发运行有点复杂,而这又是许多现代强化学习算法的要求。
对于RTS游戏的研究,ELF配备了一个快速的RTS引擎,以及三个具体的实例环境:MiniRTS、抢旗帜和塔防。 MiniRTS具有实时战略游戏的所有关键特点,包括收集资源、建筑设施和部队、侦察可感知地区以外的未知地区、防御或攻击敌人。用户可以访问其内部表现形式,并可以随意更改游戏设置。
ELF具有以下几个特点:
-
广泛性:任何具有C/C++接口的游戏都可以通过编写一个简单的包装器来嵌入到这个框架中来。例如,我们已经将Atari游戏结合到我们的框架中,并可以看到每个核心的模拟速度与单核版本相当,因此这比使用多处理器或Python多线程的实现要快得多。
-
轻量级:ELF运行速度非常快,开销很小。基于RTS引擎的简单的游戏(MiniRTS)在MacBook Pro上运行的话,每个核可以跑出每秒40K帧的速度。如果是从头开始训练一个模型,则使用6个CPU和1个GPU需花费一天的时间。
-
灵活性:环境和actor(演员,译者注:可以理解为执行某些固定操作的独立单元)之间的搭配非常灵活,例如,一个环境对应一个代理(例如Vanilla A3C)、一个环境对应多个代理(例如自动播放/MCTS)的,或多个环境对应一个actor的(例如, BatchA3C、GA3C)。此外,任何构建在RTS引擎顶层的游戏都可以完全访问其内部表示和动态。除了高效的模拟器,我们还提供了一个轻巧而又强大的强化学习框架。该框架可以承载大多数现有的RL算法。在这个开源版本中,我们提供了用PyTorch编写的最先进的Actor-Critic(演员-评判家)算法。
代码结构
ELF代码结构如下。
- 文件夹
elf
下的代码用于处理并发仿真,与游戏无关。 - 文件夹
atari
包含了游戏Atari(需要ALE)的Python包装器和模型催收系统软件。 - 文件夹
rts/engine
包含了RTS引擎。rts/game_MC
、rts/game_CF
和rts/game_TD
是基于此引擎构建的三个游戏。
基本用法
下面是ELF的伪代码。
初始化代码如下所示:
# We run 1024 games concurrently.
num_games = 1024
# Wait for a batch of 256 games.
batchsize = 256
# The return states contain key ‘s‘, ‘r‘ and ‘terminal‘
# The reply contains key ‘a‘ to be filled from the Python side.
# The definitions of the keys are in the wrapper of the game.
input_spec = dict(s=‘‘, r=‘‘, terminal=‘‘)
reply_spec = dict(a=‘‘)
context = Init(num_games, batchsize, input_spec, reply_spec)
主循环也很简单:
# Start all game threads and enter main loop.
context.Start()
while True:
# Wait for a batch of game states to be ready
# These games will be blocked, waiting for replies.
batch = context.Wait()
# Apply a model to the game state. The output has key ‘pi‘
# You can do whatever you want here. E.g., applying your favorite RL algorithms.
output = model(batch)
# Sample from the output to get the actions of this batch.
reply[‘a‘][:] = SampleFromDistribution(output)
# Resume games.
context.Steps()
# Stop all game threads.
context.Stop()
依赖
需要使用支持C++ 11的C++编译器(例如,gcc 4.9)。依赖以下库:
球球大作战的游戏简介
...一款超萌酷,超有挑战性,可与全球玩家实时对战的休闲游戏。轻松的实时对战休闲竞技游戏。2015年,一款名不见经传的休闲对战手游《球球大作战》在iOS平台和安卓平台上线后,很快就获得了业界和玩家的一致认可。没有地... 查看详情
Facebook:用于订阅用户到 Facebook(webhook)以进行实时更改的图形 api 是啥
】Facebook:用于订阅用户到Facebook(webhook)以进行实时更改的图形api是啥【英文标题】:Facebook:WhatisthegraphapiforsubscribingusertotheFacebook(webhook)forrealtimechangeFacebook:用于订阅用户到Facebook(webhook)以进行实时更改的图形api是什么【发... 查看详情
用于创建 gmail/google group/facebook 类型的界面(和一些功能)的开源框架
】用于创建gmail/googlegroup/facebook类型的界面(和一些功能)的开源框架【英文标题】:Opensourceframeworktocreategmail/googlegroup/facebookkindofinterface(andsomefunctionalities)【发布时间】:2013-01-1405:49:23【问题描述】:我正在开始一个新的开源... 查看详情
是否有用于制作“链接预览”文本和图标的开源代码,例如在 facebook 中? [关闭]
...有用于制作“链接预览”文本和图标的开源代码,例如在facebook中?[关闭]【英文标题】:Isthereopen-sourcecodeformaking\'linkpreview\'textandicons,likeinfacebook?[closed]【发布时间】:2011-06-0611:29:18【问题描述】:在facebook中,当您分享链接时... 查看详情
facebookctf平台搭建--年轻人的第一个做题平台
项目地址:https://github.com/facebook/fbctf介绍:从2013年开始,Facebook就在全世界举办CTF竞赛。现在,它将它的CTF平台源码放在Github上开源并向大众开放CTF平台。 Facebook安全部工程师GulshanSingh说:我们为所有人提供了一个能在后台... 查看详情
android平台感染elf文件实现模块注入
对游戏动态修改之前首先要将外挂模块注入游戏进程,本章将介绍Android平台上通过感染ELF文件实现模块注入。1.1实现原理可执行文件感染就是通过修改可执行文件,添加自己的代码,使得可执行文件运行时先执行添... 查看详情
开源实时日志分析elk平台部署
开源实时日志分析ELK平台部署时间 2015-07-2117:13:10 51CTO推荐博文原文 http://baidu.blog.51cto.com/71938/1676798主题 Logstash ElasticSearch 开源开源实时日志分析ELK平台部署日志主要包括系统日志、应用程序日志... 查看详情
elk实时日志分析平台部署(代码片段)
ELK简介:ELK是三个开源软件的缩写,分别表示:Elasticsearch,Logstash,Kibana,它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官... 查看详情
centos7搭建开源分布式搜索平台elk实现日志实时搜索并展示图表
...介 Elasticsearch是个基于Lucene实现的开源、分布式、restful的全文本搜索引擎,此外他还是一个分布式实时文档存储,其中每个文档的每个filed均是可被索引的数据,且可被搜索,也是一个带实时分析功能的搜... 查看详情
我发起了一个.netcore平台上的开源项目shadowdomain用于热更新
大家好, 我发起了一个.NetCore平台上的开源项目ShadowDomain 用于热更新。 简单的说,原理就是类似Asp.net那样让当前WebApp运行在一个AppDomain中,当WebApp的Bin目录或者Web.config被更新时,就会创建一个新的AppDomain,我们把... 查看详情
用于实时多人游戏的 Node.js UDP
】用于实时多人游戏的Node.jsUDP【英文标题】:Node.jsUDPforrealtimemulti-playergame【发布时间】:2012-07-0922:22:44【问题描述】:我正在使用node.js构建一个基于浏览器的实时多人游戏。目前,我让客户端通过socket.io将用户输入发送到游戏... 查看详情
facebook开源代码分析工具——marianatrench
Facebook的安全团队本周向开源社区揭晓了一个新的开源项目——MarianaTrench,这是一个用于识别Android和Java应用程序漏洞的开源工具,Facebook此前一直在公司内部使用 这个以应用安全为重点的工具可以分析数千万行的大型... 查看详情
“此游戏不适用于您的手机” Facebook 通知错误
】“此游戏不适用于您的手机”Facebook通知错误【英文标题】:"Thisgameisnotavailableforyourphone"FacebookNotificationError【发布时间】:2019-04-0506:19:19【问题描述】:我正在使用Ionic/Cordova开发应用程序。我已经在Facebook开发者控制... 查看详情
制作实时 3D 场景的最简单方法,有点像一个简单的游戏(用于模拟器可视化目的)
】制作实时3D场景的最简单方法,有点像一个简单的游戏(用于模拟器可视化目的)【英文标题】:easiestwaytomakealive3dscene,abitlikeasimplegame(forsimulatorvisualisationpurposes)【发布时间】:2010-10-1811:46:47【问题描述】:我正在构建一个船... 查看详情
oauth_1
...访问数据的开源授权协议。比如,一个游戏应用可以访问Facebook的用户数据。用户访问web游戏应用,该游戏应用要求用户通过Facebook登录。用户登录到Facebook,再重定向回游戏应用,游戏应用就可以访问用户在Facebook数据了,并且... 查看详情
amd开源显卡光追分析器,可提升游戏开发性能,网友:a卡战未来
...,终于把Radeon光线追踪分析器(RRA)在GitHub上开源了!简单来说,RRA是一套可以提高AMDGPU光线追踪性能的工具。虽然它在今年7月就已经被提出,但当时在GitHub上除了“一纸”文档之外就没有任何东西。而... 查看详情
开源实时日志分析elk平台部署
ELK架构图:1.JDK环境-------------------1.1下载最新JDK,解压到/usr/local/java目录。1.2设置环境变量打开/etc/profile,添加下面内容exportJAVA_HOME=/usr/local/javaexportJRE_HOME=$JAVA_HOME/jreexportPATH=$PATH:$JAVA_HOME/binexportCLASSPAT 查看详情
elk搭建实时日志分析平台(代码片段)
...时日志分析平台导言ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成,ELK平台可以同时实现日志收集、日志搜索和日志分析的功能。对于生产环境中海量日志信息的分析处理无疑不是一个好的解决方案。官方网站:https://www.elast... 查看详情