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

博弈论(基础)

时间:2024-01-22 20:46:41浏览次数:30  
标签:博弈论 函数 必胜 18 石子 基础 先手 SG

一些用处不多的姿势:

perfect information:双方做决策时知道当前局面处于什么状态以及可能向什么状态转移。(如围棋你知道当前局面以及可以知道对手下一步可以走的位置)

complete information;博弈双方知道各自的目的。(如狼人杀显然不是,你不知道对方的身份以及对方取得成功的条件)

impartial game(平等博弈);在同一状态下,可能的决策集合与决策人无关。(围棋不是平等博弈,黑棋和白棋要做的决策不同)

小练习(均可打表找规律):

练习一

POJ #2505 A multiplication game

如果当前数为(n,n/9]先手必胜,因为先手只要乘9一定大于等于n。

如果当前数为(n/9,n/18]先手必败,因为先手无论乘什么,后手乘9一定大于等于n。

如果当前数为(n/18,n/163]先手必胜,因为先手总能将数控制到(n/9,n/18]先手必败态,所以先手必胜。

观察可知n除到小于18,若a在2到9则先手必胜,否则后手必胜。

口胡证明:2到9时先手只要将数乘到大于等于18,接下来后手无论怎样乘最后一定乘9小于目标乘18大于目标。

#include <bits/stdc++.h>
using namespace std;
double n;
int main()
{
    while(scanf("%llf",&n)!=-1)
    {
        while(n>18)n/=18;
        if(n>9)printf("Ollie wins.\n");
        else printf("Stan wins.\n");
    }    
    return 0;
}

练习二

有两堆石子分别 n, m 个, 双人博弈, 每次操作是清空其中一堆石子并将另一堆石子 分成非空的两堆新的石子. 无法操作者输, 问最后谁会获胜. 例: (1, 1) 是先手必败, (2, 1) 是先手必胜.

只要有一个偶数,先手必胜,否则后手必胜。

考虑有一个偶数,只要去掉另一个数,将偶数分成两个奇数,后手只能去掉一个奇数,将另一个奇数分成一奇一偶。因为偶数最小为2(不可能出现0),所以先手一定可以做操作,后手最后会遇到1,1的情况输掉比赛。

#include <bits/stdc++.h>
using namespace std;
int n,m;
int main()
{
    scanf("%d%d",&n,&m);
    if(n%2!=0&&m%2!=0)printf("后手必胜\n");
    else printf("先手必胜\n");
    return 0;
}

练习三

有一块 n × m 的网格, 双人博弈, 每次操作是选中其中一个未被删除的格子 (x0, y0), 将所有 x ≥ x0 且 y ≥ y0 的格子 (x, y) 删除. 删除 (1, 1) 的人输, 问最后谁会获胜.

打表发现几乎全是先手必胜。

因为对于先手来说有一点可以改变先后手即(n,m),如果先手选(n,m)后,后手有必胜策略选(x,y)则先手可以在第一步选(x,y)而不是(n,m)。

所以只有当只有一个网格时先手必败,否则先手必胜。

练习四

有一堆石子共 n 个, 双人博弈, 每次从石子堆中取出 1 ∼ m 个石子. 无法操作者输, 问最后谁会获胜.

小学数学题,只要看n%(m+1),如果为0则先手必胜,否则后手必胜。

只要先手取走n%(m+1)个,则一定剩m+1的倍数,后手取x个,先手取m+1-x个即可。先手一定取到最后一个数,先手必胜。

SG函数:

任意一个平等博弈可以抽象出一个模型,一张有限无环图,其中一个节点上有一个棋子. 从 Alice 开始游戏, Alice 和 Bob 轮 流将这个棋子沿着一条有向出边移动, 无法移动者判负. 问最后谁会获胜。

定义一个SG函数:其函数值为其指向的节点的函数值的mex(没有出现的最小整数值),同时一个点没有出边定义为0。

显然,如果SG函数的值为0(以下的分析不考虑没有出边的情况),意味着没有办法转移到一个先手必败的情况,同时它出边的SG函数一定不为0,则它的出边一定可以转移到一个先手必败的状态,所以此时先手必败,否则先手必胜。

SG定理:

对一个由多个平行进行的组合游戏构成的博弈, 其整体的 SG 函数值为各个子游戏的函数值的异或和.

证明:不会,先放着。

NIM游戏:

练习四的进阶版,从一堆石子变成n堆石子。

考虑每一堆石子互不影响,满足平行进行的条件,SG函数直接用,对于初始情况算每一堆的SG函数的异或和,若为0,先手必败,反之,先手必胜。

nim的重要性是,SG函数几乎等价于一个NIM游戏,why?SG函数与NIM不同在SG可以向SG函数大的情况转移,但如果先手向大的转移,后手一定可以转回来,又因为,游戏无环一定在有限次数中结束。向SG大的转移绝大时间是无意义的,先手的最优策略一定是向SG小的情况转移。

NIM游戏(SG函数)的变种:

POJ #2425.A Chess Game

有一个 n 个点的有向无环图, 其上有 m 个棋子. Alice 和 Bob 在其上博弈, 每次可以 将其中一枚棋子沿出边移动一次, 允许棋子重叠. Alice 先开始, 不能移动则输掉游 戏, 问最后谁会获胜.

n ≤ 103 , m ≤ 10.

