MATLAB求解夏普利值

发布于:2023-01-12 ⋅ 阅读:(402) ⋅ 点赞:(0)

夏普利值:

从百度百科找的,不了解的可以看看,能帮助你了解什么是夏普利值。

考虑这样一个合作博弈: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!!!

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到