双人有限博弈可以用收益矩阵输入 Nashpy。这里求石头剪刀布的混合策略,并在求解后单独检查概率、期望收益和单方偏离。演示计算不是多智能体强化学习训练,也没有模拟人的行为。
安装与矩阵约定
在 Python 虚拟环境执行 python -m pip install “nashpy==0.0.43″。本例使用 NumPy 和 Nashpy 的 support_enumeration;安装器会处理所需依赖。收益矩阵 A 的行是玩家 A 动作,列是玩家 B 动作,顺序均为石头、布、剪刀。A 赢为 +1,输为 -1,平为 0;B 收益矩阵为 -A,明确表示零和。

完整计算与断言
保存 equilibrium.py,运行 python equilibrium.py。行玩家策略 x、列玩家策略 y 都是长度 3 的概率向量;x@A@y 是 A 的期望收益,不是某次出拳的分数。
import numpy as np
import nashpy as nash
A = np.array([[0, -1, 1], [1, 0, -1], [-1, 1, 0]], dtype=float)
B = -A
solutions = list(nash.Game(A, B).support_enumeration())
assert solutions
for x, y in solutions:
assert np.all(x >= -1e-9) and np.all(y >= -1e-9)
assert np.isclose(x.sum(), 1) and np.isclose(y.sum(), 1)
value_a = x @ A @ y
value_b = x @ B @ y
pure_a = A @ y
pure_b = x @ B
assert pure_a.max() <= value_a + 1e-8
assert pure_b.max() <= value_b + 1e-8
print("A:", x.round(6), "B:", y.round(6), "payoffs:", round(value_a, 6), round(value_b, 6))
这个矩阵应得到双方各约 1/3 的动作概率,期望收益均约 0。浮点误差可能出现极小非零数,因此用容差比较,不能要求每个浮点数恰好等于 1/3。程序除了核对概率总和,还检查对固定对手策略改成任意纯动作都不会提高收益;任意混合偏离的收益也是这些纯动作收益的凸组合。
发现异常时怎样定位
概率不满足非负或总和为 1,先检查求解器输出是否被错误截断。收益符号颠倒,先核对行列玩家和 B=-A 是否真符合任务,而不是简单给一人矩阵转置。两人不是零和时,应提供各自收益矩阵,不能随手套用 -A。没有纯均衡不是输入出错的充分证据。
真实动作多时,支持枚举的组合数量会增加;退化博弈、数值容差和多个均衡还需按官方方法说明处理。本例只验证一个 3×3 固定矩阵,不保证任意规模计算速度,也不能自动选择多个均衡中哪一个符合业务。
下一步先给你的矩阵列出动作顺序和每个格子的可追溯收益,再运行求解及偏离检查。结果交付应同时带 x、y、期望收益和输入矩阵,单报“找到均衡”无法复核。
资料与核对依据
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/32997.html