两人玩石头-剪刀-布策略更新规则是:1这次赢了下次就不动;2这次输了下次就取对方这次的策略;3这次平了下次就取能够胜这次策略的策略。用lua语言编程求出局势演化方程并分析其演化性质。
假设A为玩家1,B为玩家2,它们的策略分别为a和b,a,b∈{1,2,3},分别代表石头、剪刀、布。设局面为(a,b),其中a和b为当前双方的策略。
根据题目描述,我们可以得到以下3条更新规则:
- 如果A赢了,则下次A的策略不变,即a_{t+1} = a_t;
- 如果A输了,则下次A的策略为B上次的策略,即a_{t+1} = b_{t};
- 如果A和B平了,则下次A的策略为能赢B这次策略的策略,即a_{t+1} = win(b_{t}),其中win函数定义为:
function win(b)
if b == 1 then
return 2 -- 剪刀比石头赢
elseif b == 2 then
return 3 -- 布比剪刀赢
else
return 1 -- 石头比布赢
end
end
同理,我们可以得到B的策略更新规则:
- 如果B赢了,则下次B的策略不变,即b_{t+1} = b_t;
- 如果B输了,则下次B的策略为A上次的策略,即b_{t+1} = a_{t};
- 如果A和B平了,则下次B的策略为能赢A这次策略的策略,即b_{t+1} = win(a_{t})。
综上所述,我们可以得到以下局势演化方程:
function play(n)
local a, b = 1, 2 -- 初始策略
for i = 2, n do
if a == b then -- 平局
a = win(b)
b = win(a)
elseif (a - b) % 3 == 1 then -- A赢
b = b
else -- B赢
a = a
end
end
return a, b
end
其中,参数n为游戏进行的次数,返回值为最后两个玩家的策略。
接下来我们分析一下局势的演化性质。首先可以发现,如果一方采用的是随机策略,那么另一方最优的策略就是随机策略。因为采用任何固定的策略都会被另一方找到规律从而被克制,只有采用随机策略才能让对手难以预测。
另外,如果双方都采用了上述的策略更新规则,那么这个游戏就会形成一个周期为3的循环。这是因为,如果双方都采用相同的策略,那么下一轮双方都会改变策略;如果双方采用不同的策略,那么下一轮双方都会保持原来的策略。因此,经过3轮游戏后,双方的策略又会回到原来的状态,从而形成一个周期为3的循环。
最后,我们可以通过程序模拟多次游戏来验证上述结论,并观察双方的策略演化情况
原文地址: https://www.cveoy.top/t/topic/hhLW 著作权归作者所有。请勿转载和采集!