基于任意人数任意策略的防共谋均衡判断算法分析
已知防共谋均衡的定义如下:
如果一个博弈的某个策略组合满足下列要求:(1)没有任何单个博弈方的“串通”会改变博弈的结果,即单独改变策略无利可图;(2)给定选择偏离的博弈方有再次偏离的自由时,没有任何两个博弈方的串通会改变博弈的结果;(3)依此类推,直到所有博弈方都参加的串通也不会改变博弈的结果。满足这些要求时,可称为“防共谋均衡”。
防共谋均衡是多人博弈的重要内容,常被用于分析纳什均衡是否稳健的一个重要标准。当博弈方只有少数几个人时,判断是否存在稳定的纳什均衡、防共谋均衡是否存在可能需要花上一番工夫,但人力范畴之中尚可以完成。但当人数达到100、1000乃至十万几百万后,其分析难度便会呈指数级增长。本文试图在现有博弈论与计算机算法理论的框架之下,构建出n人博弈矩阵中防共谋均衡的算法判断,及其是否属于NP-hard与NPC问题的证明,以及在此基础上对于其问题求解的优化算法实现分析。
一、对于使用遍历算法的复杂度分析
假设给定了有
在不考虑复杂度的情况下,我们不妨采用遍历算法得出该策略空间的纳什均衡,基于划线法的一般原理,即固定第
可利用深度优先搜索或广度优先搜索进行解决,伪代码如下:
1.1
int dfs(int k, int m)
{
if (k == n)
break;
if (k == m)
dfs(k + 1, m);
for (int i = 1; i <= m; ++i)
maxn = max(maxn, s[k][i]);
dfs(k + 1, m);
return maxn;
}
for (int i = 1; i <= n; ++i)
a[k++] = dfs(1, i);
其中
此时我们只是找到了纳什均衡的存在,我们还需要在此基础上判断是否存有共谋的可能性。由防共谋均衡的定义可知,若均衡A为防共谋均衡,当且仅当在该选择的空间之下,任意
此时我们发现,在检查是否存在防共谋均衡的时候,我们需要在得出的纳什均衡相对确定的选择之中再度以未被共谋的人的策略组合之中进行遍历,依次比较有无改良其收益的其他选择存在。在最坏的情况下,便是
最后得出防共谋均衡遍历算法的最坏情况复杂度为
但是仔细思考,我们是否忽略了什么因素?
倘若我们不止得出一个纳什均衡,而是
此时复杂度自然而然的就变为
二、对于NP、NP-hard以及NPC性质的证明
由上文(一)可知,防共谋均衡的求解问题(为了方便讨论,我们不妨设该问题为
首先是否属于NP的问题,由上文论述可知,对于一组给定的数据,纳什均衡是否存在、即使存在有多少,是无法加以确定的,而最坏情况则是
欲判断某问题是否属于NPC问题,我们应当首先判断该问题是否同时满足NP和NP-hard,而欲判断NP-hard,我们需要证明对于所有的NP问题,都可以约化到本问题之上。换句话说,欲证明该问题不是一个NP-hard的问题,只需证明该问题可以继续约化到下一个NP问题之上即可;反之,则需要证明存在一个NPC问题
首先,我们应当考虑Y是否可以化为其他的子问题。由上文的分析易知,在防共谋均衡的计算过程中,我们将算法分为了两个阶段:寻找纳什均衡、在纳什均衡中寻找串通可能。因而,我们剩下的工作,只需证明此二者中有一个是NPC问题,或者都不是NPC问题即可。
纳什均衡的NP问题,Constantinos Daskalakis与 UC伯克利的Christos Papadimitriou、英国利物浦大学的Paul Goldberg早在2008年便证明出纳什均衡属于NP问题的一个子集,而且是属于PPAD-完全问题
综上所述的一切讨论结果,便可得出,防共谋均衡是NPC问题,无法通过穷举以外的手段将其进行计算。
三、对于遍历算法的优化计算
我们不妨在判断纳什均衡的同时,对于某些结果,其大小是小于任何一种其他得益,以至于即使将其考虑,也不会有任何的理性人会选择将其作为一种可能性进行选择。因而,对于有
dfs()
{
...;
for (…)
{
…;
if (max = another value)
check = false;
}
…;
}
for (…)
{
dfs(…);
if (check)
anti_collusion_find();
if (anti - collusion is true)
break;
}
其中,省略号的内容与1.1内容相同,故省略。
如此便可在找到第一个防共谋均衡时及时跳出循环,避免无意义的重复寻找。然而此种方法不仅亦存在剪枝共有的弊病,适用范围也十分局限——若问题从判断有无变为计算防共谋均衡的数量,则该方法失效,需要考虑其他的剪枝方法。
最后一种剪枝方法,是对于几乎所有防共谋均衡类问题都适用的方法:额外定义一个数组
1)参与者的编号i;
2)参与者的策略空间数组
3)参与者的决策对应编号
4)跳出循环判断用bool变量
此时,在录入数据结束后,在寻找纳什均衡之前,我们需要预先进行如下的预处理:
1)通过排序算法,将策略收益按照升序或降序进行排列;
2)利用编号记录原本策略收益应处的位置。
最后,纳什均衡的寻找需假如判断该均衡对应的对策是否属于最大值,如果有,则将
1)判断被选中串通的
2)选择
此时复杂度的计算如下:
排序算法复杂度为
[1]Daskalakis C. The Complexity of Nash Equilibria[D]. the University of California, Berkeley, 2008.