openspiel 随笔 05.05
现阶段的任务是向openspiel 中添加e一个自己的游戏
上次已经将大体的逻辑写完了,但运行时出了问题。state 为空。
Incorrect number of characters in string.
这个错误容易找,位于batter_chess.cc 的
std::unique_ptr<State> BattleChessGame::DeserializeState
不懂意思就找翻译,Deserialize 的意思是反序列化,是将 string 反序列化 为游戏的状态。batter_chess 的代码前面我基本仿照国际象棋的代码去写,后面是直接照搬 breakthrough 的代码过来改的。 那次写到这个函数的时候已经快凌晨一点了,我就偷懒了没有改
而是在breakthrough 的代码上自己注释了一些代码,想直接build 和 test 一下。
前面我判断后面几个函数可能并不重要,但是这个错误告诉我们后面几个函数都是非常重要的,只有 undoAction 这个函数你写不写影响都不大。
进一步来猜测openspiel游戏构建的逻辑.
对于 openspiel 的每一个游戏,都有 game 和 state 类。他们的关系有点复杂, 游戏有游戏状态,但我估计它只保存一个游戏状态,表示现在。
而 state 类的构造函数又有 game 对象。
我可能描述不清楚。game 类只是一个游戏的运行框架,游戏的主要逻辑还是在 state 类。state 只是游戏中的一个状态。
doApplyAction 是将动作实现,改变现有的状态,而这个函数里面又有 player 的切换。这个函数执行完之后, player 已经切换。对于 perfectInformation game, 这个游戏状态也是下一个 player 能够观察到的状态。
生成新的 Action 数组。也就是 LegalActions 。但是这个状态不能给该玩家使用,这个状态已经结束了它的生命周期。
所以 State 要序列化,变成字符串。
下一个玩家通过这个字符串反序列化一个状态。从该状态下生成一个 合法的动作数组,再挑选一个动作,然后 doApplyAction()
如此往复就是游戏的一个个回合。
所以不能够正确反序列化,所以游戏的状态那里是空, 上面的错误也触发了。
今晚遇到的第二个问题, action数组为空。问题的原因,
我使用 whitePieces, blackPieces 数组保存棋子的类型和棋子所在的状态,但是这些 Piece 没有正确的初始化,其值全部为(0, 0)
正确初始化后就没有问题了。
第三个问题
Spiel Fatal Error: /home/zhanghao/桌面/PycharmProjecr/open_spiel/open_spiel/tests/basic_tests.cc:127 action < game.NumDistinctActions()
这个我去查看了basic_tests.cc 的代码, 说是检查动作的排序,breakthrough 没有排序,所以我也没写, 加入排序后 错误消失了。
找到的一个bug
doApplyAction 没有维护 whtePieces 和 blackPieces。今天晚上先不改了,先记着。
openspiel 随笔 05.05的更多相关文章
- OpenSpiel 随笔 05.14
------------恢复内容开始------------ 这两天年总算把自己的游戏写完了,也通过了所有的测试. 我将自己的代码上传到了我的github上, 地址是 https://github.c ...
- 随笔编号-05 BigDecimal 处理集合
1 创建一个BigDecimal 对象 BigDecimal Sum = new BigDecimal(0); 2 一个BigDecimal 对象,保留2位小数点 Sum.setScale(2,B ...
- 【2018.05.05 C与C++基础】C++中的自动废料收集:概念与问题引入
在阅读C++语言的设计与演化一书时,作者多次提到希望能设计出一个自动废料收集,然而出于种种考虑,始终未将自动废料收集纳入标准讨论中,而是由Coder自己考虑是否在程序中实现废料收集. 当然了,许多Ja ...
- 什么是泛型 转载自http://www.blogjava.net/Jack2007/archive/2008/05/05/198566.html
我们在编写程序时,经常遇到两个模块的功能非常相似,只是一个是处理int数据,另一个是处理string数据,或者其他自定义的数据类型,但我们没有办法,只能分别写多个方法处理每个数据类型,因为方法的参数类 ...
- 2016/05/05 smarty ①分页 ② 查询后分页 ③缓存
samrty 分页 查询后分页 0505fch.php <?php include("init.inc.php"); include("DBDA.php&qu ...
- 2016/05/05 smarty ① 登录 ②主页面 ③删除 ④让缩略信息显示完整 (补:增加 修改 )
共 八个页面 ①login.php <?php include("init.inc.php"); $smarty->display("login.html& ...
- 梦想MxWeb3D,三维CAD协同设计平台 2019.05.05更新
SDK开发包下载地址: http://www.mxdraw.com/ndetail_20140.html 在线演示网址: http://www.mxdraw.com:3000/ 1. 增加CAD绘图 ...
- 梦想CAD控件 2019.05.05更新
下载地址: http://www.mxdraw.com/ndetail_20141.html 1. 增加vs2017版本控件 2. 增加windows触摸屏支持 3. 增加手写签名功能 4. 修改PL ...
- 2015.05.05,外语,读书笔记-《Word Power Made Easy》 15 “如何谈论事情进展” SESSION 42
HOW TO TALK ABOUT WHAT GOES ON TEASER PREVIEW 一些以-ate结束的动词,通常表示: to exhaust([ig'zɔ:st] n. 排气,排气装置 v. ...
随机推荐
- 告别硬编码,让你的POI导入导出拥抱变化
GitHub地址 | 博客 | 中文 | English | 原文链接 为什么使用AutoExcel? Excel导入导出在软件开发中非常常见,只要你接触过开发,就一定会遇到.相信很多人会跟我一样选择 ...
- Shell学习(四)Shell运算符
一.基础运算 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用. expr 是一款表达式计算工具,使用它能完成表达式的求值操作. #计算两个数 ...
- Hadoop框架:集群模式下分布式环境搭建
本文源码:GitHub·点这里 || GitEE·点这里 一.基础环境配置 1.三台服务 准备三台Centos7服务,基础环境从伪分布式环境克隆过来. 133 hop01,134 hop02,136 ...
- 我给VSCode报了个bug,微软工程师竟然凌晨回复了...
柠檬哥整理了50本计算机相关的电子书,关注公众号「后端技术学堂」,回复「1024」即可获取,回复「进群」拉你进读者技术交流群. 本文首发个人微信公众号,欢迎围观点击阅读原文 最近遇到一个有意思的bug ...
- Git-使用Rebase合并分支
commit 合并 在开发过程中,可能会出现多个 commit 所涉及的逻辑都是同一个功能模块,此时,会导致 log tree 非常的混乱,不美观,因此,我们可以将多个 commit 进行合并,变成一 ...
- HAProxy安装配置
概念 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要 ...
- PADS Layout VX.2.3 灌铜之后只显示灌铜外框,没有显示整块铜皮
操作系统:Windows 10 x64 工具1:PADS Layout VX.2.3 使用Copper Pour功能,画了一个灌铜区,并分配了网络. Tools > Pour Manager,打 ...
- 【题解】[CQOI]动态逆序对
题目链接 题意如题,维护一个动态序列的逆序对总数. 注意题目给的是\([1,n]\)的排列,所以没必要离散化了. 考虑逆序对:二维偏序可以用树状数组做,现在是三维偏序,即加了一个时间维度. 找一个数前 ...
- Docker笔记4:在 CentOS 上安装 Docker
Docker 是一个开源的应用容器引擎,主要有两个分支,一个是社区免费版(Docker CE),一个是企业版(Docker EE). 第1步:系统环境要求 Docker 支持的 CentOS 版本: ...
- 如何部署MongoDB并开启远程访问Docker版
Docker安装 安装方法 pull最新版本mongo docker pull mongo 运行 --name设置名称 -v挂载数据 -p端口映射 -d后台运行 mkdir ~/mongo #随便啦自 ...