- 在线时间
- 2759 小时
- 最后登录
- 2017-9-15
- 注册时间
- 2011-4-3
- 听众数
- 538
- 收听数
- 4
- 能力
- 80 分
- 体力
- 1764 点
- 威望
- 27 点
- 阅读权限
- 150
- 积分
- 5990
- 相册
- 0
- 日志
- 0
- 记录
- 5
- 帖子
- 6675
- 主题
- 3503
- 精华
- 8
- 分享
- 6
- 好友
- 1721
TA的每日心情 | 开心 2017-2-7 15:12 |
---|
签到天数: 691 天 [LV.9]以坛为家II
 群组: 2013年国赛赛前培训 群组: 2014年地区赛数学建模 群组: 数学中国第二期SAS培训 群组: 物联网工程师考试 群组: 2013年美赛优秀论文解 |
九、护士值班安排问题
某医院,从周一到周日都要有人值班,每天至少需要的护士如表。要求每个护士每周连续上班5天,试问该医院至少需要多少护士?并给出上班安排计划。
周 1 2 3 4 5 6 7
人 20 16 13 16 19 14 12
取决策变量star(i):周i开始值班的人数;
目标函数:min sum[star(i)](i=1,2,3,...,7)
约束条件:连续工作五天,周j值班的人数>=required(j)(j=1,2,3,...,7)
model:
sets:
days/mon..sun/: required,start;
endsets
data:
!每天所需的最少职员数;
required = 20 16 13 16 19 14 12;
enddata
!最小化每周所需职员数;
min=@sum(days: start);
@for(days(J) sum(days(I) | I #le# 5:start(@wrap(J+2+I,7))) >= required(J));
end
解得: 总共需要22人,周一8人开始值班,周二2人,周三0人,周四6人,周五3人,周六3人,周日0人。
十、填数问题
分别把1,2,…,16填到图示的16个圈内,使得每个三角形上的所有圈内的数的和为81(共4个三角形)。
决策变量:e_ij=1,第i个圈填数a_j;e_ij=0,第i个圈不填数a_j。a_j=j,j=1,2,3,...,16。
模型:
model:
sets:
number/1..16/:a;
link(number,number):e;
tri1(number)/1 2 3 4 5 6 7 8 9/;
tri2(number)/1 2 3 4 16 15 12 11 10/;
tri3(number)/4 5 6 7 14 13 12 15 16/;
tri4(number)/7 8 9 1 10 11 12 13 14/;
endsets
data:
a=1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16;
enddata
[obj]max=sum(link(i,j):e(i,j)*a(j));
@for(number(i):sum(link(i,j):e(i,j))=1);
@for(number(j):sum(link(i,j):e(i,j))=1);
@for(link(i,j) bin(e(i,j)));
@sum(number(j):sum(tri1(i):e(i,j)*a(j)))=81;
@sum(number(j):sum(tri2(i):e(i,j)*a(j)))=81;
@sum(number(j):sum(tri3(i):e(i,j)*a(j)))=81;
@sum(number(j):sum(tri4(i):e(i,j)*a(j)))=81;
@sum(link(i,j):e(i,j)*a(j))=136;
end
红色的那句程序可以去掉,也可以为:min=@sum(link(i,j):e(i,j)*a(j)),但求的结果不同,结果都符合要求。
编号1~16的圆圈的填数结果至少有3种:
(1)12 11 1 10 7 8 14 13 5 9 4 16 2 6 15 3
(2)14 3 5 15 8 7 13 4 12 6 11 10 9 2 16 1
(3)14 11 4 15 9 8 13 2 5 16 3 10 12 6 1 7
为了求得更多的解,可以约束编号1~16的圆圈的填数结果不为以上3种结果。
model:
sets:
number/1..16/:a;
link(number,number):e;
tri1(number)/1 2 3 4 5 6 7 8 9/;
tri2(number)/1 2 3 4 16 15 12 11 10/;
tri3(number)/4 5 6 7 14 13 12 15 16/;
tri4(number)/7 8 9 1 10 11 12 13 14/;
yueshu1:c1;
yueshu2:c2;
yueshu3:c3;
endsets
data:
a=1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16;
c1=12 11 1 10 7 8 14 13 5 9 4 16 2 6 15 3;
c2=14 3 5 15 8 7 13 4 12 6 11 10 9 2 16 1;
c3=14 11 4 15 9 8 13 2 5 16 3 10 12 6 1 7;
enddata
[obj]min=sum(number(i) sum(number(j):e(i,j)*a(j)));
@for(number(i):sum(number(j):e(i,j))=1);
@for(number(j):sum(link(i,j):e(i,j))=1);
@for(link(i,j) bin(e(i,j)));
@sum(number(j):sum(tri1(i):e(i,j)*a(j)))=81;
@sum(number(j):sum(tri2(i):e(i,j)*a(j)))=81;
@sum(number(j):sum(tri3(i):e(i,j)*a(j)))=81;
@sum(number(j):sum(tri4(i):e(i,j)*a(j)))=81;
@sum(link(i,j):e(i,j)*a(j))=136;
@sum(yueshu1(j):sum(link(i,j):e(i,j)))<16;
@sum(yueshu2(j):sum(link(i,j):e(i,j)))<16;
@sum(yueshu3(j):sum(link(i,j):e(i,j)))<16;
end
解得:(4)12 15 11 10 3 8 16 1 5 4 7 14 9 13 2 6
可以继续下去:······
|
zan
|