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. ...
随机推荐
- java 常用类-String-1
一.字符串相关的类 1.1 String 的特性 String类:代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. String是一个fin ...
- python常用sys模块
sys.argv 命令行参数List,第一个元素是程序本身路径 sys.modules.keys() 返回所有已经导入的模块列表 sys.exc_info() 获取当前正在处理的异常类,exc_typ ...
- pytest封神之路第四步 内置和自定义marker
可以通过命令行查看所有marker,包括内置和自定义的 pytest --markers 内置marker 内置marker本文先讲usefixtures .filterwarnings .skip ...
- MySQL中concat()、concat_ws()、group_concat()函数的使用技巧与心得总结
Author:极客小俊 一个专注于web技术的80后 我不用拼过聪明人,我只需要拼过那些懒人 我就一定会超越大部分人! CSDN@极客小俊,原创文章, B站技术分享 B站视频 : Bilibili.c ...
- 靠这些秋招秘笈,齐姐的学妹今年已经拿到了 8 个offer!
小齐说: 现在秋招进行时,正在找工作的小伙伴进度都怎么样了呀? 今天这篇文章是我武大的学妹今年秋招的经验分享,庆妹去年才决定转行,现在已手握 N+ 个 offer - 这篇文章干货满满,庆妹对每一块面 ...
- idea如何通过数据库生成实体类
---恢复内容开始--- https://blog.csdn.net/liu_yulong/article/details/72910588 ---恢复内容结束---
- vue+less换肤,主题切换方案
新的项目对于客户自定义要求很高,然后换肤是其中一个很小的模块,经过了一段时间的摸索,看了许多文章,找到了几种方案. https://www.cnblogs.com/leiting/p/11203383 ...
- Python下的图像处理库,你选哪个?
奥里给~ 转载:https://blog.csdn.net/chen801090/article/details/105795068/ 在进行数字图像处理时,我们经常需要对图像进行读取.保存.缩放.裁 ...
- ATMEGA的SPI总线 - 第2部分
参考: 1.https://www.yiboard.com/thread-783-1-1.html 2.https://mansfield-devine.com/speculatrix/2018/01 ...
- 一键同步,紧跟潮流——CODING 现已支持导入 GitHub 仓库
为方便用户从 GitHub 快速迁移到 CODING 并开始使用,CODING 现已支持导入 GitHub 仓库.免去繁琐步骤,只需简单两步操作即可完成导入,让仓库静默同步,无缝衔接,平滑过渡:同时还 ...