我正在使用Gambit的Python API来创建游戏树。我有策略的游戏树,我想通过消除所有严格控制的策略来减少我的树。我在Gambit用户界面中没有这样做的2个理由是:有时我的树太大了,它不会让我拯救一棵已经被主导策略修剪的树,这让我很烦恼。
无论如何,我称这是为了让我得到无条件的策略:
undominated = g.support_profile().undominated()
我想删除游戏中不在此列表中的所有策略(即删除游戏中所有主导的策略)。 (这就是我想要的东西吗?我还要删除那些占据主导地位的战略吗?)所以我打电话给:
for strategy in g.support_profile():
if strategy not in undominated:
g.support_profile().remove(strategy)
但是,我认为这会使我的列表保持不变...(我希望删除~200并保留3种策略,但我仍然有我的~200策略)。
我可能做错了什么?
我想创建一个包含我所有未命名策略的新游戏。但是,如果我和我的玩家一起创建一个名为“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创建并返回一个新的矩阵游戏。当树变大时,它有点慢,但它完成了工作。
答案 0 :(得分:0)
我在这里发布了这个问题,看起来它已经解决了。 https://github.com/gambitproject/gambit/issues/204
正如@Gabriel所说我应该这样做,我会在这里发布简要总结的答案。解决方案包括致电:
group
restrict()方法基于给定的StrategySupportProfile创建并返回一个新的矩阵游戏。当树变大时,它有点慢,但它完成了工作。