运筹学的一个问题的lingo模型求解答

(对下面问题用lingo求解)某大学计算机实验室聘用4名大学生(代号1、2、3、4)和两名研究生(代号5、6)值班答疑。已知每人从周一到周五最多可安排的值班时间及每人每小时值班报酬如下表,该实验室开放时间为上午8点至晚10点,开放时间内须且仅须一人值班,规定每名大学生每周值班不少于8h,研究生不少于7h,每名学生每周值班不超过3次,每次值班不少于2小时,每天安排值班的学生不超过3人,期中一定有一名研究生建立使该实验室总支付报酬为最小的数学模型
学生代号 报酬元/h 每天最多可安排的值班时间,周一 周二 周三 周四 周五
1 10 6 0 6 0 7
2 10 0 6 0 6 0
3 9.9 4 8 3 0 5
4 9.8 5 5 6 0 4
5 10. 8 3 0 4 8 0
6 11.3 0 6 0 6 3
设:xij为学生i在周j的值班时间

model:
sets:
week/1..5/;
stu/1..6/:pay;
link(stu,week):cap,T,X;
endsets
data:
cap=
6 0 6 0 7
0 6 0 6 0
4 8 3 0 5
5 5 6 0 4
3 0 4 8 0
0 6 0 6 3;
pay=10 10 9.9 9.8 10 11.3;
enddata
min=@sum(link(i,j):T(i,j)*X(i,j)*pay(i));
!工作约束条件;
@for(link:@bin(X));
!每天时间满足14小时;
@for(week(j):
@sum(link(i,j):T(i,j)*X(i,j))=14);
!本科生工作时间不少于8小时;
@for( stu(i)|i#lt#5:
@sum(link(i,j):T(i,j)*X(i,j))>=8);
!研究生工作时间不少于7小时;
@for( stu(i)|i#ge#5:
@sum(link(i,j):T(i,j)*X(i,j))>=7);

!每天安排的人不超过3人;
@for(week(j):
@sum(link(i,j):X(i,j))<=3);
!每周值班次数不超过3次;
@for(stu(i):
@sum(link(i,j):X(i,j))<=3);
!每次最大工作时间限制;
@for(link(i,j):T(i,j)<=cap(i,j));
@for(link(i,j):T(i,j)>=0);
!每天至少一名研究生;
@for(week(j):
@sum(link(i,j)|i#ge#5:X(i,j))>=1);
!每次工作最少2个小时;
!@for(link(i,j):T(i,j)*X(i,j)>=2);

Local optimal solution found.
Objective value: 705.6000
Objective bound: 705.6000
Infeasibilities: 0.6825536E-08
Extended solver steps: 34
Total solver iterations: 3635
Model Class: MINLP
Total variables: 60
Nonlinear variables: 60
Integer variables: 30
Total constraints: 88
Nonlinear constraints: 12
Total nonzeros: 310
Nonlinear nonzeros: 180
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-06-25
model:
sets:
person/1..6/:a;
day/1..5/;
arrange(person,day):y,x,c;
endsets
data:
a=10 10 9.9 9.8 10 11.3;
c=
6 0 6 0 7
0 6 0 6 0
4 8 3 0 5
5 5 6 0 4
3 0 4 8 0
0 6 0 6 3;
enddata
min=@sum(arrange(i,j):a(i)*x(i,j));
@for(arrange:y=@if(x#ge#2,1,0);x<=c;x>=2*y);
@for(person(i)|i#le#4:@sum(day(j):x(i,j))>=8);
@for(person(i)|i#ge#5:@sum(day(j):x(i,j))>=7);
@for(day(j):@sum(person(i):y(i,j))<=3);
@for(day(j):@sum(person(i)|i#ge#5:y(i,j))>=1);
@for(day(j):@sum(person(i):x(i,j))=14);
end本回答被网友采纳
相似回答