Exemple: Une école a 3 départements avec un total de 200 étudiants, 103 dans le département A, 63 dans le département B et 34 dans le département C. 21 places sont attribuées selon la méthode de la valeur Q, «méthode de la valeur Q + D'Hondt».
%Q值分配法
clc
clear
all=200;
all_des=21;
peo=[103 53 43];
p=floor(peo./all*all_des);
rest=all_des-sum(p);
for i=1:rest
Q=peo.^2./(p.*(p+1));
[M,I]=max(Q);
p(I)=p(I)+1;
end
p
Cependant, la méthode de distribution de la valeur Q peut être injuste lorsque le nombre de places est petit ou lorsqu'il y a plus de départements impliqués dans la distribution, il est donc proposé d'utiliser la «méthode de distribution de valeur D'Hondt + Q», le code est le suivant. Voir les documents de référence pour des explications spécifiques.
%D'Hondt +Q值分配法
clc
clear
all=200;
all_des=21;
peo=[103 53 43];
[m,n]=size(peo);
p1=zeros(m,n); %每部门分配的名额
[M1,I1]=max(peo);
p1(I1)=p1(I1)+1; %先把名额分配给人数最多的一组
while sum(p1)<all_des %先用D'Hondt法,逐一分配名额,直至每个系都有至少一个分配名额或分配名额数达到要求值
if ismember(0,p1)
[M2,I2]=max(peo./(p1+1));
p1(I2)=p1(I2)+1;
else
break
end
end
if sum(p1)==all_des
disp(['使用D\''Hondt方法,且分配名额为',num2str(p1)]);
return
else %使用Q值分配方法
p=floor(peo./all*all_des);
rest=all_des-sum(p);
for i=1:rest
Q=peo.^2./(p.*(p+1));
[M,I]=max(Q);
p(I)=p(I)+1;
end
disp(['使用q值方法,且分配名额为',num2str(p)]);
end
Documents de référence:
https://wenku.baidu.com/view/efe0e5b702d276a201292e0c.html