------------恢复内容开始------------

------------恢复内容开始------------

遇到的一些疑惑且已经解决的

1. SPIEL_CHECK_GT()诸如此类的函数还有EQ 等
我猜测都是类似java的
EQ 就是 EQUAL等于
NE就是 NOT EQUAL不等于
GT 就是 GREATER THAN大于 
LT 就是 LESS THAN小于
GE 就是 GREATER THAN OR EQUAL 大于等于
LE 就是 LESS THAN OR EQUAL 小于等于
没找到这些宏定义或者是函数
但是结合代码来看,逻辑是说得通的。
2. Action 类
其实是类型,就是一个64位的int, 定义在 spiel_util.h 文件中
using Action = int64_t;

3. RankActionMixedBase 和 UnrankActionMixedBase
就是将向量转换为 integer,和它的逆过程

定义如下:
 1 // Helpers used to convert actions represented as integers in mixed bases.
2 // E.g. RankActionMixedBase({2, 3, 6}, {1, 1, 1}) = 1*18 + 1*6 + 1 = 25,
3 // and UnrankActioMixedBase(25, {2, 3, 6}, &digits) sets digits to {1, 1, 1}.
4 // For the rank, both vectors must be the same size. For the unrank, the digits
5 // must already have size equal to bases.size().
6 Action RankActionMixedBase(const std::vector<int>& bases,
7 const std::vector<int>& digits);
8
9 void UnrankActionMixedBase(Action action, const std::vector<int>& bases,
10 std::vector<int>* digits);
怎么将一个向量转化为一个整数?
代码比较简单
 1 // Used to convert actions represented as integers in mixed bases.
2 Action RankActionMixedBase(const std::vector<int>& bases,
3 const std::vector<int>& digits) {
4 SPIEL_CHECK_EQ(bases.size(), digits.size());
5 SPIEL_CHECK_GT(digits.size(), 0);
6
7 Action action = 0;
8 int one_plus_max = 1;
9 for (int i = digits.size() - 1; i >= 0; --i) {
10 SPIEL_CHECK_GE(digits[i], 0);
11 SPIEL_CHECK_LT(digits[i], bases[i]);
12 SPIEL_CHECK_GT(bases[i], 1);
13 action += digits[i] * one_plus_max;
14 one_plus_max *= bases[i];
15 SPIEL_CHECK_LT(action, one_plus_max);
16 }
17
18 return action;
19 }
 1 void UnrankActionMixedBase(Action action, const std::vector<int>& bases,
2 std::vector<int>* digits) {
3 SPIEL_CHECK_EQ(bases.size(), digits->size());
4 for (int i = digits->size() - 1; i >= 0; --i) {
5 SPIEL_CHECK_GT(bases[i], 1);
6 (*digits)[i] = action % bases[i];
7 action /= bases[i];
8 }
9 SPIEL_CHECK_EQ(action, 0);
10 }

以下是原理

三个判断要求 base[i] > 1, digits[i] >= 0, base[i] >= digits[i]

生成的整数是一系列的因式和, 而除了第一个因式之外的所有因式都有base[-1](这里的-1表示倒数第一个),又因为digits[-1]<base[-1] 所以取模运算后就是digits[-1]

然后再整除一下,进行上面的操作就可以得到倒数第二个数。

------------恢复内容结束------------

------------恢复内容结束------------

