0

问题

我正在使用 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 创建并返回一个新的矩阵游戏。当树变大时它有点慢,但它完成了工作。

4

1 回答 1

0

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

编辑:

正如@Gabriel 所说我应该做的,我将在此处发布简要总结的答案。解决方案涉及调用:

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

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

于 2016-11-24T16:37:04.253 回答