Project1

标题: P1 石头剪刀布友谊循环赛 [打印本页]

作者: LBQ    时间: 2018-3-20 12:55
标题: P1 石头剪刀布友谊循环赛
本帖最后由 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 函数,我们假设我们提前定义了:
OCAML 代码复制
  1. type rs = R | P | S
  2. (* R 石头,P 布,S 剪刀)
  3.  


请提交类型如下的函数:

OCAML 代码复制
  1. type strategy = (rs list) -> (rs list) -> rs
  2. (* 第一个参数是自己之前所有决策,第二个是对方所有决策,list 的序号 0 代表第一回合做出的决策,也就说 list 的最后一个元素是上回合做出的决策 *)

(然后可以假设 OCaml batteries 库有安装)

作者: 御曹司    时间: 2018-3-20 13:29
这种东西也太看运气了吧
作者: oott123    时间: 2018-3-21 10:31
我也提交一个好了

  1. function strategy() {
  2.     return P;
  3. }
复制代码

作者: 芯☆淡茹水    时间: 2018-3-21 11:25
types = ["石头","布","剪刀"]
my_type =  types[(types.index(我对手出的类型) + 1) % 3]
作者: 陆言儿    时间: 2018-3-22 00:12
本帖最后由 陆言儿 于 2018-3-22 00:24 编辑

不能随机啊。。。那就不好玩了
策略:
赢了就石头->剪刀->布这样循环
平局就继续上局出的
输了就石头->布->剪刀这样循环
作者: v2sam    时间: 2018-3-22 10:53
好像没看懂………………

if 对手为男性头像
goto  剪刀;

if 对手为女性头像
gaoto  布

if 对手头像性别不明
gaoto  石头

作者: 天才琪露诺    时间: 2018-3-23 20:51
第一回合永远出布。
如果第一回合赢了,接下来的回合按照布→石头→石头循环
如果第一回合输了,接下来的回合按照剪刀→布→石头循环




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1