秒懂算法│博弈论

news2024/12/27 9:31:20

图片

         博弈论是二人或多人在平等的对局中各自利用对方的策略变换自己的对抗策略,达到取胜目标的理论。博弈论是研究互动决策的理论。博弈可以分析自己与对手的利弊关系,从而确立自己在博弈中的优势,因此有不少博弈理论,可以帮助对弈者分析局势,从而采取相应策略,最终达到取胜的目的。

 

01、最小最大问题

最小最大问题( minimax ):用于确定计算机玩家在诸如井字游戏、跳棋、奥赛罗和国际象棋中的哪一步。这类游戏被称为完美信息游戏,因为它可以看到所有可能的动作。拼字游戏并不是一个完美信息的游戏,因为你看不到对手的手,所以无法预测对手的动作。

可以把这个算法想象成人类的思维过程:如果我做这个动作,那么我的对手只能做两个动作,每个动作都会让我赢。所以这是正确的选择。

用博弈树数据结构表示井字游戏如图 1 所示。

图片

■ 图1   用博弈树数据结构表示井字游戏

如果你认为所谓最小最大就是穷举过程中找到的最差走法和最佳走法那就错了,既然是对立的概念,当然是两个对象,这里的最小最大是当前轮到 AI 走了, AI 进行穷举并选择一条对于 AI 来说最佳而对于人来说最差的走法,但是再考虑一下,机器也是有限的,对于象棋这样棋盘较大的游戏,穷举完博弈树在当前科技下不可能,因此我们的最小最大算法需要一个深度,即向前走几步,计算机就能在这个指定的比较小的整数下完成对博弈树的穷举。

当遍历若干树枝后不可能就结束了,如果在游戏没有结束的情况下我们还需要一个评价启发函数,这个函数用于判断当前策略的价值,如果使用某走法能赢,就返回一个大的正数;如果这种走法会输,就返回一个大的负值;如果走法会产生和局,就返回一个 0 左右的数;如果由于当前博弈树深度没办法判断局面,那么评价函数就会返回一个启发值。

参考程序:

#include<cstdio>
int MaxMin(int depth,int player mode)
{
int best = INFINITY(player mode);
//player mode 是参照物,如果当前落子是人,则返回一个很小的值,反之返回一个很大的值
if (depth <= 0) //当前以局面为博弈树的根
return Evaluate() ; //估值函数
}    
GenerateLegalMoves () ;//生成当前所有走法
while (MovesLeft () ) //遍历每一个走法
{
MakeNextMove () ;//实施走法
val = -MaxMin(depth - 1);//换位思考
UnmakeMove() ;//撤销走法
if (val > best)
best = val;
return best;
}    

 02、巴什博弈

A和B一块报数,每人每次最少报1个,最多报4个,看谁先报到30。这应该是最古老的关于巴什博弈(Bash game)的游戏了。

其实如果知道原理,这个游戏一点运气成分都没有,只和先手、后手有关,比如第一次报数,A报k个数,那么B报5-k个数,那么B报数之后问题就变为,A和B一起报数,看谁先报到25了,进而变为20,15,10,5,当到5的时候,不管A怎么报数,最后一个数肯定是B报的,可以看出,作为后手的B在个游戏中是不会输的。

那么如果要报n个数,每次最少报1个,最多报m个,我们可以找到这么一个整数k和r,使n=k*(m+1)+r,代入上面的例子可以知道,如果r=0,那么先手必败;否则先手必胜。

巴什博弈: 有n个物品,两个人轮流从中取物,规定每次最少取1个,最多取m个,最后取光者为胜。

参考程序:

#include <iostream>
using namespace std;
int main()
int n,m;
while(cin>>n>>m)
cout<<"后手必胜“< <endl;if(n%(m+1)==0)else cout<<"先手必胜"< <endl;
return 0;

例题如下。

题目大意: 小唐和小红轮流写数字,小唐先写,每次写的数x满足1≤x≤k,小红每次写的数y满足1≤y-x≤k,谁先写到不小于n的数算输。

结论: r=(n-1)%(k+1),r=0时小红胜,否则小唐胜。

详解:

巴什博弈: 同余理论。

从n个物品中两人轮流取,每次取1~m个,最后取完者为胜。

比如10个物品,每次只能取1~5个,则先手方必赢。

(1) 面对[1…m]个局面,必胜。

(2) 面对m+1个局面,必输。

(3) 如果可以使对手面临必输局面,那么是必赢局面。

(4) 如果不能使对手面临必输局面,那么是必输局面。

基础: 1, 2,…, m是必赢局面,m+1是必输局面。

递推: m+2,m+3,…,2m+1是必赢局面,2m+2是必输局面。

