Shapley值法
Shapley值法
基于Shapley值进行联盟成员的利益分配体现了各盟员对联盟总目标的贡献程度,避免了分配上的平均主义,比任何一种仅按资源投入价值、资源配置效率及将二者相结合的分配方式都更具合理性和公平性,也体现了各盟员相互博弈的过程。但Shapley值法的利益分配方案尚未考虑联盟成员的风险分担因素,实质上隐含着各盟员风险分担均等的假设,因此,对于联盟成员风险分担不等或风险分担存在较大差异的状况,需要根据风险分担大小对Shapley值法的利益分配方案做出适当的修正。另需要注意利用Shapley值法进行利益分配应具备的前提条件是:要求每个参与人对在不同联盟组合状态下的利益要有一个较为准确的预期;此外,还要对这种复杂的计算方式有一个清楚的了解。知识联盟的总产出有时可能是不确定的,不同联盟组合状态下的收益也可能是不确定的,这会在一定程度上影响Shapley值法的应用。对于总效用不确定的情况,为了获取一个比较合理的不同联盟组合状态下的效用值,可以采用AHP法、ANP法、模糊数学等综合评价方法来估算各种联盟组合状态下的可能效用值,从而获得shapley值法所需要的数据,再进行具体利益分配上的计算。
基本介绍
在社会或经济活动中,两个或多个实体,例如个人、公司、国家等,相互合作结成联盟或者利益集团,通常能得到比他们单独活动时获得更大的利益,产生一加一大于二的效果。然而,这种合作能够达成或者持续下去的前提就是,合作各方能够在合作的联盟中得到他应有的那份利益。那么,如何才能做到合理地分配合作各方获得的利益呢?我们先来看一个简单的例子。
【问题1】 甲、乙、丙三人合作经商。倘若甲、乙合作可获利7万元,甲、丙合作可获利5万元,乙、丙合作可获利4万元,三人合作则获利10万元,每人单干各获利1万元。问三人合作时如何分配获利?
很显然,利益分配时,三人获利总和应为10万元。设甲、乙、丙三人分配获利为,则有
三人中如果谁获利小于1万元,则他就会单干,不会加入这个联盟。如果不成立,甲和乙就会组成一个小的联盟,而把丙抛在一边。
但是,这个系统有无穷多组解,例如,甚至是(3,5,2)。很显然,站在乙或丙的角度,和甲合作都可以获得更大的利益,换言之,甲在他所参与的合作中贡献最大;同理,乙次之,丙贡献最小。因此,像(5,3,2),都是合理的解。哪一个更合理?因此应该有一种圆满的利益分配方法。
这类问题称为n人合作对策。L.S.Shapley在1953年给出了解决该问题的一种方法,称为Shapley值法。
下面先给出合作对策的一般模型。记为n个合作人的集合。若对于的任何子集都有一个实数v(s)与之对应,且满足下列条件:
(1),其中为空集。
(2)对于任意两个不交子集,都有,则称v(s)为定义在上的一个特征函数。
在实际问题中,v(s)就是各种联盟的获利,而第二个条件表明任何情况下合作至少总比单干或者小团体的合作来得有利。合作对策就是需要确定每个人获得的利益,或者对全体成员来讲就是向量。按照前例的分析,我们知道合理的分配需要满足
并且,该式当时等号成立。
上述的提法中实质上没有什么限制,这样我们总可以找到多个解。所以,必须有一些有关合理性的限制,在谅限制下,寻找合理的对策才是有意义的。
Shapley给出了一组对策应满足的公理,并证明了在这些公理下合作对策是唯一的。
【公理1】(对称性)设是的一个排列,对于的任意子集,有。若在定义特征函数,则对于每个都有。
这表示合作获利的分配不随每个人在合作中的记号或次序变化。
【公理2】(有效性)合作各方获利总和等于合作获利:
【公理3】(冗员性)若对于包含成员i的所有子集s都有,则。其中为集合s去掉元素i后的集合。
这说明如果一个成员对于任何他参与的合作联盟都没有贡献,则他不应当从全体合作中获利。
【公理4】(可加性)若在上有两个特征函数,则有
这表明有多种合作时,每种合作的利益分配方式与其他合作结果无关。
Shapley证明了满足这四条公理的是唯一的,并且其公式为
其中,是中包含成员i的所有子集形成的集合,是集合s元素的个数,是加权因子且有
Shapley值公式可以解释如下:是成员i在他参与的合作s中做出的贡献。这种合作的总计有出现的方式,因此每一种出现的概率就是。
程序表达
Shapley值法写成程序就是:
function shapley
n= input(’Number of cooperators:’);
for j=1:n,
nam{j}=input (['Name of cooperator' num2str(j)’:’] ,’s’);
end
for k =1:2^n-1,
w{k}=abs (dec2bin(k)- 48);
w{k}= [zeros(1,n-length(w{k})) w{k}];
fprintf ('The profit for cooperator’);
for j= I:n,
if w{k}(j)==1,
fprintf(’% s', nam{j});
end
end
p(k)=input(’:’);
end
fprintf (' If they cooperate,then ');
for j=1:n,
x(j)=1/n*p(2^(n-j));
for k =1:2^n-1,
if w{k}(j)==0,
s = sum(w{k})+ 1;
ww =1/s/nchoosek(n,s);
x(j)=x(j)+ww* (p(k+2^(n-j))一p(k));
end
end
fprintf ('The profit for % s is : % f. , nam{j},x(j));
end
参考资料
最新修订时间:2022-08-25 15:10
目录
概述
基本介绍
参考资料