sg函数

博弈论学习笔记

限于喜欢 提交于 2020-03-10 18:59:27
博弈论学习笔记 一些概念 组合博弈(combinatorial games) 两个玩家,均可获得完全信息,每一操作均不受随机性影响(例如poker就不是组合博弈) 有偏博弈 两个玩家可以进行的操作有区别,例如象棋和跳棋 无偏博弈 两名选手交替对游戏进行移动,每次一步,选手可以在有限的合法移动集合中任选一种进行移动,双方均知道游戏的完整信息。 对于游戏的任何一种可能的局面,合法的移动集合只取决于这个局面本身,不取决于轮到哪名选手操作、以前的任何操作、骰子的点数或者其他因素。 如果轮到某名选手移动,且这个局面的合法的移动集合为空(也就是说此时无法进行移动),则这名选手负。 游戏中的同一个状态不可能多次抵达,游戏以玩家无法行动结束,且游戏一定会在有限步后以非平局结束,即状态图无环。 大部分的棋类游戏都不是公平组合游戏。 NIM游戏 有N堆石子,每堆石子的数量是 \(a_1,a_2,a_3,...,a_n\) ,合法的移动是”选择一堆石子并拿走若干颗(不能不拿)”,如果轮到某个人时所有的石子堆都已经被 拿空了 ,则 判负 (因为他此刻没有任何合法的移动)。 我们将图上的每一个局面看成图上的一个节点,所有的合法节点形成一个DAG。 P-position:先手必败 N-position:先手必胜 例如3堆石子的NIM游戏 (0,0,0)是必败局面。 (0,0,n)是必胜局面 (0,1,1

【博弈论】

一曲冷凌霜 提交于 2020-02-05 22:48:58
巴什博奕 只有一堆n个物品,两个人轮流从这堆物品中取物, 规定每次至少取一个,最多取m个。最后取光者得胜。 分析 (1)当n≤m时,由于一次最少拿1个、最多拿m个,甲可以一次拿完,先手赢。 (2)当n=m+1时,无论甲拿走多少个(1~m个),剩下的都多于1个、少于等于m 个,乙都能一次拿走剩余的石子,后手取胜。 上面两种情况可以扩展为以下两种情况: A.如果n%(m+1)=0,即n是m+1的整数倍,那么不管甲拿多少,例如k个,乙都 拿m+1-k个,使得剩下的永远是m+1的整数倍,直到最后的m+1个,所以后拿 的乙一定赢。 B.如果n%(m+1)!=0,即n不是m+1的整数倍,还有余数r,那么甲拿走r个,剩下的是 m+1的倍数,这样就转移到了情况(A),相当于甲、乙互换,结果是甲赢。 例题: hdu 2147 题意: 在一个m*n的棋盘内,从(1,m)点出发,每次可以进行的移动是:左移一,下移一,左下移一。然后kiki每次先走,判断kiki时候会赢(对方无路可走的时候)。 分析: 我们可以把PN状态的点描绘出来: 可以发现 n,m 中有一个是2 的倍数,则 为先手获胜,反之,后手必胜。 code: 1 #include<bits/stdc++.h> 2 using namespace std; 3 int main( ) 4 { 5 int n,m; 6 while(scanf("

博弈论初识

喜欢而已 提交于 2019-12-25 09:37:42
概念: P 点 —— 即必败点,某玩家位于此点,只要对方无失误,则必败; N 点 —— 即必胜点,某玩家位于此点,只要自己无失误,则必胜。 定理: 一、 所有终结点都是必败点 P (上游戏中,轮到谁拿牌,还剩 0 张牌的时候,此人就输了,因为无牌可取); 二、所有一步能走到必败点 P 的就是 N 点;   三、通过一步操作只能到 N 点的就是 P 点; 又即:只要当前状态可以转移到的状态中有一个是败态,那么当前状态就是胜态。 如果当前状态可以转移到的所有状态都是胜态,那么当前状态就是败态。 Bash Game : 只有一堆 n 个物品,两个人轮流从中取物,规定每次最少取一个,最多取 m 个,最后取光者为胜。 1 ,如果 n=m+1 ,那么由于一次最多只能取 m 个,所以,无论先取者拿走多少个, 后取者都能够一次拿走剩余的物品,后者取胜。必败 2 ,法则:如果 n= ( m+1)*r+s ,( r 为任意自然数, s ≤ m), 那么先取者要拿走 s 个物品,如果后取者拿走 k (≤ m) 个, 那么先取者再拿走m+1-k 个,结果剩下( m+1 )( r-1 )个,以后保持这样的取法,那么先取者肯定获胜。 总之,要保持给对手留下(m+1 )的倍数,就能最后获胜。必胜局 Wythoff Game: 有两堆各若干个物品,每个人每次可以从一堆里取任意多的物品,或同时从两堆中取同样多的物品

acm博弈论基础总结

空扰寡人 提交于 2019-12-05 19:53:57
acm博弈论基础总结 常见博弈结论 Nim 问题 : 共有 N 堆石子,编号 1..n ,第 i 堆中有个 a[i] 个石子。 每一次操作 Alice 和 Bob 可以从任意一堆石子中取出任意数量的石子,至少取一颗,至多取出这一堆剩下的所有石子。 结论 :对于一个局面,当且仅当 a[1] xor a[2] xor ...xor a[n]=0 时,该局面为 P 局面,即必败局面。 证明 :二进制位证明即可。 Moore’s Nim 问题 :n 堆石子,每次从不超过 k 堆中取任意多个石子,最后不能取的人失败。 结论 : 这是一个 nim 游戏的变形:把 n 堆石子的石子数用二进制表示,统计每个二进制位上 1 的个数,若每一位上 1 的个数 mod(k+1) 全部为 0 ,则必败,否则必胜。 ( 先手 ) 证明 :分类讨论 N/P 状态。 Staircase N im 问题 : 在阶梯上进行,每层有若干个石子,每次可以选择任意层的任意个石子将其移动到该层的下一层。最后不能操作的人输。 结论 :在 奇数堆的石子做 Nim 。 证明 : 阶梯博弈经过转换可以变为 Nim. 把所有奇数阶梯看成 N 堆石子做 nim 。把石子从奇数堆移动到偶数堆可以理解为拿走石子,就相当于几个奇数堆的石子在做 Nim 。 New Nim 问题 : 在第一个回合中,第一个游戏者可以直接拿走若干个整堆的火柴

SG函数学习笔记

吃可爱长大的小学妹 提交于 2019-12-03 14:11:21
概念 一.必胜态与必败态 必胜态(N),最优策略下谁面临此状态谁必赢。 必败态(P),最优策略下谁面临此状态谁必输。 二.SG函数 mex运算:定义为求最小的不属于此集合的非负整数。 SG(x)中x表示状态。x是必败态当且仅当SG(x) = 0; 令 S 为所有x走一步可以到达的状态(必须合法)。那么有$SG(x) = mex(SG(y))(y ∈ S) $ 可以暴力求骗分,主要是打表找规律 三.SG定理 游戏和的 SG 函数就是所有子游戏的 SG 函数的异或和,其中所有子游戏互相独立。 所以先手必胜当且仅当每堆石子的 SG 函数的异或和不为 0。 例题 取火柴游戏 分析 由SG定理判断初始状态,设SG = a1^a2^a3^...^an.如果SG == 0就lose 如果必胜,假设是a1中某些被取走,就令a1变成a'。有a'^a2^a3^...^an = 0 = SG ^ SG = SG^a1^a2^a3^...^an; 所以SG^a1 = a'.且必有a1 > a'; 所以一旦有SG^ai < ai,就是在第i堆取走ai - SG^ai个。 #include<iostream> #include<cstdio> #include<cmath> #include<queue> #include<cstring> #include<algorithm> #define lson x

博弈论学习笔记(不完全版)

被刻印的时光 ゝ 提交于 2019-12-03 04:08:35
# 博弈论 好久以前不记得在那本初赛资料上看到第一章就是博弈论,看了一页纸,~~(那时候还不知道有多难,就只是感性地用数学去理解)~~,感觉不难,就没搞了。 考了好几次博弈论的题,发现毛都不会,又老听旁边 $Mital$ 和 $Skounputer$ 讲什么 $SG$ 函数,心态爆炸,于是还是决定自己学一下。 蒟蒻决定先把几个经典的例子学会了,再去考虑有没有什么可以合并总结的吧。 **** **** **参考:** **https://www.cnblogs.com/zwfymqz/p/8460196.html** **https://www.cnblogs.com/Mathics/p/3948482.html** **https://www.luogu.org/blog/skounputer/bo-yi-lun-xiao-jie** **https://www.luogu.org/blog/155767/shuo-lun-xiao-jie** **** **** ## 一、巴什博弈 ~~(当年我看的就是这个,贼简单,所以就没往后学了QAQ)~~ > 模型:给定一堆 $n$ 个石头,两个人博弈,依次取 $[~1,m~]$ 个石头,若不能取了,则当前操作者输。问是否必胜? ### 模拟讨论: $\quad(1)$如果当前有 $1$ ~ $m$ 个石子,那么显然先手一定能一次性全部取完

关于sg函数的一些证明

强颜欢笑 提交于 2019-12-02 23:59:39
复习csp2019的时候稍微看了看博弈论,发现自己对于sg函数的理解完全不到位 有些定义甚至想都没想过 于是就口胡了一篇blog来安慰虚弱的自己 Question 1 对于一个满足拓扑性质的公平组合游戏 若定义一个函数 \(f\) , \(状态f(P状态)=0\) 假设当前状态为 \(a\) ,它对局面的定义合法 那么 \(f=sg\) 可以发现,它就是 \(Muti-sg\) 问题的核心,接下来我们希望证明这个问题的正确性 首先,先弄清几个定义 对于后继** 指的是一步转移到的状态 后继一定不会等于当前状态 对于局面 它满足以下的性质(当然,性质的名字是我自己取的) 状态性 :它本身也可以是一个状态 后继性 :局面本身是状态的后继,或是后继的后继,等等 异或可行性 :即 \(f(a)\) 是 \(a\) 所包含的所有局面 \(f\) 值的异或和 唯一改变性 :后继与状态本身仅改变了一个局面, 当然事实并不是如此,如果你会k异或的话,但我们不做探究 单向变化性 :局面只会改变成为它的后继(如果它是一个状态) 证明 \(f=sg\) 等价于任意 \(a\) 满足, \(f(a)\) 是 \(的后继mex\{f(a的后继)\}\) 因为状态之间的关系本质上是一个 \(DAG\) (即满足拓扑性),所以可以通过归纳法来证明 假设一个状态 \(a\) ,它的所有后继(包括后继的后继)的 \

【博弈论】信竞博弈论入门笔记_SG函数_纳什均衡

回眸只為那壹抹淺笑 提交于 2019-12-01 07:28:22
背景 本人长期徘徊于弥补多项式短板/写字符串爽题/码毒瘤数据结构/看数学书这四件奇怪的事情上,因此水平很菜。 以前接触过一点简单的博弈论,但那实在是太简单了,就是对抗搜索(Min-Max)。 近期训练,做到了一道SAMParent-Tree上倍增之后博弈的题目,SAM都码完了,一看那个博弈,越看越慌,发现自己根本不会:何止不会,一分都拿不到。 于是开始恶补博弈论,发现很妙,但是挺好理解的。 本文因为作者被作业抓走了,暂时没有完成纳什均衡的内容。 update:发现那道促使我学习博弈论的题目是道假题,具体可以看我在anti-NIM里的内容 一些资料 oi-wiki 基本可以博弈论入门了 SG函数入门及例题 这篇文章良心 anti-NIM问题入门 很短,anti-NIM建议把SG搞懂之后作为一个应用加深了解 纳什均衡的一个例子 初步演示纳什均衡在OI中的用法 纳什均衡/划线法 这篇文章我弄出来,只是为了说明划线法(哔——)得不得了 纳什均衡/靠谱计算方法 个人认为是比较靠谱的纳什均衡计算方法(疯狂diss划线法) 纳什均衡/混合策略 (FBI Warning)这玩意儿太神仙了,个人计划如果有时间找一本博弈论的书来学习这一块内容,但讲道理OI里面大概是不会出现这种东西的(搞个纳什均衡出来就不错了)。 纳什均衡/生动例子(雾 这可是我太爷爷的太爷爷关注的up主[doge]手动滑稽

SG函数总结

こ雲淡風輕ζ 提交于 2019-11-28 07:53:53
首先定义 \(mex\) (minimal excludant)运算,这是施加于一个集合的运算,表示最小的不属于这个集合的非负整数。例如 \(mex\{0,1,2,4\}=3\) 、 \(mex\{2,3,5\}=0\) 、 \(mex\{\}=0\) 。 对于任意状态 \(x\) ,定义 \(SG(x) = mex(F)\) ,其中 \(F\) 是 \(x\) 后继状态的 \(SG\) 函数值的集合(就是上述 \(mex\) 中的数值)。例如 \(x\) 有三个后继状态分别为 \(SG(a)\) 、 \(SG(b)\) 、 \(SG(c)\) ,那么 \(SG(x) = mex\{SG(a),SG(b),SG(c)\}\) 。当且仅当 \(x\) 为必败点时, \(SG(x)=0\) 。 游戏和的 \(SG\) 函数等于各个游戏 \(SG\) 函数的 \(Nim\) 和。 来源: https://www.cnblogs.com/solvit/p/11400417.html

sg函数理解

落爺英雄遲暮 提交于 2019-11-26 12:40:06
首先理解sg函数必须先理解mex函数 mex是求除它集合内的最小大于等于0的整数,例:mex{1,2}=0;mex{2}=0;mex{0,1,2}=3;mex{0,5}=1。 而sg函数是啥呢? 对于任意状态 x , 定义 sg(x) = mex(f),其中f 是 x 后继状态的sg函数值的集合(就是上述mex中的数值)。最后返回值(也就是sg(x))为0为必败点,不为零必胜点。 看不懂,咱直接来个例子: 例如:取石子问题,有1堆n个的石子,每次只能取{1,3,4}个石子,先取完石子者胜利,那么各个数的SG值为多少? sg[0]=0,f[]={1,3,4}, x=1时,可以取走1-f{1}个石子,剩余{0}个,mex{sg[0]}={0},故sg[1]=1; x=2时,可以取走2-f{1}个石子,剩余{1}个,mex{sg[1]}={1},故sg[2]=0; x=3时,可以取走3-f{1,3}个石子,剩余{2,0}个,mex{sg[2],sg[0]}={0,0},故sg[3]=1; x=4时,可以取走4-f{1,3,4}个石子,剩余{3,1,0}个,mex{sg[3],sg[1],sg[0]}={1,1,0},故sg[4]=2; x=5时,可以取走5-f{1,3,4}个石子,剩余{4,2,1}个,mex{sg[4],sg[2],sg[1]}={2,0,1},故sg[5]=3;