k(m+1)是必输局面,应该允许k=0,因为0显然也是必输局面。

在必输局和必赢局中,赢的一方的策略是: 拿掉部分物品,使对方面临k(m+1)的局面。

例如,上例中10个物品,只能拿1~5个,先手方拿4个即可,对手无论拿多少个,你下次总能拿完。

从另一个角度思考这个问题,如果物品数量随机,那么先手方胜利的概率是m/(m+1),后手方胜利的概率是1/(m+1)。

03、斐波那契博弈

两人轮流从一堆物品中取物品,先手最少取一个,至多无上限,但不能把物品取完,之后每次取的物品数不能超过上次取的物品数的二倍且至少为一件,取走最后一件物品的人获胜。

结论:先手胜当且仅当 n 不是斐波那契数(n 为物品总数)。

# include <iostream>
# include <string.h>
# include <stdio.h>
using namespace std;
const int N = 55;
int f[N];
void Init()
{
f[O] = f[1] = 1;
for(int i=2;i<N;i++)
f[i] = f[i-1] + f[i-2];
}
int main()
{
Init();
int n;
while(cin>>n)
if(n == 0) break;
bool flag = 0;
for(int i=0;i<N;i++)
{
if(f[i] == n)
{
flag = 1;
break;
}
if(flag) puts("Second win") ;
else
puts("First win");
R
}
return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/910644.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

StreamingWarehouse的一些思考和未来趋势

300万字&#xff01;全网最全大数据学习面试社区等你来&#xff01; 一篇笔记。 以Hudi、Iceberg、Paimon这几个框架为例&#xff0c;它们支持高效的数据流/批读写、数据回溯以及数据更新。具备一些传统的实时和离线数仓不具备的特性&#xff0c;主要有几个方面&#xff1a; 这…

【30天熟悉Go语言】10 Go异常处理机制

作者&#xff1a;秃秃爱健身&#xff0c;多平台博客专家&#xff0c;某大厂后端开发&#xff0c;个人IP起于源码分析文章 &#x1f60b;。 源码系列专栏&#xff1a;Spring MVC源码系列、Spring Boot源码系列、SpringCloud源码系列&#xff08;含&#xff1a;Ribbon、Feign&…

2023国赛数学建模A题B题C题D题资料思路汇总 高教社杯

本次比赛我们将会全程更新思路模型及代码&#xff0c;大家查看文末名片获取 之前国赛相关的资料和助攻可以查看 2022数学建模国赛C题思路分析_2022年数学建模c题思路_UST数模社_的博客-CSDN博客 2022国赛数学建模A题B题C题D题资料思路汇总 高教社杯_2022国赛a题题目_UST数模…

三维模型OSGB格式轻量化的数据压缩与性能平衡分析

三维模型OSGB格式轻量化的数据压缩与性能平衡分析 在三维模型应用中&#xff0c;OSGB格式轻量化处理是一种常见的技术手段&#xff0c;它可以通过数据压缩、简化、滤波等操作&#xff0c;降低三维模型数据的存储空间和传输带宽需求&#xff0c;提高应用程序的性能和用户体验。但…

python35种绘图函数总结,3D、统计、流场,实用性拉满

文章目录 基础图误差线三维图等高线图场图统计图非结构坐标图 基础图 下面这8种图像一般只有两组坐标&#xff0c;直观容易理解。 函数坐标参数图形类别plotx,y曲线图stackplotx,y散点图stemx,y茎叶图scatterx,y散点图polarx,y极坐标图stepx,y步阶图barx,y条形图barhx,y横向条…

中国社科院大学-美国杜兰大学能源管理硕士招生信息详情

中国社科院大学-美国杜兰大学能源管理硕士招生信息详情 金融硕士 中国社科院大学-美国杜兰大学能源管理硕士招生信息详情 能源与气候是21世纪人类所面临的最严峻挑战&#xff0c;当今世界能源格局面临深度调整&#xff0c;全球应对气候变化行动加速&#xff0c;国家间科技竞争…

三维模型OSGB格式轻量化的纹理压缩和质量保持分析

三维模型OSGB格式轻量化的纹理压缩和质量保持分析 在三维模型应用中&#xff0c;纹理数据是一个重要的部分&#xff0c;可以为模型增加更多的真实感和细节。但是&#xff0c;由于纹理数据通常会占用大量的存储空间和传输带宽&#xff0c;因此&#xff0c;在OSGB格式轻量化处理中…

LeetCode.141,142——环形链表,环形链表Ⅱ

LeetCode.141——环形链表&#xff1a; 题目如下&#xff1a; 通过题目中对于环形链表的大体描述&#xff0c;可以知道&#xff0c;环形链表最后一个结点保存了一个地址&#xff0c;用于返回链表中某个结点。并且。这个返回的结点并不是返回图中保存数据的结点。而是返回链表…

0603-指针和函数

函数形参改变实参的值 值传递&#xff0c;形参不影响实参的值 地址传递&#xff0c;形参可以改变实参的值 数组名做函数参数 数组名做函数参数&#xff0c;函数的形参会退化为指针。这里的数组名不仅仅指一维数组的数组名&#xff0c;也包括多维数组的数组名&#xff0c;它们…

数据结构算法--4堆排序

堆排序过程: >建立堆(大根堆) >得到堆顶元素&#xff0c;为最大元素 >去掉堆顶&#xff0c;将堆最后一个元素放到堆顶&#xff0c;此时可通过一次调整使堆重新有序 >堆顶元素为第二大元素 >重复步骤3&#xff0c;直到堆变空 此时是建立堆后的大根堆模型 将…

ssl卸载原理

SSL卸载&#xff0c;也称为SSL解密&#xff0c;是一种将SSL加密数据流卸成非加密的明文数据流的过程。SSL卸载通常在负载均衡器、代理服务器、WAF等设备中实现&#xff0c;可以提高传输效率和安全性。 SSL卸载的原理是将SSL数据流拦截下来&#xff0c;通过设备内置的证书进行解…

行为型(二) - 模板模式

一、概念 模板模式&#xff08;Template Pattern&#xff09;&#xff1a;模板方法模式在一个方法中定义一个算法骨架&#xff0c;并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下&#xff0c;重新定义算法中的某些步骤。 二、实现 这里…

Fastadmin框架 聚合数字生活抵扣卡系统v2.8.6

【2.8.6更新公告】 1.【优化】优化已知问题。 2.【新增 】新增区县影院。

Nest(2):Nest 应用目录结构和脚手架命令介绍

Nest 应用目录结构和脚手架命令介绍 在正式使用 NestJS 进行开发之前&#xff0c;先来了解下 Nest 应用的目录结构&#xff0c;和一些常用的脚本命令。 工程目录 下面是使用 nest/cli 创建的 Nest 项目的目录结构。 上篇文章中介绍了 src 目录以及目录下各个文件的作用。下面…

胜者打仗,就像高山上决开积水,势不可挡

胜者打仗&#xff0c;就像高山上决开积水&#xff0c;势不可挡 【安志强趣讲《孙子兵法》16讲】 【原文】 是故胜兵先胜而后求战&#xff0c;败兵先战而后求胜。善用兵者&#xff0c;修道而保法&#xff0c;故能为胜败之政。 【注释】 修道&#xff1a;指从各方面修治“先立于不…

罗勇军 →《算法竞赛·快冲300题》每日一题:“超级骑士” ← DFS

【题目来源】http://oj.ecustacm.cn/problem.php?id1810http://oj.ecustacm.cn/viewnews.php?id1023https://www.acwing.com/problem/content/3887/【题目描述】 现在在一个无限大的平面上&#xff0c;给你一个超级骑士。 超级骑士有N种走法&#xff0c;请问这个超级骑士能否…

「我的编程笔记」——记录学习中的代码、函数、概念等

文章目录 每日一句正能量前言常用的代码登录存储 特定函数MD5加密 复杂概念1. 多线程2. 集合类3. 异常处理4 泛型5 反射 特定功能1. 文件操作2. 网络通信3. 图形绘制4. 数据库操作5. 多媒体处理 后记 每日一句正能量 不管昨天、今天、明天&#xff0c;能豁然开朗就是最美好的一…

Hugging News #0821: 新的里程碑:一百万个代码仓库!

每一周&#xff0c;我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新&#xff0c;包括我们的产品和平台更新、社区活动、学习资源和内容更新、开源库和模型更新等&#xff0c;我们将其称之为「Hugging News」。本期 Hugging News 有哪些有趣的消息&#xff0…

Mysql系列 - 第2天:详解mysql数据类型(重点)

这是mysql系列第2篇文章。 环境&#xff1a;mysql5.7.25&#xff0c;cmd命令中进行演示。 主要内容 介绍mysql中常用的数据类型 mysql类型和java类型对应关系 数据类型选择的一些建议 MySQL的数据类型 主要包括以下五大类 整数类型&#xff1a;bit、bool、tinyint、smal…

「对冲」布局?激光雷达行业大佬「个人投资」4D毫米波雷达

随着高阶智驾从高端车型逐步下沉中低价位市场&#xff0c;核心传感器&#xff0c;尤其是激光雷达和4D成像毫米波雷达的目标市场也在寻求分层和融合。 “激光雷达是在自动驾驶出现后才崭露头角。在这些系统开发的早期阶段&#xff0c;很多公司不惜一切代价使传感器尽可能强大。但…