LINGO程序——最优组队模型(优化问题)

某车间要参加单位举办的技术操作比赛,比赛设有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)));

你可能感兴趣的:(lingo学习笔记)