某车间要参加单位举办的技术操作比赛,比赛设有5个单项和一个全能项目(同时参加5个单项),14人参加。
队员 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
单项 1 | 10 | 1 | 4 | 10 | 5 | 5 | 4 | 6 | 2 | 4 | 8 | 6 | 10 | 9 |
单项 2 | 9 | 5 | 6 | 4 | 4 | 7 | 4 | 7 | 8 | 6 | 7 | 8 | 1 | 4 |
单项 3 | 7 | 5 | 5 | 6 | 7 | 7 | 8 | 8 | 7 | 10 | 2 | 6 | 4 | 5 |
单项 4 | 3 | 5 | 9 | 5 | 8 | 6 | 9 | 10 | 6 | 6 | 5 | 4 | 2 | 4 |
单项 5 | 3 | 10 | 8 | 2 | 8 | 7 | 7 | 5 | 8 | 6 | 9 | 8 | 3 | 7 |
问题1:如果比赛规定:
(1)每个车间可派14人参加比赛,每人至少参赛一项;
(2)参加比赛的队员中必须有3人参加全能比赛,其余队员参加单项比赛,且参加每个单项比赛的队员数不得超过6人(不包括全能队员);
(3)参加全能的队员不能参加单项;
(4)参加单项比赛的队员至多可以参加3个单项;
(5)参加单项比赛的队员得分是其参加项目得分之和,参加全能比赛的队员得分是其参加项目得分和的4/5,车间的得分是车间所有参赛队员得分之和。
问 如何安排参加比赛最好?
问题求解:
难点在于如何区分参加单项和全能比赛的队员。
建立决策变量:令yj=1表示第j个人参加全能比赛,yj=0表示第j个人不参加全能比赛。
令xij=1表示第j个人参加第i项单项比赛;xij=0表示第j个人不参加第i项单项比赛。
每个能参加全能比赛的不参加单项比赛,则有:xij<1-yj
j=1,2,…,14;i=1,…,5
参加单项比赛的人至少参加1项,我们要求yj=0时,有∑xij>=1-yj j=1,…,14
LINGO代码:
sets:
TM/1..14/:y,s;
P/1..5/:;
U(P,TM):a,x;
endsets
data:
a=10,1,4,10,5,5,4,6,2,4,8,6,10,9,
9,5,6,4,4,7,4,7,8,6,7,8,1,4,
7,5,5,6,7,7,8,8,7,10,2,6,4,5,
3,5,9,5,8,6,9,10,6,6,5,4,2,4,
3,10,8,2,8,7,7,5,8,6,9,8,3,7;
enddata
max = 0.8*@sum(TM(j):s(j)*y(j))+@sum(U(i,j):a(i,j)*x(i,j));
@sum(TM(j):y(j))=3;
@for(P(i):@for(TM(j):x(i,j)<=1-y(j)));
@for(TM(j):@sum(P(i):x(i,j))>=1-y(j));
@for(TM(j):@sum(P(i):x(i,j))<=3);
@for(P(i):@sum(TM(j):x(i,j))<=6);
@for(TM(j):s(j)=@sum(P(i):a(i,j)));
@for(U(i,j):@bin(x(i,j)));
@for(TM(j):@bin(y(j)));