发表于 2018-3-30 13:43:36 | 2018-3-30 13:50编辑 | 显示全部楼层
未经作者同意,禁止转载本篇谜题
严格来说这不是一道题目,而是一个让大家都参与进来对战的平台,目的是寻找一种“最优解”

还记得当初的第一版游戏——警察与小偷吗?
不记得的戳这里。 这里
我觉得相当有趣,这个游戏可以继续玩下去,于是抽空动手自己写了另一个博弈对战的模型仿真程序。lz有不断测试并调整各种兵种参数,保证了游戏平衡性。
自从写好后,我已经自行对战了多次,发现一成不变的战略往往会输给会自主灵活调整的战略,这也很符合真实情况。
我觉得挺有意思的,想和大家一起分享。
大家可以把这个当成一个在线博弈平台,用自己提出的策略来和其他策略对决。

部分源代码:
闯关游戏结果图:
对战游戏结果图:

下面介绍博弈模型:
你是一个调兵遣将的统帅,如今你选择你的士兵来和敌军对战。
每次对战,你只可以选择10个士兵出征。
一共有三种士兵:长枪兵,弓箭手,骑兵。
你可以任意挑选搭配士兵,比如(3,3,4)代表着你派3个长枪兵,3个弓箭手,4个骑士出征,你也可以派出(10,0,0)阵型,即10个长枪兵。
对于每种兵的数目没有限制,但是所有兵种加起来只能有十个。
战斗开始后,每个活着的士兵将会随机攻击敌方阵营中活着的士兵,直到一方的士兵全部死亡,即判输。这样的对局将会进行500局,在这500局中,双方将会根据对方的策略,不断调整兵种搭配,不断对战。
500局中,胜率过半的统帅获胜。

由于兵种的不同,每种兵具有独特的属性:
兵种基础攻击力 生命值
长枪兵 10 100
弓箭手 8 100
骑士 13 150
表格中是各个兵种的属性

骑士的攻击力和生命值普遍要高,其次是长枪兵,最后是弓箭手。
但是这个博弈模型有趣在克制关系。
铁骑虽然无坚不摧,生命力强,但是长枪兵重心低,立地稳,手持长枪捅杀马上的骑士有着独特的优势。
长枪兵的优势:
长枪兵攻击骑士的时候攻击力提高15,也就是长枪兵攻击骑士将有25点攻击力。

弓箭手的属性比长枪兵还低,但对于行动缓慢的长枪兵而言,弓箭的远程攻击可以先一步打击到敌人,弓箭手对于长枪兵也有独特的攻击优势。
弓箭手的优势:
1.在战斗开始前,弓箭手可以率先发起一次攻击。这次攻击视为提前攻击。如果提前攻击击中了长枪兵,那么弓箭手有继续随机选择目标攻击的机会。如果攻击目标仍是长枪兵,仍有再一次攻击的机会。这样的机会最多三次。(换言之,弓箭手可以在开始前射击,随机选择目标,如果击中长枪兵可以继续随机攻击,最多三次。也就是,运气好的话,每个弓箭手可以在提前攻击中,攻击三次。)
2.弓箭手攻击长枪兵攻击力+4,即弓箭手攻击目标是长枪兵时,伤害为8+4=12