与普通情况完全相同。

 hdu 3032 nim or not nim

现在有 n 堆石子, 第 i 堆有 ai 个. 双人博弈, 每次从一个当前非空的石子堆当中取 至少一个, 或者选取一个石子堆分成两个非空的石子堆. 无法操作者输, 问最后谁会 获胜.

考虑只有一堆,用SG函数解决n堆。

当一堆有x个,可以操作一同最开始的SG,或操作二分成俩堆。sg(x)=mex{sg(i), sg(i) xor sg(x−i)},打表找出规律,SG(4k) = 4k − 1, SG(4k + 1) = 4k + 1, SG(4k + 2) = 4k + 2, SG(4k + 3) = 4k + 4.

#include <bits/stdc++.h>
using namespace std;
inline int SG(int x)
{
    if(!(x%4)) return x-1;
    else if(x%4==3) return x+1;
    return x;
}
int t,n,res; 
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n),res=0;
        while(n--) 
        {
            int x;scanf("%d",&x);
            res^=SG(x);
        }
        puts(res?"Alice":"Bob");
    }
    return 0;
}

 

标签:博弈论,函数,必胜,18,石子,基础,先手,SG
From: https://www.cnblogs.com/storms11/p/17980811

相关文章

  • 算法基础_1
    title:(算法基础课)link:(https://www.acwing.com/)cover:(https://cdn.acwing.com/media/activity/surface/log.png)上课理解思路->下课理解背过代码模板->做3-5遍题目(循环AC)排序快速排序快速排序模板题例题分治:用一个数来分,不需要必须是中心数先分完再递归两边......
  • Julia编程基础
    技术背景Julia目前来说算是一个比较冷门的编程语言,主要是因为它所针对的应用场景实在是比较有限,Julia更注重于科学计算领域的应用。而Julia最大的特点,就是官方所宣传的:拥有C的性能,且可以像Python一样便捷的开发。这对于科学计算领域来说确实是一件好事,目前也有一些科学领域的应用......
  • NumPy数据处理基础
    Panadas数据处理基础一、数据结构NumPy中主要有多维数组和矩阵结构。1.1、利用array()函数创建数组numpy.array(object,dtype=None,*,copy=True,order='K',subok=False,ndmin=0,like=None)----object参数来创建数组类型的对象----dtype参数表示数组元素的类型----copy用......
  • 测试开发技术:Python测试框架Pytest的基础入门
    测试开发技术:Python测试框架Pytest的基础入门  Pytest简介Pytestisamaturefull-featuredPythontestingtoolthathelpsyouwritebetterprograms.Thepytestframeworkmakesiteasytowritesmalltests,yetscalestosupportcomplexfunctionaltesting......
  • 国产的AI基础设施与国外的差距?仅以grpc与prpc做比较
    搞AI,基础设施包括软件、硬件以及相关生态,多方面,这里只片面的取一个例子来说明国内外在AI基础设施上的区别,注意,这里只是片面截取。高性能的rpc框架是搞AI的一个基础依赖软件,当然,国外也有与之可以替代的mpi框架,不过这两个都是老美的。对于mpi,老美一直是开源的,国内也没有任何一家企......
  • Linux基础45 firewalld防火墙, 参数, 区域配置, 放行策略, 端口转发, 富规则, 防火墙
    firewalld防火墙一、防火墙安全概述在Centos7系统中继承了多款防火墙管理工具,默认启动的是firewalld(动态防火墙管理器)防火墙管理工具,Firewalld支持CLI(命令行)以及(图形)的两种管理方式。对于接触Linux较早的人员对Iptables比较熟悉,但由于Iptables的规则比较的麻烦,并且对网络有......
  • 软件测试基础知识 - 集成测试和系统测试的区别,以及它们的应用场景
    区别1、测试计划和测试用例编制的先后顺序:从V模型来讲,在需求阶段就要制定系统测试计划和测试用例,概要设计的时候做集成测试计划和测试用例,有些公司的具体实践不一样,但是顺序肯定是先做系统测试计划和测试用例,再做集成测试计划和测试用例。2、测试用例的粒度:系统测试用例相对很接......
  • 软件测试基础知识 + 面试理论(超详细)
     一、什么是软件?软件是计算机系统中的程序和相关文件或文档的总称。二、什么是软件测试?说法一:使用人工或自动的手段来运行或测量软件系统的过程,以检验软件系统是否满足规定的要求,并找出与预期结果之间的差异。说法二:软件测试就是利用一定的方法对软件的质量或者使用性进行......
  • OI 博弈论若干模型总结(Genshing)
    OI博弈论的若干模型OI不是知识竞赛。平等博弈是完全信息的(知道双方目标及操作收益),交替行动的,知道当前局面和转移的,平等(决策和当前状态操作者无关)的。不平等博弈和上面一致,但是有一方更加平等。所有的平等博弈都可以化为DAG上的移动游戏。公平组合游戏是无法行动者败的游戏......
  • Java基础复习之选择结构使用思路
    Java基础复习之选择结构使用思路目录目录Java基础复习之选择结构使用思路目录一、Java提供的三种选择结构二、三种选择结构的使用结构(一)关于if...else的三种使用结构(二)三元运算符(三)关于switch...case的两种使用结构三、选择结构使用思路一、Java提供的三种选择结构if、......