首页 > 其他分享 >博弈论基础

博弈论基础

时间:2024-11-09 21:34:02浏览次数:1  
标签:return 游戏 SG 博弈论 基础 先手 sg mex

算法竞赛中的博弈论问题:
ICG(Impartial Combinatorial Games 公平组合游戏) 特征如下:
1.两名选手
2.轮流操作,每次一步,每步在有限合法集合中选取一种进行
3.任何情况,合法操作只取决于情况本身,与选手无关
4.游戏败北条件:当某位选手需要进行操作时,当前没有任何可以执行的合法操作,则该选手败北

经典问题:
1.巴什博弈:n个物品,两人轮流取1~m个,最后取光的人获胜。
同余定理:a-b能被m整除,则整数a,b对模m同余( 记作a≡b(mod m) )
n=k(m+1)+r。先手取r个,后手不论取多少,先手只要取的数和后手和为m+1,先手必胜。
n=k
(m+1)。先手必输。
if (n % (m + 1)) return 1;//先手胜
else return 0;

2.威佐夫博弈:两堆各若干个,两人轮流取,一堆取至少一个/两堆取相同个数(至多),最后取光者获胜。
差值黄金分割比=最小值 的话,后手胜,否则先手胜。
abs(a-b)
r=min(a,b) 2分之(根号5-1)注意精度问题
//注意精度
double r = (sqrt(5.0) - 1) / 2;
int d = abs(a - b) * r;
if (d != min(a, b)) return 1;//先手胜
else return false;

3.尼姆博弈:n堆物品(每堆任意值),两人轮流取,每次取某堆中不少于1个,最后取完获胜。
(证明较为繁琐)结论:n堆数量全部异或后结果为0则必败,否则必胜
int res = 0;
for (int i = 1; i <= n; i ++)
res = res ^ a[i];
if (res) return 1;//先手胜
else return 0;

对于更加一般的博弈论问题,通过SG函数转化为尼姆博弈
SG函数:首先给出一种ICG博弈游戏模型:给定一个有向无环图和一个起始顶点上的一枚棋子,两人交替移动,无法移动者判负。任何一个ICG都可以把每个局面看成一个顶点,对每个局面和他的子局面连一条有向边来抽象成这个“有向图游戏”。

首先定义mex运算,表示最小的不属于这个集合的非负整数。如mex{0,1,2,4}=3, mex{2,3,5}=0, mex{}=0。
对于一个给定的有向无环图,定于关于图的每个顶点的SG函数如下:sg(x)=mex{sg(y)}(y是x的后继)

1.找出必败态(sg的值为0)
2.找出当前所有状态的前驱节点
3.根据定义计算节点sg值
重复上述步骤直到整棵树建立完成

每个节点拥有一个sg值(设为x),一个操作(移动到该节点的后继)实际上就是把棋子移到0~x-1的某个节点上,等价于从x个物品中取走至少1个,至多x个。(不存在走到超过x的情况,博弈条件每个人选择自己的最优方案)

SG定理:G1,G2,...Gn是n个有向图游戏,G是n个游戏的和,游戏G的移动规则:任选一个子游戏Gi并移动上面的棋子。SG定理就是sg(G)=sg(G1)...sg(Gn) (即看成nim的n个堆)

标签:return,游戏,SG,博弈论,基础,先手,sg,mex
From: https://www.cnblogs.com/love-lzt/p/18537305

相关文章

  • 2024-2025-1 20241403 《计算机基础与程序设计》第七周学习总结
    学期(如2024-2025-1)学号(如:20241403)《计算机基础与程序设计》第7周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个作业的目标数组与......
  • 博弈论模板问题
    1.HDU1848任何一个大学生对菲波那契数列(Fibonaccinumbers)应该都不会陌生,它是这样定义的:F(1)=1;F(2)=2;F(n)=F(n-1)+F(n-2)(n>=3);所以,1,2,3,5,8,13……就是菲波那契数列。在HDOJ上有不少相关的题目,比如1005Fibonacciagain就是曾经的浙江省赛题。今天,又一个关于Fibona......
  • C++基础学习2-数据类型
    ////数据类型:////计算机语言-写程序-解决生活中的问题////必须有能力来描述生活中的问题////购物商城-上架商品,价格-15.6元-小数////年龄50岁-整数////C语言-浮点数(小数点)////-整型//////a////'a'-字符a////intmain()//{// //char=字符类型// charch='a';......
  • 2024-2025-1 20241319 《计算机基础与程序设计》第七周学习总结
    作业信息这个作业属于哪个课程2024-2025-1-计算机基础与程序设计这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK07这个作业的目标数组与链表基于数组和基于链表实现数据结构无序表与有序表树图子程序与参数作业正文https://www.c......
  • 2024-2025-1 20241307《计算机基础与程序设计》第七周学习总结
    作业信息这个作业属于哪个课程(2024-2025-1-计算机基础与程序设计)这个作业要求在哪里(2024-2025-1计算机基础与程序设计第七周作业)这个作业的目标作业正文(2024-2025-1学号20241307《计算机基础与程序设计》第七周学习总结)教材学习内容总结《计算机科学概......
  • 实验3 类和对象——基础编程2
    一、实验目的 加深对类的组合机制的理解,会正确使用C++正确定义,使用组合类理解深复制,浅复制练习标准库string,vector的用法,能基于问题场景灵活使用针对具体问题场景,练习运用面向对象思维进行设计,合理设计,组合类(自定义/标准库),编程解决实际问题。二、实验准备 系统复习浏览......
  • 博弈论
    定义必胜或必胜状态:仅仅考虑当前的状态,不考虑的操作人时,一定必胜或必输\(a\oplusb\):\(a,b\)在二进制下,对位取反。Nim游戏考虑有\(n\)堆石子,两个人轮流来拿走棋子(至少拿一个),拿到最后剩下的一颗棋子的人获胜。结论:定义Nim和\(=a_1\oplusa_2\oplusa_3\oplus\dots......
  • C++基础学习1
    //写代码//1.写出主函数(main函数)//可能写出1-500行代码//如何执行呢?-C语言的代码是从主函数的第一行开始执行的!//主函数=main函数//所以C语言代码中需要有main函数,main函数属于是入口,没有入口就无法执行。//int=函数的返回类型,int是整型的意思(是整数的意思)//main=函数名......
  • 黑客技术自学网站(非常详细)零基础入门到精通,收藏这篇就够了
    七个合法学习黑客技术的网站,让你从萌新成为大佬_黑客网合法的学习网站,以下这些网站,虽说不上全方位的满足你的需求,但是大部分也都能。能带你了解到黑客有关的技术,视频,电子书,实践,工具,数据库等等相关学习内容。以下是七个合法学习黑客技术的网站:1.HackThisSite(https://www......
  • 2024-2025-1-《计算机基础与程序设计》20241313刘鸣宇
    作业信息这个作业属于哪个课程 <班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个作业的目标 <写上具体方面>作业正文 ...本博客链接教材学习内容总结《计算机基础与科学概论》第八章......