运筹学实验论文

题目:

某大学计算机实验室聘用4名大学生(代号1、2、3、4)和2名研究生(代号5、6)值班答疑。已知每人从周一至周五每天最多可安排的值班时间及每人每h值班报酬如下表所示: 

学生代号

报酬(元/h)

每人最多可安排的值班时间

周一

周二

周三

周四

周五

1

10.0

6

0

6

0

7

2

10.0

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

 

该实验室开放时间为上午8:00至晚上10:00,开放时间内须有且仅须有一名学生值班。规定大学生每周值班不少于8h,研究生每周值班不少于7h,每名学生每周值班不超过3次,每次值班不少于2h,每天安排值班的学生不超过3人,且其中必须有一名研究生。施为该实验室安排一张人员值班表,使总支付的报酬为最少。

 

 

解:                                                                                                                               i

model: 

!大学生值班问题; 

sets: 

students1/stu1..stu4/:; 

students2/stu5,stu6/:;

 students/stu1..stu6/:;

 weeks/w1..w5/:; 

sw(students,weeks):c,times,yi,ai; 

endsets 

!目标函数; 

min=@sum(sw: c*times); 

!约束条件; 

!不超过可安排时间; 

@for(weeks(J):@for(students(I):times(I,J)>=2*yi(I,J))); 

@for(weeks(J):@for(students(I):times(I,J)<=ai(I,J)*yi(I,J))); 

!大学生每周值班不少于8h; 

@for(students1(I):@sum(weeks(J):times(I,J))>=8); 

!研究生每周值班不少于7h; 

@sum(weeks(J):times(5,J))>=7; @sum(weeks(J):times(6,J))>=7; 

!实验室每天开放14h;

@for(weeks(J):@sum(students(I):times(I,J))=14); 

!每名学生一周值班不超过3次; 

@for(students(I):@sum(weeks(J):yi(I,J))<=3); 

!每天值班不超过3人; 

@for(weeks(J):@sum(students(I):yi(I,J))<=3); 

!每天有一名研究生值班; 

@for(weeks(J):yi(5,J)+yi(6,J)>=1); 

!非零约束; 

@for(weeks(J):@for(students(I):times(I,J)>=0)); 

!0-1变量; 

@for(sw:@bin(yi)); 

data: 

c=10 10 10 10 10   

10 10 10 10 10   

9.9 9.9 9.9 9.9 9.9   

9.8 9.8 9.8 9.8 9.8   

10.8 10.8 10.8 10.8 10.8   

11.3 11.3 11.3 11.3 11.3; 

ai=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 

end 

 

 

最终结果:

学生代号

报酬(元/h)

每人最多可安排的值班时间

周一

周二

周三

周四

周五

1

10.0

6

 

6

 

7

2

10.0

 

4

 

6

 

3

9.9

 

8

 

 

5

4

9.8

5

 

6

 

 

5

10.8

3

 

2

5

 

6

11.3

0

2

 

3

2

 

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值