open_spiel 随笔的更多相关文章

  1. AI人工智能系列随笔

    初探 AI人工智能系列随笔:syntaxnet 初探(1)

  2. 【置顶】CoreCLR系列随笔

    CoreCLR配置系列 在Windows上编译和调试CoreCLR GC探索系列 C++随笔:.NET CoreCLR之GC探索(1) C++随笔:.NET CoreCLR之GC探索(2) C++随笔 ...

  3. C++随笔:.NET CoreCLR之GC探索(4)

    今天继续来 带大家讲解CoreCLR之GC,首先我们继续看这个GCSample,这篇文章是上一篇文章的继续,如果有不清楚的,还请翻到我写的上一篇随笔.下面我们继续: // Initialize fre ...

  4. C++随笔:从Hello World 探秘CoreCLR的内部(1)

    紧接着上次的问题,上次的问题其实很简单,就是HelloWorld.exe运行失败,而本文的目的,就是成功调试HelloWorld这个控制台应用程序. 通过我的寻找,其实是一个名为TryRun的文件出了 ...

  5. ASP.NET MVC 系列随笔汇总[未完待续……]

    ASP.NET MVC 系列随笔汇总[未完待续……] 为了方便大家浏览所以整理一下,有的系列篇幅中不是很全面以后会慢慢的补全的. 学前篇之: ASP.NET MVC学前篇之扩展方法.链式编程 ASP. ...

  6. 使用Beautiful Soup编写一个爬虫 系列随笔汇总

    这几篇博文只是为了记录学习Beautiful Soup的过程,不仅方便自己以后查看,也许能帮到同样在学习这个技术的朋友.通过学习Beautiful Soup基础知识 完成了一个简单的爬虫服务:从all ...

  7. 利用Python进行数据分析 基础系列随笔汇总

    一共 15 篇随笔,主要是为了记录数据分析过程中的一些小 demo,分享给其他需要的网友,更为了方便以后自己查看,15 篇随笔,每篇内容基本都是以一句说明加一段代码的方式, 保持简单小巧,看起来也清晰 ...

  8. 《高性能javascript》 领悟随笔之-------DOM编程篇(二)

    <高性能javascript> 领悟随笔之-------DOM编程篇二 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整 ...

  9. 《高性能javascript》 领悟随笔之-------DOM编程篇

    <高性能javascript> 领悟随笔之-------DOM编程篇一 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整 ...

随机推荐

  1. Java10新特性

    局部变量的类型推断 这个功能减少与编写Java相关的冗长度,同时保持对静态类型安全性的承诺 使用举例 public static void main(String[] args) { // 使用var ...

  2. 国产化之路-统信UOS操作系统安装

    专题目录 国产化之路-统信UOS操作系统安装 国产化之路-国产操作系统安装.net core 3.1 sdk 国产化之路-安装WEB服务器 国产化之路-安装达梦DM8数据库 国产化之路-统信UOS + ...

  3. GZip 压缩解压 工具类 [ GZipUtil ]

    片段 1 片段 2 pom.xml <dependency> <groupId>commons-codec</groupId> <artifactId> ...

  4. 如何让百度网盘下载速度达60MB/s!

    (软件下载方式在文末) 自从 PanDownload 被处理之后 一直没有超越它的可替代的应用出来 但是最近,竟然有人接盘了!重新制作上线 推出了更加强劲的复活版! 放张图,大家先感受下 60MB/s ...

  5. Optimisation

    https://www.cnblogs.com/wuyudong/p/writing-efficient-c-and-code-optimization.html 1 不要过多使用 stack ,尽量 ...

  6. 共享内存Distributed Memory 与分布式内存Distributed Memory

    我们经常说到的多核处理器,是指一个处理器(CPU)上有多个处理核心(CORE),共享内存多核系统我们可以将CPU想象为一个密封的包,在这个包内有多个互相连接的CORES,每个CORE共享一个主存,所有 ...

  7. Mysql安装(解压版)

    文章首推 刷网课请点击这里 刷二级请点击这里 论文查重请点击这里 WIFI破解详细教程 今日主题:Mysql安装(解压版) 环境 系统:windows10 版本:mysql5.7.29 安装过程 1. ...

  8. Book of Shaders 03 - 学习随机与噪声生成算法

    0x00 随机 我们不能预测天空中乌云的样子,因为它的纹理总是具有不可预测性.这种不可预测性叫做随机 (random). 在计算机图形学中,我们通常使用随机来模拟自然界中的噪声.如何获得一个随机值呢, ...

  9. Sticks(UVA - 307)【DFS+剪枝】

    Sticks(UVA - 307) 题目链接 算法 DFS+剪枝 1.这道题题意就是说原本有一些等长的木棍,后来把它们切割,切割成一个个最长为50单位长度的小木棍,现在想让你把它们组合成一个个等长的大 ...

  10. # BlackLivesMatter !

    下载 # BlackLivesMatter ! https://blacklivesmatter.com/ 黑人的生命是重要的运动资源 VueCroppie VueCroppie是一个Vue 2包装C ...