使用nashpy计算双人博弈时如何从返回的数组列表中随机选数组
解决方法
你调用support_enumeration()得到的列表a的每一项都是双人博弈的纳什均衡策略对,结构为(玩家1策略数组, 玩家2策略数组),你需要先随机选中一个策略对,再从中提取对应玩家的策略数组即可。
你现有代码的问题在于:random.choices(a)返回的是长度为1的列表,元素是完整的策略对元组,没有进一步提取你需要的单个策略数组。
修改后的完整代码
import numpy as np import nashpy as nash import random A = np.array([[1, 2], [2, 0]]) B = np.array([[0, 1], [0, -1]]) game = nash.Game(A,B) print(game) eqs = game.support_enumeration() a = list(eqs) # 从所有均衡策略对中随机选1个,用random.choice直接返回单个元素,不需要处理列表 selected_eq = random.choice(a) # 固定取玩家2的策略(你示例中期望的[0.66666667, 0.33333333]就属于玩家2的策略) selected_array = selected_eq[1] # 如果你需要随机取玩家1或玩家2的策略,替换为下行代码即可 # selected_array = random.choice(selected_eq) print(selected_array)
补充说明
- 索引
0对应玩家1的策略,索引1对应玩家2的策略,可根据你的需求自行调整 random.choice直接返回序列中的单个随机元素,比返回列表的random.choices更适配当前场景
内容的提问来源于stack exchange,提问作者kill wind
相关产品推荐
相关产品推荐