而骑士的运动能力出色,具有强大的武装装甲,攻击力,生命力高,很适合攻击弓箭手。
骑士没有附加优势(那么高的血量和攻击力就是优势了

如果觉得不够形象,附上一张表格
攻击者\目标长枪兵 弓箭手 骑士
长枪兵 10  10 25
弓箭手 12 8 8
骑士 13 13 13
说白了,枪弓马呈现出一种剪刀石头布的关系

博弈模型就讲到这里,如果有不清楚的可以回帖提问。

一下统一说法,(长枪兵数目,弓箭手数目,骑士数目)
关于策略,lz自己有尝试找出一种“无敌”解,奈何lz也没找到。
lz的一些测试结果(可视为已知)
类似于(3,3,4)、(4,3,3)之类的平衡策略,将会被(0,0,10)这一类全马策略击败。
但(0,0,10)将会惨败给(10,0,0)甚至(8,0,2)。
所以就单局对决中,没有所谓的必胜法存在。这就要求,需要根据对手历史策略来调整自己的策略。
提出的策略,可以基于对手上次的策略,也可以基于己方上次的幸存士兵数量和对手幸存士兵数量。

拿我自己编写的1个策略为例子:
//始终与上次敌人所用策略的兵种的克星相同
{
                Unit1_num = Opp3_num;
                Unit2_num = Opp1_num;
                Unit3_num = Opp2_num;
}

//记录上次对手兵种最多的兵,并且派出其克星的10个兵与之对战
{
                if (Opp1_num > Opp2_num)
                {
                        if (Opp1_num > Opp3_num)
                                Unit2_num = 10;
                        else
                                Unit1_num = 10;
                }
                else
                {
                        if (Opp2_num > Opp3_num)
                                Unit3_num = 10;
                        else
                                Unit1_num = 10;
                }

}

大家可以提出策略后,指定和哪个策略进行对战,也可以和学院里的其他人提出的策略进行对战。

我可以用贴内回复等形式告知电脑模拟的对战结果,甚至可以给出每一个回合的情况的txt文件。


如果还是不懂怎么玩,我举个例子:
回帖:
①策略:以4只骑士,和随机长枪兵弓箭手进行对战。与第x楼的策略对战。
回帖:
②策略:始终以上一次敌方策略来出征。与第x楼的策略对战。


我将会用代码把你所想的策略写出来,然后和指定的策略对战,并告知结果。
如果还是不懂怎么玩,就回帖告知,我来解答。


另外,过于复杂的数学表达式,(比如正态分布、sigmoid函数等,最好避免),以及过于复杂的算法比如要我跑一个cnn之类的,也尽量避免。




再另外,本次游戏支持闯关模式。
可以提出一种策略进行闯关游戏,总共有7关,每一关是我写的一种出兵策略(已经写好,不会再修改)。你提出的策略将会和每一关的统帅对战,胜率超过50%则可以挑战下一关。目前我想到的策略还没有能通关的,很期待有人能通关。

希望大家多多支持,一起来寻找一种“最优解”来闯关成功。
等大家提出的策略到一定数目了,大家可以一起讨论看看究竟什么样的策略才是“最好”呢?
如果大家感兴趣,下次我们可以试着玩玩别的博弈模型。(如N个火枪手等等)
本帖子中包含更多图片或附件资源

您需要 登录 才可以下载或查看,没有帐号?加入学院

| 楼主| 发表于 2018-3-30 13:44:43 | 2018-3-30 14:21编辑 | 显示全部楼层
目前已有策略:
//---------from shalamixi-------------//
void xxes(void);
void Horses(void);
void crossbowmans(void);
void balance(void);
void MAX_10_00(void);
void Copy_Bane(void);
void FourGroup_compete(void);
void GA(void);
void Rand3group(void);
//---------from shalamixi-------------//
7
| 发表于 2018-3-30 13:47:59 | 显示全部楼层
妈也,比上次的复杂好多的赶脚
登录帐号可查看完整回帖内容
| 发表于 2018-3-30 14:05:45 | 发自安卓客户端 | 显示全部楼层
随机以 (10, 0, 0) 、 (0, 10, 0)、(0、0、10) 出兵?
补充:这种策略能不能实现:

一开始随机分配兵力,然后参考上一场的战绩,上一场最合适的兵种+1, 最弱的兵种 - 1。

直到一个兵种变成0不可能再减了,再次随机分配兵力。
登录帐号可查看完整回帖内容
| 发表于 2018-3-30 14:54:35 | 显示全部楼层
特别像现在玩的一款游戏,【龙霸三国】
登录帐号可查看完整回帖内容
| 发表于 2018-4-7 20:01:16 | 发自安卓客户端 | 显示全部楼层
挖坑,这个帖子还活着吗
登录帐号可查看完整回帖内容
| 发表于 2018-4-7 20:41:02 | 发自安卓客户端 | 显示全部楼层
太。。太可怕了,我看了半天脑壳疼
登录帐号可查看完整回帖内容
| 发表于 2018-4-7 20:46:11 | 来自小霸王手机 | 显示全部楼层
传说中的撒系米……
登录帐号可查看完整回帖内容
| 发表于 2018-4-7 20:50:57 | 发自安卓客户端 | 显示全部楼层
maye这是个甚
| 发表于 2018-8-18 12:26:08 | 发自安卓客户端 | 显示全部楼层
随机应变一一靠运气
尚未登录
您需要登录后才可以回帖 登录 | 加入学院