d 039 Hondt法matlab程序,席位分配问题——惯例Q值法和d'hondt法的MATLAB程序

该博客介绍了数学建模中经典的席位分配问题,提供了两种解决方案:惯例Q值法和dhondt法。惯例Q值法通过分配比例计算每个群体的席位数,而dhondt法则采用连续除法来确定席位分配。文章通过示例代码详细阐述了这两种方法的实现过程。
摘要由CSDN通过智能技术生成

程序介绍了数学建模中经典问题的两种解法,即席位分配问题!

5 {6 U/ W: p2 \6 B0 k- T- ]%适用于所有情况 BY Gu8 J( W0 S+ N2 s% b4 |2 }

clear all- @% }4 O) R) w7 n+ `

clc   %惯例Q值法分配席位,wy为席位数,ps为人数总和,R为分配方案' v; ~. k2 S! S

wy=19;

# |- E! x& c8 r; FP=[103 63 34]

Q# U2 B5 R& U; X& f%菜单选项, y0 a: h. |4 s8 N% P3 q) F2 q0 r& x& r

MENUN=menu('选择方法','惯例Q值法','dhondt法','都用');6 c; p9 G; e1 @! S! T, U

%惯例Q值法) V! L! Z3 \6 {. Y% ^; {! ~' X0 b+ a

if (MENUN==1||MENUN==3)==1) K* `7 B  a1 L- u$ _# h5 F

n=size(P,2);

% a# r) C3 L8 B& _  U3 T1 eps=sum(P);7 ]5 O+ d' a/ ~! N% c

RS=0;: v& W3 F+ M1 i0 O- @# F; C% s6 [8 D

for i=1:n

y4 T3 _, a0 b+ E- G7 ]    R(i)=fix(P(i)/ps*wy);( f( C# l) h- k9 ^& H# k' P) `6 `

RS=RS+R(i);

2 r$ A  u; j9 S% }" E$ r/ lend

& U/ {3 ^- T3 O" _9 awy1=wy-RS;+ w1 \) X8 G) a2 v& v7 e

for i=1:wy13 z; R4 h( w0 x9 X, N0 o8 Q

for j=1:n5 F% u/ n# {4 e3 ?6 X7 V

Q(j,i)=P(j).^2/(R(j)*(R(j)+1));

4 j0 ~# N- ]$ W, T+ R/ d+ ]& p3 B9 T    end/ d) `3 `. B1 J% S

t=Q(1,i);# O2 ^: G+ ?% t# c( @& z

a=1;! U' P/ a4 t8 j# W( d9 j6 b

for m=2:n' ~0 i$ I' M8 F( j

if Q(m,i)>t& n+ S: n+ s5 L' H

t=Q(m,i);5 a4 y$ K  c6 S; u0 Y

a=m;: |) @2 \$ u/ Z% g+ d& P+ w0 N# R

end

. j1 H0 t* b' c, M: {3 q1 n0 P    end

( u* b5 D- B4 [4 x    R(a)=R(a)+1;. _* x$ [; w/ t0 l: _" U$ {

end

# a6 X3 r) ~) {disp('惯例Q值法席位分配为:')

; j) {& E# {8 j& {3 a6 ^  gR6 v/ Q5 v7 G. z( c

end, M9 Y+ Z# i; g9 |8 z

%d'hondt法………………………………………………………………………………$$

# @7 b1 U7 E, k: Z: q# t, [# y  Uif (MENUN==2||MENUN==3)==10 R( _% d3 ~; s2 f

zs=P;- J  Z, F3 t& T) p; {( k- Q

n=size(zs,2);

& `$ b$ @' {6 gfor i=1:n

0 y6 b( _" `: O9 U+ ]1 M     for j=1:wy

- o8 u6 z$ E1 \% g  A         r(i,j)=zs(i)/j;, b+ O3 W2 l  t' e1 W7 @

end6 c. g8 v  `; P+ b. q

end! R. [% f5 m  a% c

t=r(

4bf900a2611f3937c07382c22bdf07c6.gif';

7 }9 z' b- }3 x. G+ w6 ZT=sort(t,'descend');

2 W5 T' z4 F% Q. R, Q% @min=T(wy);

/ t" d1 q/ j# P% d% {" ]$ h: L( IR1=zeros(1,n);9 ?9 Q& k5 i- k$ j4 q7 Z

for i=1:n; F. h. C% l: p

for j=1:wy

" N6 }1 N# A8 p4 k/ |* ]         if r(i,j)>min$ o; ~7 X" W2 u0 x/ ?

R1(i)=R1(i)+1;

+ }! V+ t5 Z' c' f         end       " |6 e6 n! q/ k3 D; {9 \7 D

end

0 }$ I2 U7 u4 h' F0 m' p6 O6 v7 B) uend

% \6 S6 e$ X3 Brest=wy-sum(R1);%剩余席位

; Z( M: r6 P- q% u' q%对剩余席位的分配处理; D( B$ y/ U# T/ C# J5 b; ^

k=0;

6 i9 @7 a1 M- F% ufor i=1:n/ j; Z# ?+ Q- y3 _! d7 h

if k>=rest%席位分配完毕,结束循环5 s3 H5 ~) ?0 Z4 u' N- f! Z: Z

break;

2 r9 R. |, j$ ^, n7 K    end. t' ^2 w7 ^3 f4 W3 I% {

for j=1:wy

, D6 j1 f# O" X- \& A1 a1 a        if r(i,j)==min9 v4 z, F( n* ]6 d3 O0 f

R1(i)=R1(i)+1;

/ n" r. u! `1 ?- Q8 k           k=k+1;%对剩余席位分配计数

2 y& {8 f! ]" S' `5 r! X           break;+ Q* ^2 h& m, ]2 a0 w/ M# n! }  W/ u

end   % t/ D$ W# A# `, ]2 B" q! \3 K, p2 c

end

3 Q- O9 U' B( t% ?- \. M# Rend

% M6 z; j; |2 f; z  N6 wdisp ('dhondt法席位分配:')

$ V! j- _8 n2 s+ Q3 a; _( m5 l, VR14 H! ~0 T+ r, w7 j" n, F7 s

end

$ c4 E8 Z3 P8 A7 _, a0 m3 U; ip7 D- S/ M  n! M/ i

5 Y0 M2 i2 O$ v" H! t

9 G+ Y7 g% N5 Y5 S0 M: _

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值