加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 LBQ 于 2018-3-20 13:01 编辑
石头剪刀布(petra, charta, axicia)是著名的博弈论游戏。
与之前我们的简单的囚徒困境不一样,石头剪刀布每一个回合都有三种选择可以做,大大增加的游戏的复杂度。
于是因为游戏实在太复杂了,所以不懂的可以自己去百科或者读相关教科书。下面我们只给出简单的介绍,
总之我们进行循环赛,每场战斗持续 50 回合,每回合每个选手可以做出如下选择:
1. 剪刀
2. 石头
3. 布
现在我们定义一下“克”这个关系,我们定义 剪刀 克 布,布 克 石头,石头 克 剪刀
我们定义“被克”,如果 A 克 B,那么 B 就被 A 克。
那么每回合,每个选手会做出一个决策,那么出现如下情况,选手 X vs 选手 Y 的情况:
1. X 的选择 克 Y 的选择 -> X 得 1 分,Y 得 0 分
2. X 的选择 被 Y 的选择克 -> X 得 0 分,Y 得 1 分
3. 其他情况 -> 双方都得 0 分
最后循环赛打下来,得分高的胜利。
提交的策略
跟上次囚徒困境相似,你知道对方之前和自己之前所做出的所有决策(以及结果)(以及当前回合数),那么你接下来要回答的就是“我现在要做什么?”
不过这次有特殊禁令,禁止随机,任何伪随机数生成,或者可以被怀疑成拿对方决策试图当种子(虽然不知道可行度多少)开随机算法的都不能被提交。
那么比如说上次的复读机策略这次也可以提交:
第一回合永远出石头,
之后回合永远重复对方上回合选择
或者也可以
第一回合永远出石头,
之后永远重复上回合对方决策所克的(上回合对方出剪刀,我这回合出布等等)
当然也许实际胜利复杂会比上面两种策略更加复杂
为了鼓励各位研究人类心理,这次会有 4 位主办方提供的“仿人类策略”,会根据真实人类的决策设计,来鼓励各位的策略来击败人类。
也是底下回帖,QQ,私信之类的都可以提交,下周二之前公布模拟结果。
各位请清晰指明策略,也可以提交伪代码,也可以直接写 OCaml 函数。
如果要提交 OCaml 函数,我们假设我们提前定义了:
type rs = R | P | S (* R 石头,P 布,S 剪刀)
type rs = R | P | S
(* R 石头,P 布,S 剪刀)
请提交类型如下的函数:
type strategy = (rs list) -> (rs list) -> rs (* 第一个参数是自己之前所有决策,第二个是对方所有决策,list 的序号 0 代表第一回合做出的决策,也就说 list 的最后一个元素是上回合做出的决策 *)
type strategy = (rs list) -> (rs list) -> rs
(* 第一个参数是自己之前所有决策,第二个是对方所有决策,list 的序号 0 代表第一回合做出的决策,也就说 list 的最后一个元素是上回合做出的决策 *)
(然后可以假设 OCaml batteries 库有安装)
|