"Méthode de distribution de la valeur Q, ratio plus convention (D'Hondt)" code matlab

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

Je suppose que tu aimes

Origine blog.csdn.net/weixin_44186580/article/details/104697110
conseillé
Classement