open_spiel 随笔
------------恢复内容开始------------
------------恢复内容开始------------
遇到的一些疑惑且已经解决的
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 随笔的更多相关文章
- AI人工智能系列随笔
初探 AI人工智能系列随笔:syntaxnet 初探(1)
- 【置顶】CoreCLR系列随笔
CoreCLR配置系列 在Windows上编译和调试CoreCLR GC探索系列 C++随笔:.NET CoreCLR之GC探索(1) C++随笔:.NET CoreCLR之GC探索(2) C++随笔 ...
- C++随笔:.NET CoreCLR之GC探索(4)
今天继续来 带大家讲解CoreCLR之GC,首先我们继续看这个GCSample,这篇文章是上一篇文章的继续,如果有不清楚的,还请翻到我写的上一篇随笔.下面我们继续: // Initialize fre ...
- C++随笔:从Hello World 探秘CoreCLR的内部(1)
紧接着上次的问题,上次的问题其实很简单,就是HelloWorld.exe运行失败,而本文的目的,就是成功调试HelloWorld这个控制台应用程序. 通过我的寻找,其实是一个名为TryRun的文件出了 ...
- ASP.NET MVC 系列随笔汇总[未完待续……]
ASP.NET MVC 系列随笔汇总[未完待续……] 为了方便大家浏览所以整理一下,有的系列篇幅中不是很全面以后会慢慢的补全的. 学前篇之: ASP.NET MVC学前篇之扩展方法.链式编程 ASP. ...
- 使用Beautiful Soup编写一个爬虫 系列随笔汇总
这几篇博文只是为了记录学习Beautiful Soup的过程,不仅方便自己以后查看,也许能帮到同样在学习这个技术的朋友.通过学习Beautiful Soup基础知识 完成了一个简单的爬虫服务:从all ...
- 利用Python进行数据分析 基础系列随笔汇总
一共 15 篇随笔,主要是为了记录数据分析过程中的一些小 demo,分享给其他需要的网友,更为了方便以后自己查看,15 篇随笔,每篇内容基本都是以一句说明加一段代码的方式, 保持简单小巧,看起来也清晰 ...
- 《高性能javascript》 领悟随笔之-------DOM编程篇(二)
<高性能javascript> 领悟随笔之-------DOM编程篇二 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整 ...
- 《高性能javascript》 领悟随笔之-------DOM编程篇
<高性能javascript> 领悟随笔之-------DOM编程篇一 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整 ...
随机推荐
- 1.2Hadoop概述
- JUC 常用4大并发工具类
什么是JUC? JUC就是java.util.concurrent包,这个包俗称JUC,里面都是解决并发问题的一些东西 该包的位置位于java下面的rt.jar包下面 4大常用并发工具类: Count ...
- Kafka索引设计的亮点
前言 其实这篇文章只是从Kafka索引入手,来讲述算法在工程上基于场景的灵活运用.单单是因为看源码的时候有感而写之. 索引的重要性 索引对于我们来说并不陌生,每一本书籍的目录就是索引在现实生活中的应用 ...
- linux(centos)环境下安装rabbitMq
1.由于rabbitMq是用Erlang语言写的,因此要先安装Erlang环境 下载Erlang :http://www.rabbitmq.com/releases/erlang/erlang-19. ...
- 再解决不了前端加密我就吃shi
参考文章 快速定位前端加密方法 渗透测试-前端加密测试 前言 最近学习挖洞以来,碰到数据做了加密基本上也就放弃了.但是发现越来越多的网站都开始做前端加密了,不论是金融行业还是其他.所以趁此机会来捣鼓一 ...
- java安全编码指南之:方法编写指南
目录 简介 不要在构造函数中调用可以被重写的方法 不要在clone()方法中调用可重写的方法 重写equals()方法 hashCode和equals compareTo方法的实现 简介 java程序 ...
- Camera光学、成像和 3A 算法 (视觉),camera开发
简单介绍 转载:https://blog.csdn.net/ShareUs/article/details/94295628 成像与光学.计算机视觉,图像处理,数字成像.自动驾驶与视觉. 镜头设计:人 ...
- Arduino Uno微控制器采用的是Atmel的ATmega328
参考:https://www.yiboard.com/thread-831-1-1.html 在本篇文章中,我们将详细介绍Arduino开发板的硬件电路部分,具体来说,就是介绍Arduino Uno开 ...
- Java (三)APACHE Commons IO 常规操作
上一篇:Java (二)基于Eclipse配置Commons IO的环境 例1:查看文件.文件夹的长度(大小). 1 import java.io.File; 2 3 import org.apach ...
- 【题解】PTA-Little Bird
Link 单调队列板子. 题目大意:一个点可以由距离它不超过\(k\)的点跳过来,如果那个点比它高就不需要花费体力,否则花费\(1\)的体力.问走到\(n\)的最小体力,多组询问. 显然的转移方程,设 ...