问题
我正在使用 Gambit 的 Python API 创建游戏树。我有策略游戏树,我想通过消除所有严格支配的策略来减少我的树。我不在 Gambit UI 中执行此操作的 2 个原因是:有时我的树对它来说太大了,它不会让我保存一棵已经修剪掉主导策略的树,这让我很恼火。
无论如何,我称之为让我不受支配的策略:
undominated = g.support_profile().undominated()
失败的尝试#1:
我想从我的游戏中删除所有不在此列表中的策略(即删除游戏中的所有主导策略)。(这就是我想要的吗?我是否也在移除弱支配策略?)所以我打电话:
for strategy in g.support_profile():
if strategy not in undominated:
g.support_profile().remove(strategy)
但是,我认为这使我的列表保持不变......(我希望删除 ~200 并保留 3 个策略,但我仍然有 ~200 个策略)。
我可能做错了什么?
失败的尝试#2:
我想用我所有不受控制的策略创建一个新游戏。但是,如果我和我的玩家一起创建一个名为“h”的新游戏,我想尝试将这些策略添加到我的新游戏中(非正统,但我想试一试)。
for strategy in undominated:
h.strategies.add(strategy)
AttributeError: 'gambit.lib.libgambit.GameStrategies'
object has no attribute 'add'
这让我感到困惑,因为我认为这是这里提到的 Strategies 对象:http ://www.gambit-project.org/gambit15/pyapi.html#gambit.Strategies
问题
有人可以帮我弄清楚我应该在这里做什么吗?
编辑:
正如@Gabriel 所说我应该做的,我将在此处发布简要总结的答案。解决方案涉及调用:
undominated = g.support_profile().undominated().restrict()
restrict() 方法基于给定的 StrategySupportProfile 创建并返回一个新的矩阵游戏。当树变大时它有点慢,但它完成了工作。