我是靠谱客的博主 乐观战斗机,最近开发中收集的这篇文章主要介绍博弈论简单入门 【巴什博奕、威佐夫博弈、尼姆博弈、斐波那契博弈、环形博弈 】模板一、巴什博奕(点击进入例题)二、威佐夫博弈(点击进入例题)三、尼姆博弈(点击进入例题)四、斐波那契博弈(点击进入例题)五、环形博弈,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、巴什博奕(点击进入例题)

1.只有一堆n个物品

2.两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。

3.最后取光者得胜。

分析:

n = m + 1 时,第一个人不可能获胜;

n = k*(m + 1) + r 时,先取者拿走 r 个,那么后者再拿(1~m)个 , 此时 n =(k-1)*(m+1)+s

  先取者再拿走s 个 最后总能造成 剩下n=m+1 的局面

若n=k*(m+1) 那么先取者必输

求解巴什博弈模板:

int Bash_Game(int n,int m)//是否先手有必赢策略
{
    if (n%(m+1)!=0)
	return 1;
    return 0;
}

二、威佐夫博弈(点击进入例题)

1.有两堆各若干个物品

2.两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限

3.最后取光者得胜

分析:

两堆石子的状态为 [ak,bk] (满足ak<=bk)

当 ak=(k*(√5+1)/2), bk=ak+k 时满足奇异局势,那么则先手输,反之则先手赢

求解威佐夫博奕模板: 

int Wythoff_Game(int a,int b)
{
    double x=(1+sqrt(5))/2;
    int n=b-a;
    if(a==(int)(x*n))
        return 1;
    return 0;
}

三、尼姆博弈(点击进入例题)

1.有三堆各若干个物品

2.两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限

3.最后取光者得胜。

分析:

用0与每个数异或,如最后结果为0,则后手胜

设一数组a[m],令sum=0

循环与数组每一个数据异或(sum^=a[i])

sum最后等于0则后手胜

求解尼姆博弈模板:

//a[m]每堆物品的数量  sum=0
int Nimm_Game(int m)
{
	for(int i=0;i<m;i++)
		sum = sum ^ a[i];
	if(sum == 0)
		return 0;
	return 1;
}

四、斐波那契博弈(点击进入例题)

1.有一堆个数为n的石子,游戏双方轮流取石子

2.先手不能在第一次把所有的石子取完;

3.之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍)

求解斐波那契博弈模板:

int Fib_Game(int n)
{
	f[1]=1;f[2]=1;
	for(int i=3;i<=50;i++)
    {
        f[i] = f[i-1] + f[i-2];
        if(f[i]==n)return 1;
        if(f[i]>n)break;
    }
	return 0;
}

 

五、环形博弈

1.n个石子围成一个环

2.每次取一个或者取相邻的2个

求解环形博弈模板:

石子数<=2先手赢,否则后手赢

int fun(int n)
{
    if(n<=2)return 1;
    return 0;
}

 

最后

以上就是乐观战斗机为你收集整理的博弈论简单入门 【巴什博奕、威佐夫博弈、尼姆博弈、斐波那契博弈、环形博弈 】模板一、巴什博奕(点击进入例题)二、威佐夫博弈(点击进入例题)三、尼姆博弈(点击进入例题)四、斐波那契博弈(点击进入例题)五、环形博弈的全部内容,希望文章能够帮你解决博弈论简单入门 【巴什博奕、威佐夫博弈、尼姆博弈、斐波那契博弈、环形博弈 】模板一、巴什博奕(点击进入例题)二、威佐夫博弈(点击进入例题)三、尼姆博弈(点击进入例题)四、斐波那契博弈(点击进入例题)五、环形博弈所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(86)

评论列表共有 0 条评论

立即
投稿
返回
顶部