假设A为玩家1,B为玩家2,它们的策略分别为a和b,a,b∈{1,2,3},分别代表石头、剪刀、布。设局面为(a,b),其中a和b为当前双方的策略。

根据题目描述,我们可以得到以下3条更新规则:

  1. 如果A赢了,则下次A的策略不变,即a_{t+1} = a_t;
  2. 如果A输了,则下次A的策略为B上次的策略,即a_{t+1} = b_{t};
  3. 如果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的策略更新规则:

  1. 如果B赢了,则下次B的策略不变,即b_{t+1} = b_t;
  2. 如果B输了,则下次B的策略为A上次的策略,即b_{t+1} = a_{t};
  3. 如果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的循环。

最后,我们可以通过程序模拟多次游戏来验证上述结论,并观察双方的策略演化情况

两人玩石头-剪刀-布策略更新规则是:1这次赢了下次就不动;2这次输了下次就取对方这次的策略;3这次平了下次就取能够胜这次策略的策略。用lua语言编程求出局势演化方程并分析其演化性质。

原文地址: https://www.cveoy.top/t/topic/hhLW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录