首页 > 其他分享 >学习笔记——博弈论

学习笔记——博弈论

时间:2023-08-15 09:37:51浏览次数:34  
标签:状态 石子 必败 博弈论 笔记 玩家 学习 必胜

博弈论中玩家的选择均为对自己最有利の理论最优解.

文中提到的必胜状态和必败状态来自要求的游戏起始状态, 但不由其推得.

这句话可能有些抽象,我也不太会表达(重度社恐),所以举个例子:

\(nim\)游戏,3堆石子,分别为1,2,3.

最暴力的解法,我们枚举所有可能的状态,

然后把他们构成一个有向无环图——这也是博弈论中的一种最简单的思路

.在构图的过程中,针对这个{1,2,3}, 一定会有一种{1,2,2}.

但这个{1,2,2}是必胜还是必败与{1,2,3}无关.相反,{1,2,2}的状态可以决定 {1,2,3}的状态.


\(nim\)游戏

首先,有个很经典的问题——\(nim\)游戏:有\(n\)堆石子,两名玩家轮流选一堆取走若干个(不能不取).拿走最后一枚石子的玩家获胜,没有石子可取的玩家失败.

这个问题的求解方式很抽象:求所有石子的异或和.若为0,先手必败,否则先手必胜.

这是因为, 一个必败状态要么直接寄,要么只能转化成必胜状态.一个必胜状态一定能转化成必败状态.

由此可见,我们可以从状态的角度理解博弈论.我们可以把所有状态构成一个有向无环图.

每个状态要么先手必胜,要么先手必败.

如果一个状态只能转移到必胜,则其为必败;如果它能转移到必败,则其为必胜.


但如果不是有向无环图呢?状态转移中出现环怎么办?

可以利用递推,先推出尽可能多的状态.

如果一个已知的状态为必败,则所有指向它的状态均为必胜;

如果一个状态只指向已知的必胜,则其为必败.

直到不能推出更多状态为止.可以使用拓扑排序.

可以验证未被递推的状态即为平局.

标签:状态,石子,必败,博弈论,笔记,玩家,学习,必胜
From: https://www.cnblogs.com/Cayde-6/p/17630453.html

相关文章

  • 『学习笔记』欧拉函数、莫比乌斯函数、高位前缀和、狄利克雷前后缀和
    欧拉函数定义又叫做\(\varphi\)函数,\(\varphi(x)\)用来描述不大于\(x\)且与\(x\)互素的数的个数。性质满足一切积性函数的性质。若\(a\botb\),则\(f(a\timesb)=f(a)\timesf(b)\).能用线性筛或埃氏筛求出。\(\text{from}\1\\text{to}\n\)中与......
  • Stable Diffusion学习笔记
    一、使用讯飞星火大模型生成StableDiffusionprompt(提示词)#StableDiffusionprompt助理你来充当一位有艺术气息的StableDiffusionprompt助理。##任务我用自然语言告诉你要生成的prompt的主题,你的任务是根据这个主题想象一幅完整的画面,然后转化成一份详细的、高......
  • 【笔者感悟】笔者的学习感悟【八】
    写在前面  今天笔者其实并不是因为某件事情而写这篇博客,今天更多的是对前面一系列经验之谈的总结。在这里也给大家打个预防针,笔者毕竟不是什么大牛,也要和大家一起成长,而且写这个也不是在写书,笔者每一次感悟相当于脑中的一次开会,所以有些问题一直会反复拿出来强调,整体体系上会有......
  • 学习go语言编程之网络编程
    Socket编程Golang语言标准库对Socket编程进行了抽象,无论使用什么协议建立什么形式的连接,都只需要调用net.Dial()即可。Dial()函数Dial()函数的原型如下:funcDial(network,addressstring)(Conn,error)参数含义如下:network:网络协议名字,如:tcp,udp等Dial()函数支持的网络......
  • 学习go语言编程之并发编程
    并发基础并发包含如下几种主流的实现模型:多进程多线程基于回到的非阻塞/异步IO协程协程与传统的系统级线程和进程相比,协程最大的优势在于“轻量级”,可以轻松创建上百万个而不会导致系统资源枯竭,而线程和进程通常最多不超过1万个。Golang在语言级别支持协程,叫goroutine。......
  • 《angular 高级编程》学习集锦
    引用bootstrapnpminstallbootstrap在angular.json配置文件中,把关联的脚本文件添加到"scripts"数组中:最后再运行或重启ngserve,看看你的应用是否正在使用Bootstrap4。参考:https://angular.cn/guide/using-libraries......
  • 20230813 arm64 汇编学习 helloworld.s
    Programming with64-Bit ARMAssembly Language SingleBoardComputerDevelopment forRaspberryPiandMobileDevices —StephenSmith 32bitsARM64指令:////Assemblyprogramtoprint"helloworld"tostdout////x0-x2parameterstolinuxfunct......
  • git 笔记
    1:删除远端分支假设gitbranch-va后显示存在名为test_dev的远端分支,则通过gitpushorigin:test_dev命令即可删除远端的 test_dev分支2:在网页上创建仓库,pull到本地后将变更在本地修改commit后gitpushoriginmaster即可将变更推送到远端的master分支上;......
  • 最短路&差分约束笔记
    最短路径基础算法单源最短路径单元最短路径指的是在一张联通图中,起点\(s\)到其他所有点的最短路径。计算单元最短路的常见算法有:\(spfa\),\(dijkstra\)。若图带负边权(注意,此时只能是有向图,无向图负边权类似负环),则必须使用\(spfa\),时间复杂度\(O(kE)\),\(E\)表示边的数量;最......
  • 博弈论总结
    博弈论题目解题的关键在于找到一个状态a,设它的否定为状态b,状态a满足:不论怎么操作对手的状态a一定会转化为状态b和一定存在一种从状态b转化到状态a的操作。满足这样两条性质的状态a为必败态,b为必胜态。想求SG,需要对后续节点实行mex函数,想求是否为必胜必败态,需要求异或和如果使用SG......