现阶段的任务是向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的更多相关文章

  1. OpenSpiel 随笔 05.14

    ------------恢复内容开始------------ 这两天年总算把自己的游戏写完了,也通过了所有的测试. 我将自己的代码上传到了我的github上, 地址是 https://github.c ...

  2. 随笔编号-05 BigDecimal 处理集合

    1  创建一个BigDecimal 对象 BigDecimal Sum = new BigDecimal(0); 2  一个BigDecimal 对象,保留2位小数点 Sum.setScale(2,B ...

  3. 【2018.05.05 C与C++基础】C++中的自动废料收集:概念与问题引入

    在阅读C++语言的设计与演化一书时,作者多次提到希望能设计出一个自动废料收集,然而出于种种考虑,始终未将自动废料收集纳入标准讨论中,而是由Coder自己考虑是否在程序中实现废料收集. 当然了,许多Ja ...

  4. 什么是泛型 转载自http://www.blogjava.net/Jack2007/archive/2008/05/05/198566.html

    我们在编写程序时,经常遇到两个模块的功能非常相似,只是一个是处理int数据,另一个是处理string数据,或者其他自定义的数据类型,但我们没有办法,只能分别写多个方法处理每个数据类型,因为方法的参数类 ...

  5. 2016/05/05 smarty ①分页 ② 查询后分页 ③缓存

    samrty  分页   查询后分页 0505fch.php <?php include("init.inc.php"); include("DBDA.php&qu ...

  6. 2016/05/05 smarty ① 登录 ②主页面 ③删除 ④让缩略信息显示完整 (补:增加 修改 )

    共  八个页面 ①login.php <?php include("init.inc.php"); $smarty->display("login.html& ...

  7. 梦想MxWeb3D,三维CAD协同设计平台 2019.05.05更新

    SDK开发包下载地址: http://www.mxdraw.com/ndetail_20140.html 在线演示网址: http://www.mxdraw.com:3000/ 1.  增加CAD绘图 ...

  8. 梦想CAD控件 2019.05.05更新

    下载地址: http://www.mxdraw.com/ndetail_20141.html 1. 增加vs2017版本控件 2. 增加windows触摸屏支持 3. 增加手写签名功能 4. 修改PL ...

  9. 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. ...

随机推荐

  1. 研究生杂谈-1粗粒度(Coarse-grained)VS细粒度(fine-grained)

    粒度似乎是根据项目模块划分的细致程度区分的,一个项目模块(或子模块)分得越多,每个模块(或子模块)越小,负责的工作越细,就说粒度越细,否则为粗粒度. 简而言之: 粗粒度:模块的功能太过于集中. 细粒度 ...

  2. 从 LRU Cache 带你看面试的本质

    前言 大家好,这里是<齐姐聊算法>系列之 LRU 问题. 在讲这道题之前,我想先聊聊「技术面试究竟是在考什么」这个问题. 技术面试究竟在考什么 在人人都知道刷题的今天,面试官也都知道大家会 ...

  3. Anaconda, conda, pyenv, virtualenv的区别

    1.Python环境 Python解释器--Python.exe Python包集合--Lib,包括自带包和第三方包 2.Anaconda--一个科学计算环境,Python的发行版本 包括了Conda ...

  4. pytest封神之路第零步 快速入门

    背景:本文是在系列第五篇发表后的补充篇章,第一篇介绍了tep,可能对不熟悉pytest的朋友不够友好,特意补充入门篇,帮大家快速了解如何动手写pytest.如果你是从这篇文章第一次阅读,那么请忽略以上 ...

  5. c++11 新特性实战 (一):多线程操作

    c++11多线程操作 线程 thread int main() { thread t1(Test1); t1.join(); thread t2(Test2); t2.join(); thread t ...

  6. HTML中限制input 输入框输入内容

    限制 input 输入框只能输入纯数字1.onkeyup = "value=value.replace(/[^\d]/g,'')" 使用 onkeyup 事件,有 bug ,那就是 ...

  7. Python数据结构与算法之图的广度优先与深度优先搜索算法示例

    本文实例讲述了Python数据结构与算法之图的广度优先与深度优先搜索算法.分享给大家供大家参考,具体如下: 根据维基百科的伪代码实现: 广度优先BFS: 使用队列,集合 标记初始结点已被发现,放入队列 ...

  8. DOS批处理中%cd%与%~dp0的区别详解

    转载:https://www.jb51.net/article/105325.htm DOS批处理中%cd%与%~dp0的区别详解     Windows下批处理中%cd%和%~dp0都能用来表示当前 ...

  9. 每日一题 LeetCode 486. 预测赢家 【递推】【前缀和】【动态规划】

    题目链接 https://leetcode-cn.com/problems/predict-the-winner/ 题目说明 题解 主要方法:递推:动态规划:前缀和 解释说明: 求前缀和 pre_nu ...

  10. 自动创建新序列号的Cookies脚本

    已知一个网站在被访问的时候会读取电脑上存储的cookies 如果已经有cookie变量存在 则在存在的变量后按顺序增加新的序列 如电脑上有vst1变量的cookie了 那么新用户则自动创建为 vst2 ...