为了复查同一段游戏过程,可以让一串选择由固定初始状态和明确递推规则产生。记录状态如何变化,比只保存最后选出的动作更容易查出从哪一步开始不一致。
本篇用一组独立输入把规则展开为可重复核对的记录。先确认单位、编号及边界,再自行尝试推演,然后寻找与下面过程第一次不同的位置。所有结果只在这里写明的规则下成立,不能当作所有游戏的统一实现。
规则与输入
状态是整数,每步先乘固定系数、加固定增量,再对模数取余;更新后的状态对四取余得到动作编号。本例只是演示可重现计算,不宣称动作均匀分布、周期很长或适合任何实际随机需求。
模数47,系数7,增量9,种子3
逐步推演
第1步旧状态3,先算7×3+9=30,除47取余得30,动作编号2。
第2步旧状态30,先算7×30+9=219,除47取余得31,动作编号3。
第3步旧状态31,先算7×31+9=226,除47取余得38,动作编号2。
第4步旧状态38,先算7×38+9=275,除47取余得40,动作编号0。
第5步旧状态40,先算7×40+9=289,除47取余得7,动作编号3。
第6步旧状态7,先算7×7+9=58,除47取余得11,动作编号3。
第7步旧状态11,先算7×11+9=86,除47取余得39,动作编号3。
第8步旧状态39,先算7×39+9=282,除47取余得0,动作编号0。
第9步旧状态0,先算7×0+9=9,除47取余得9,动作编号1。
第10步旧状态9,先算7×9+9=72,除47取余得25,动作编号1。
第11步旧状态25,先算7×25+9=184,除47取余得43,动作编号3。
第12步旧状态43,先算7×43+9=310,除47取余得28,动作编号0。
第13步旧状态28,先算7×28+9=205,除47取余得17,动作编号1。
第14步旧状态17,先算7×17+9=128,除47取余得34,动作编号2。
第15步旧状态34,先算7×34+9=247,除47取余得12,动作编号0。
第16步旧状态12,先算7×12+9=93,除47取余得46,动作编号2。
十六步状态与动作已完整记录;最后状态46,重新使用相同初态与规则可得到相同序列。
怎样独立检查
不用逐步递推,也能把第若干步状态写成初态乘系数的相应次方,再加各次增量贡献之和,最后统一取余。两种方法逐步核对状态和动作编号。
同一初态只有在规则、更新次数和调用顺序也相同时才会重放一致。如果额外调用一次,后面的选择就会移动一位。本例的状态应与其他回放信息一起理解,不能仅凭某一个动作相同判断两次运行完全相同。
练习时先保存原始输入及中间结果,再只改变一个条件观察差异。重点检查空状态、相同数值、恰好到达边界和最后一步。不要为了凑出相同的最终结果而忽略较早出现的偏差,过程和结论都应能由同一套规则解释。
