在这里提出一个问题OP有兴趣列出所有独特的2x2游戏.这里的游戏是游戏理论游戏,其中有两个玩家和两个策略.因此,有四种可能的结果(见图).这些结果伴随着每个球员的"回报".支付'对'是来自某些策略组合的每个玩家的两个回报.支付以整数给出,不能超过4.
例如,考虑以下2x2游戏的示例(支付对写在括号中,P1和P2分别表示玩家1和2):
P2
Right Left
Up (2,2) (3,4)
P1
Down (1,1) (4,3)
Run Code Online (Sandbox Code Playgroud)
这里的收益取值[(2,2),(3,4)| (1,1),(4,3)].
现在,显然许多其他游戏(即独特的支付矩阵)是可能的.如果每个玩家的收益是1,2,3,4(我们可以在4种方式中排除!= 24种方式),则可以进行24*24场比赛.OP有兴趣列出所有这些游戏.
这里有一个微妙的部分:两个独特的支付矩阵可能代表游戏,如果一个可以从另一个获得
i)交换列(即重新标记玩家A的策略)
ii)交换行(即重新标记玩家B的策略)
iii)交换玩家(即交换支付对并沿第一对角线镜像矩阵)
OP发布了以下代码,正确列出了所有78种可能的游戏,其中每种游戏的收益可以是(1,2,3,4).
我有兴趣更改代码,以便程序列出所有可能的收益不同的独特游戏:即玩家1的(1,2,3,3)和玩家2的(1,2,3,4). ,会有4!/ 2!置换方式(1,2,3,3),因此更少的游戏.
#!/usr/bin/groovy
// Payoff Tuple (a,b) found in game matrix position.
// The Tuple is immutable, if we need to change it, we create a new one.
// "equals()" checks for equality against another Tuple instance.
// "hashCode()" is needed for insertion/retrievel of a Tuple instance into/from
// a "Map" (in this case, …Run Code Online (Sandbox Code Playgroud)