夏普利值:
从百度百科找的,不了解的可以看看,能帮助你了解什么是夏普利值。
考虑这样一个合作博弈:a、b、c 投票决定如何分配100万,他们分别拥有50%、40%、10%的权力,规则规定,当超过50%的票认可了某种方案时才能通过。那么如何分配才是合理的呢? 按票力分配,a 50万、b 40万、c10万;c向a提出:a70万、b0、c30万,b向a提出:a80万、b20万、c0……
权力指数:每个决策者在决策时的权力体现在他在形成的获胜联盟中的“关键加入者”的个数,这个“关键加入者”的个数就被称为权利指数。
夏普里值(Shapley value):在各种可能的联盟次序下,参与者对联盟的边际贡献之和除以各种可能的联盟组合。
次序 abc acb bac bca cab cba 关键加入者 b c a a a a
由此计算出a,b,c的夏普里值分别为4/6,1/6,1/6 所以a,b,c应分别获得100万的2/3,1/6,1/6 。
下面是一个故事,帮助大家进一步理解。
有两位旅行者A和B约定一起外出旅行,为了充饥,A出门时带了5块饼,B带了3块饼。旅行期间,他们结识了一位朋友C。经过一段时间的跋涉后,三位朋友坐下来一起分享由A和B提供的8块饼。之后,C给A支付了8块金币离开了。A决定把3块分给B。可是,B认为8块饼是大家共享的,因此8枚金币理应由A、B两人均分。两人在相持不下的情况下,找到了博弈大师夏普利。夏普利告诉B说:“你的朋友A应该说是够仁义的,公平而论他只要给你1颗金币就可以了。”“为什么?”B不解地问。夏普利解释说:“想想看,8块饼中你自己吃掉了3-8/3,剩下了1/3;而A吃掉了5-8/3,剩下了7/3。而1/3+7/3正是C吃掉的部分,你说你是不是应该只得到一枚金币?”于是,B愉快地接受了应该属于自己的一枚金币,两个人又一起高高兴兴地踏上了旅途。
在这个故事里,夏普利所提出的金币分配办法,遵循的原则便是:所得应该与自己的贡献相等。
main.m
clc;close all;
clear;
n=20;
for q=1:20
for p=1:2^20-1
f(q,p)=abs(rand()*100-rand()*100);
end
end
for i=2:20
for j=1:2^i-1
S(j,1)=xiapuli(0,i,j,f);
end
h=var(S(:,1));
min=9999999;
if h<min
min=h;
z=i;
end
end
xiapuli.m
function y = xiapuli(r,n,g,f)
if n ==1
y=factorial(0)*factorial(0)/factorial(1)*f(1,g);
else
t=0;
for w=1:n-1
s=f(w,g);
s=factorial(n-w)*factorial(w-1)/factorial(n)*s;
t=t+s;
end
if r==0
y=t+factorial(0)*factorial(n-1)/factorial(n)*f(n,g);
else
y=t;
end
y=y+xiapuli(1,n-1,g,f);
end
end
这里用到了递归,所以matlab的运算速度比较慢。。。
over!!!