公平的席位分配问题1.问题:席位分配在社会活动中经常遇到,如:人大代表或职工学生代表的名额分配和其他物质资料的分配等。通常分配结果的公平与否以每个代表席位所代表的人数相等或接近来衡量。目前沿用的惯例分配方法为按比例分配方法,即:某单位席位分配数=某单位总人数比例总席位如果按上述公式参与分配的一些单位席位分配数出现小数,则先按席位分配数的整数分配席位,余下席位按所有参与席位分配单位中小数的大小依次分配之。这种分配方法公平吗?下面来看一个学院在分配学生代表席位中遇到的问题:某学院按有甲乙丙三个系并设20个学生代表席位。它的最初学生人数及学生代表席位为系名甲乙丙总数学生数1006040200学生人数比例100/20060/20040/200席位分配106420后来由于一些原因,出现学生转系情况,各系学生人数及学生代表席位变为:系名甲乙丙总数学生数1036334200学生人数比例103/20063/20034/200按比例分配席位10.36.33.420按惯例席位分配106420由于总代表席位为偶数,使得在解决问题的表决中有时出现表决平局现象而达不成一致意见。为改变这一情况,学院决定再增加一个代表席位,总代表席位变为21个。重新按惯例分配席位,有系名甲乙丙总数学生数1036334200学生人数比例103/20063/20034/200按比例分配席位10.8156.6153.5721按惯例席位分配117321这个分配结果出现增加一席后,丙系比增加席位前少一席的情况,这使人觉得席位分配明显不公平。这个结果也说明按惯例分配席位的方法有缺陷,请尝试建立更合理的分配席位方法解决上面代表席位分配中出现的不公平问题。2.建立模型并分析:模型公式:)1(2kkkknnpQ于是知道增加的席位分配可以由kQ的最大值决定,且它可以推广到多个组的一般情况。用kQ的最大值决定席位分配的方法称为Q值法。对多个组(m个组)的席位分配Q值法可以描述为:1.先计算每个组的Q值:kQ,k=1,2,…,m2.求出其中最大的Q值iQ(若有多个最大值任选其中一个即可)3.将席位分配给最大Q值iQ对应的第i组。3.matlab编程:function[q]=xwfp(P,N)%xwfp是公平席位分配函数%语法[]=xwfp(P,N,m)%输入参数%P--各组人数的数据文件%m—组数%N--总席位数%输出参数%q--每组应分配的席位数%程阳编写于2013年3月10日[x,y]=size(P);m=x*y;q=[];Q=[];p=sum(P);fori=1:mq(i)=fix((P(1,i)/p)*N);endq;fori=1:mQ(i)=P(i)*P(i)/(q(i)*(q(i)+1));endQ;ifsum(q)==Nqreturn;elsefori=1:mifQ(i)==max(Q)q(i)=q(i)+1;Q(i)=P(i)*P(i)/(q(i)*(q(i)+1));endenddisp('最后分配方案:')end4.用matlab求解上述问题输入参数:P=[1036334];N=21;调用所编写的matlab程序:[q]=xwfp(P,N)得到结果如下:最后分配方案:q=11645.人工计算求解,验证上述结果先按应分配的整数部分分配,余下的部分按Q值分配。本问题的整数名额共分配了19席,具体为:甲10.815101n乙6.61562n丙3.57033n对第20席的分配,计算Q值45.96111010321Q;5.94766322Q;33.96433423Q因为1Q最大,因此第20席应该给甲系;对第21席的分配,计算Q值37.80121110321Q;5.94766322Q;33.96433423Q因为Q3最大,因此第21席应该给丙系最后的席位分配为:甲11席乙6席丙4席注:若一开始就用Q值分配,以1321nnn逐次增加一席,也可以得到同样的结果。