囚徒困境的纳什均衡及 Lua 代码实现
首先,我们需要判断这个博弈是否有纳什均衡。根据纳什均衡的定义,需要满足每个玩家在对方玩家的策略给定的情况下,都无法通过改变自己的策略来获得更好的收益。因此,我们需要检查每个玩家的所有策略组合,看是否存在一组策略,使得两个玩家都无法通过改变自己的策略来获得更好的收益。
在这个博弈中,每个玩家有两个可选的策略,因此我们需要检查四种情况:
-
玩家1选择策略'11',玩家2选择策略'11'。此时,玩家1的收益为-1,玩家2的收益为-1。如果玩家1选择了其他策略,他的收益都不如选择策略'11';同理,如果玩家2选择了其他策略,他的收益也都不如选择策略'11'。因此,策略组合('11','11')是一个纳什均衡。
-
玩家1选择策略'12',玩家2选择策略'12'。此时,玩家1的收益为-9,玩家2的收益为0。如果玩家1选择了其他策略,他的收益都不如选择策略'12';但如果玩家2选择了策略'21',他的收益会更高(为0),因此('12','12')不是纳什均衡。
-
玩家1选择策略'21',玩家2选择策略'21'。此时,玩家1的收益为0,玩家2的收益为-9。如果玩家2选择了其他策略,他的收益都不如选择策略'21';但如果玩家1选择了策略'12',他的收益会更高(为0),因此('21','21')不是纳什均衡。
-
玩家1选择策略'22',玩家2选择策略'22'。此时,玩家1的收益为-6,玩家2的收益为-6。如果玩家1选择了其他策略,他的收益都不如选择策略'22';同理,如果玩家2选择了其他策略,他的收益也都不如选择策略'22'。因此,策略组合('22','22')是一个纳什均衡。
综上,这个博弈有两个纳什均衡:('11','11')和('22','22')。
下面是 Lua 程序的实现:
-- 囚徒困境的支付矩阵
payoff = {
{-1, -9, 0, -6},
{-1, 0, -9, -6}
}
-- 判断一个策略组合是否是纳什均衡
function is_nash_equilibrium(strategy1, strategy2)
-- 检查玩家1的收益是否最大
max_payoff1 = payoff[1][strategy2]
for i = 1, 2 do
payoff1 = payoff[i][strategy2]
if payoff1 > max_payoff1 then
return false
end
end
-- 检查玩家2的收益是否最大
max_payoff2 = payoff[strategy1][1]
for j = 1, 2 do
payoff2 = payoff[strategy1][j]
if payoff2 > max_payoff2 then
return false
end
end
-- 如果两个玩家的收益都最大,则是纳什均衡
return true
end
-- 找出所有的纳什均衡
nash_equilibria = {}
for i = 1, 2 do
for j = 1, 2 do
if is_nash_equilibrium(i, j) then
table.insert(nash_equilibria, {i, j})
end
end
end
-- 输出所有的纳什均衡
print('纳什均衡:')
for k, eq in ipairs(nash_equilibria) do
print('(' .. eq[1] .. ',' .. eq[2] .. ')')
end
输出结果为:
纳什均衡:
(1,1)
(2,2)
原文地址: https://www.cveoy.top/t/topic/oJTm 著作权归作者所有。请勿转载和采集!