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则承载着整 ...
随机推荐
- C++获取运行程序当前目录
1 HMODULE GetSelfModuleHandle() 2 { 3 MEMORY_BASIC_INFORMATION mbi; 4 return ((::VirtualQuery(GetSel ...
- CVE-2018-8045
Joomla!Core SQL注入漏洞 CVE-2018-8045 受影响版本:joomla!3.5.0-3.8.5 漏洞描述: joomla!3.5.0-3.8.5版本对sql语句内的变量缺少类型转 ...
- Android作业 0923
计算器小应用 package com.example.myhomework2; import androidx.appcompat.app.AppCompatActivity; import andr ...
- 如何高雅的使用redis去获取一个值
//场景,给定一个订单号来从缓存中查询一个订单信息; 步骤: 1从redis中直接获取,有数据就返回 2.如果redis中没有值,就查数据库 3.数据库查到的数据不为空,就刷到redis中 4.返回查 ...
- Regression trees树回归 以及其他
https://www.cnblogs.com/wuliytTaotao/p/10724118.html 选 weighted variance 最小的 但是weighted variance是怎么计 ...
- Python练习题 031:Project Euler 003:最大质因数
本题来自 Project Euler 第3题:https://projecteuler.net/problem=3 # Project Euler: Problem 3: Largest prime ...
- sipp3.6对freeswitch进行压力测试
一.安装sipp 1.下载地址: https://github-production-release-asset-2e65be.s3.amazonaws.com/13161657/99df6100-9 ...
- 043 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 05 do-while循环介绍及应用
043 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 05 do-while循环介绍及应用 本文知识点:do-while循环介绍及应用 do-while循 ...
- python排序算法总结和实现
------------------希尔排序------------- 一直没搞懂希尔排序怎么搞得 def Shell_sort(L): step = len(L)/2 while step > ...
- python中def用法
转载:https://blog.csdn.net/qq_21466543/article/details/81604826 一.函数调用的含义 函数是类似于可封装的程序片段.允许你给一块语句一个名字, ...