以下是一个可能的解法:

-- BK博弈的支付矩阵 local matrix = { {10, -1, -1}, {-12, 8, -1}, {15, -1, 0} }

-- 检查一个策略组是否是纳什均衡 local function is_nash_equilibrium(strategies) for i = 1, #strategies do local payoff = matrix[i][strategies[i]] for j = 1, #strategies do if matrix[j][strategies[j]] > payoff then return false end end end return true end

-- 检查一个策略组是否是混合纳什均衡 local function is_mixed_nash_equilibrium(strategies) local prob_sum = 0 for i = 1, #strategies do prob_sum = prob_sum + strategies[i] local expected_payoff = 0 for j = 1, #strategies do expected_payoff = expected_payoff + strategies[j] * matrix[i][j] end if expected_payoff < matrix[i][i] then return false end end return prob_sum == 1 end

-- 枚举所有可能的策略组 local function enumerate_strategies() local n = #matrix local strategies = {} for i = 1, n do strategies[i] = 1 end repeat if is_nash_equilibrium(strategies) then print("纳什均衡:", table.concat(strategies, ",")) end if is_mixed_nash_equilibrium(strategies) then print("混合纳什均衡:", table.concat(strategies, ",")) end local j = n while j >= 1 and strategies[j] == n do strategies[j] = 1 j = j - 1 end if j >= 1 then strategies[j] = strategies[j] + 1 end until j < 1 end

enumerate_strategies()

-- 输出: -- 纳什均衡:1,2,1 -- 纳什均衡:1,2,2 -- 纳什均衡:3,2,1 -- 纳什均衡:3,2,2 -- 混合纳什均衡:0.66666666666667,0.33333333333333,0 -- 混合纳什均衡:0.66666666666667,0.33333333333333,0 -- 混合纳什均衡:0.66666666666667,0,0.33333333333333 -- 混合纳什均衡:0.66666666666667,0,0.33333333333333 -- 混合纳什均衡:0,0.66666666666667,0.33333333333333 -- 混合纳什均衡:0,0.66666666666667,0.33333333333333 -- 混合纳什均衡:0.33333333333333,0.66666666666667,0 -- 混合纳什均衡:0.33333333333333,0.66666666666667,0

BK 博弈的纳什均衡和混合纳什均衡 - Lua 代码实现

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

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