在战略博弈中去除占优策略

Removing Dominated Strategies in Strategic Game

问题

我正在使用 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 所说我应该做的,我将post 简要总结一下这里的答案。解决方案涉及调用:

undominated = g.support_profile().undominated().restrict()

restrict() 方法根据给定的 StrategySupportProfile 创建并 returns 一个新的矩阵游戏。当树变大时它有点慢,但它完成了工作。

我post在这里解决了这个问题,看起来它已经解决了。 https://github.com/gambitproject/gambit/issues/204

编辑:

正如@Gabriel 所说我应该做的那样,我将post 在这里简要总结一下答案。解决方案涉及调用:

undominated = g.support_profile().undominated().restrict()

restrict() 方法根据给定的 StrategySupportProfile 创建并 returns 一个新的矩阵游戏。当树变大时它有点慢,但它完成了工作。