石头剪刀布人工智能代码详解

AI百科2个月前更新 快创云
48 0

这里就没什么好说的了,stdlib与time都是随机数需要的库

_mem是记忆数组,剩下四个整形分别是回合,胜场,平场,负场

_mem[i][m]表示对手出i, 我们出j的状态

_mem[i][m]._all表示这个状态一共经历了几次

_mem[i][m]._list[k]表示这个状态下对手出k出了几次

以上是初始化部分,GenRand是随机数撒种,GenMem在上一篇博客也说过

因为模数不能为零,而又要对后面影响不大,所以选择n=3, a1=a2=a3=1

这个没啥用,是我调试的时候用的

这个实际上也没啥用,解释一下玩法

输入对手的决策,因为后续可以改输入,还可以汉化

所以我单拎了一个函数,或者说方法

这里就是重点了,通过(rand mod k) +1来模拟对手的选择

k在1-a1间,我们认为对手会出1,我们就出2

其他类推

因为我们的区间是

1——a1,a1——a1+a2,a1+a2——n

而不是

1——a1,1——a2,1——a3

(这样的话1到底算在哪里?)

所以需要一个add来记录上次排到哪里了

然后因为每个判断后面都有return,所以不用重复判断

即从第一个判断出来后,我们就认为k>a1

同样,从第二个判断出来后,我们就认为k>a1+a2

所以肯定在第三个区间

这就没啥好说的了,输出赢还是输还是平

有了上面的决策函数,这里主要就是纪律上次的决策,从记忆数组里取(Decision)

然后刷新后再放回去

主程序就一个一个调就行了

好了,差不多讲完了

如果有 错误/优化/疑问 欢迎提出

WeChatwxid_ffe28hxx677f32

(其实是我想认识大佬)

——by 于斯为盛

© 版权声明

相关文章