博弈论框架、算法与博弈实现

gamegym的Python项目详细描述


健身房

MIT LicenceBuild StatusPyPI versioncodecovCoverage Status

一个博弈论框架,提供一组博弈、通用api和若干博弈论算法。

{STR 1 } $项目的目标是提供用于构建复杂游戏的工具(例如棋盘游戏,具有部分信息或同时移动),计算近似策略,并为此类游戏创建人工智能,并为稳健的价值学习实验奠定基础。

正在积极开发中,寻找创意和贡献者!

概述

算法:

  • 结果抽样mccfr-nash均衡计算
  • 准确的最佳响应和可利用性
  • 近似最优响应和可利用性
  • 稀疏sgd值学习(已知特征值为线性)
  • 绘制策略开发图(请参见Matching PenniesRock-Paper-ScissorsGoofspiel(4)的绘图)

游戏:

  • 一般矩阵游戏(普通形式游戏),石头剪刀,匹配硬币,囚徒困境,…
  • goofspiel(gops)
  • 一张扑克牌,骰子扑克牌

游戏界面

有关rust中api的探索,请参见GTCogs

要实现游戏,您可以使用以下接口定义一个派生自gamegym.Game的类:

classMyRockPaperScissor(PartialInformationGame):ACTIONS=("rock","paper","scissors")def__init__(self):# Set thenumber of players and all game actionssuper().__init__(2,self.ACTIONS)definitial_state(self)->StateInfo:# Return node information, here player 0 is active and has all actions.# Note that in this simple game we do not use any game state.returnStateInfo.new_player(state=None,player=0,actions=self.ACTIONS)defupdate_state(self,situation:Situation,action)->StateInfo:# Return the node information after playing `action` in `situation`.iflen(situation.history)==0:returnStateInfo.new_player(state=None,player=1,actions=self.ACTIONS)p1payoff=1.0# TODO: compute from `situation`, e.g. from `situation.history`returnStateInfo.new_terminal(state=None,payoff=(x,-x))# Create game instancegame=MyRockPaperScissor()# Initial situations1=game.start()# Play some actionss2=game.play(s1,"rock")s3=s2.play("paper")# alias for game.play(s2, "paper")# See game resultasserts3.is_terminal()asserts3.payoff==(-1.0,1.0)

可用的基类是PerfectInformationGamePartialInformationGame。 (有专门的亚类ObservationSequenceGameSimultaneousGameMatrixGame-这将是一个更好的适合岩石剪纸)。

所有游戏中常见的主要辅助结构是包含信息的^ {< CD7>} 关于游戏节点本身,以及Situation,其中还包含游戏历史, 累积收益、游戏本身等。

game state是游戏用来跟踪实际游戏状态的任何结构,例如所有人手中的牌、游戏板状态、地图……在部分信息游戏中,这通常对玩家不可见,任何observations都是通过observations=(p0_obs, p1_obs, public_obs)传递到StateInfo

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaFX进度条从单独的函数更改而来   jvm使用java服务器选项   java在<li>元素中查找同名的最后一个链接   java问题将参数传递给不同公共类中的构造函数   如何在php中从java函数中获取字符串   java如何在Android中动态显示多个tile   java仅使用Ribbon而不使用任何服务注册表是否可以实现负载平衡?   Jersey 1.19版本的java Swagger JAXRS出现“冲突URI模板”错误   带H2数据库的java Spring boot jpa   从12:00:00到00:00:00的日期转换   Android中的java如何设置文本?   java密钥库“不支持的保护参数”   http使用Java在Java中发送httprequest。净包   SpringJava刷新数据库   java在Spring Boot应用程序中使用嵌入式MongoDb和MongoTemplate失败   java需要什么MatOfMatch对象?   xml使用Java中的合并算法将两个值合并为单个值   java SQLite数据库不保存数据为什么不工作