护士排班优化问题.docx
- 文档编号:29499363
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:23
- 大小:386.52KB
护士排班优化问题.docx
《护士排班优化问题.docx》由会员分享,可在线阅读,更多相关《护士排班优化问题.docx(23页珍藏版)》请在冰豆网上搜索。
护士排班优化问题
2015高教社杯全国大学生数学建模竞赛
承诺书
我们仔细阅读了《全国大学生数学建模竞赛章程》和《全国大学生数学建模竞赛参赛规则》(以下简称为“竞赛章程和参赛规则”,可从全国大学生数学建模竞赛下载)。
我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括、电子、网上咨询等)与队外的任何人(包括指导教师)研究、讨论与赛题有关的问题。
我们知道,抄袭别人的成果是违反竞赛章程和参赛规则的,如果引用别人的成果或其他公开的资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正文引用处和参考文献中明确列出。
我们重承诺,严格遵守竞赛章程和参赛规则,以保证竞赛的公正、公平性。
如有违反竞赛章程和参赛规则的行为,我们将受到严肃处理。
我们授权全国大学生数学建模竞赛组委会,可将我们的论文以任何形式进行公开展示(包括进行网上公示,在书籍、期刊和其他媒体进行正式或非正式发表等)。
我们参赛选择的题号是(从A/B/C/D中选择一项填写):
我们的报名参赛队号为(12位数字组成的编号):
所属学校(请填写完整的全名):
参赛队员(打印并签名):
1.
2.
3.
指导教师或指导教师组负责人(打印并签名):
(论文纸质版与电子版中的以上信息必须一致,只是电子版中无需签名。
以上容请仔细核对,提交后将不再允许做任何修改。
如填写错误,论文可能被取消评奖资格。
)
日期:
年月日
赛区评阅编号(由赛区组委会评阅前进行编号):
2015高教社杯全国大学生数学建模竞赛
编号专用页
赛区评阅编号(由赛区组委会评阅前进行编号):
赛区评阅记录(可供赛区评阅时使用):
评
阅
人
评
分
备
注
全国统一编号(由赛区组委会送交全国前编号):
全国评阅编号(由全国组委会评阅前进行编号):
护士工作时间的安排
摘要
当前社会“看病难”成了大中城市的一块难以根治的顽疾。
在城市的医院里常常出现患者爆满、医护人员人手不足的状况,现有的排班管理办法难以适应当前医院需求。
在这种情况下医护人员工作效率较低,导致医院人力资源的浪费。
为了缓解这一状况,本文以某医院的心脑血管科护士的工作时间安排表制定为例,在保证各时段护士人员需求下,分成求解最优安排方式的两类问题,即不考虑加班情况下人员规模最小和人员规模固定情况下加班人数最少。
针对问题一,为达到既满足工作需要又要尽可能少的人员编制,本文采取0-1整数规划,将护士1天的8小时工作分成5个模式。
通过LINGO软件对5个模式进行组合分析得到最小人员需求为87人,并将每时段安排人数做成EXCEL表格。
考虑到工作时长(工作时段+休息时段)给护士生活带来的影响,删减掉工作时长最长的模式。
随后对保留的四种模式进行随机组合,在所有组合中挑选出所有人数最少的模式,然后进行比较分析,综合考虑夜班人数等因素,遴选出最优模式组合。
具体模式选择及工作时间调度详见模型求解及附录。
针对问题二,护士人员限制为80人,需要部分护士加班2小时。
本文研究的是如何使得加班护士人数最少,并给出最优工作安排方案。
在问题一的基础上,增加两种加班模式,利用LINGO软件求解得到最少加班人数为26人。
随后利用EXCEL软件进行分析,在保证加班人数最少的前提下,综合夜班人数等因素选出最优安排方式。
具体模式选择及工作时间调度详见模型求解及附录。
关键字:
线性规划0-1整数规划LINGOEXCEL工作模式
一、问题重述
某医院的心脑血管科需要制定护士的工作时间表。
在心脑血管科的一个工作日分为12个两小时的时段,每个时段的人员要求不同。
例如,在夜间只要求有很少几名护士就足够了,但在早晨为了给病人提供特殊报务,需要很多护士。
表B1列出了每个时段的人员需求量。
表B1每个时段的人员需求
问题1:
(1)为满足需求最少需要多少名护士?
这里假定每位护士每天工作8小时,且在工作4小时后需要休息1小时。
(2)如果满足需求的排班方案不止一种,请给出你认为最合理的排班方案,并说明其理由。
问题2:
目前心脑血管科只有80名护士,如果这个数目不能满足指定的需求,只能考虑让部分护士加班。
如果加班,每天加班的时间为2小时,且紧随在后一个4小时工作时段之后,中间没有休息。
(1)请给出护士工作时间安排的方案,以使需要加班的护士数目最少。
(2)如果排班(包括加班)的方案不止一种,请给出你认为最合理的排班和加班方案,并说明其理由。
二、模型假设
1、不考虑国家法定假期及护士年假对排班的影响
2、不考虑护士因病假、事假换班带来的影响
3、不考虑护士因个人问题对排班的影响
4、所有给出的约束条件都真实、准确,且医院排班严格按照此执行
三、符号说明
1、i,j:
表示第i,j个工作时段
2、a(i):
第i个时间段所需护士人数
3、b(i):
第i个时间段安排护士人数
4、z:
表示所需最少护士总数
5、z′:
表示所需最少加班护士总数,y:
表示加班模式下,正常工作护士人数
6、start1,start2……startn:
表示护士的n种工作模式
6、j=i+p-k*limit,取适当值k∈N,使p∈[0,limit],表示为满足时段循环而定义的算法
7、T:
总工时(h)
8、A:
0-6时段安排加班护士人数,B:
6-12时安排加班护士人数
C:
6-12时段安排工作人数,D:
0-6时段安排工作人数
9、权重计算总分M
注:
i,j=1、2、3……12
四、问题一的模型建立与求解
4.1问题分析
此问中首要考虑的是满足工作需要条件下所需要人员数量最少,该问题是一个典型的线性规划问题。
根据题目要求,护士每工作4小时需要休息1小时,由于护士是按工作时段上岗,休息完1小时后不能在中间时刻上岗,因此我们默认护士每工作4小时休息2小时。
考虑到护士工作和休息是两种状态,本文采用0-1整数规划,用1表示工作时段,用0表示休息时段,利用集循环函数建立相应模型完成求解。
针对问题需要,本文引用的集函数主要为:
集操作函数wrap(index,limit),
集循环函数for(setname:
expression_list)
sum(setname:
expression_list)
相应的等同于:
start1模式:
1,1,0,1,1
start2模式:
1,0,1,0,1,1
start3模式:
1,1,0,1,0,1
start4模式:
1,0,1,1,0,1
start5模式:
1,0,1,0,1,0,1
本文假定每个护士选择1种工作方式,由5种模式随机组合。
每时段工作的护士由前几个时段开始工作的护士和本时段新增的护士组成,因此需要解决首尾时段连续的影响,为满足时段循环我们定义如下算法:
j=i+p-k*limit,取适当值k∈N,使p∈[0,limit]
利用LINGO软件进行求解得到最小人数Z=87。
考虑到实际情况下,五种值班模式排班过于繁琐,且start5工作时间过长,在此不作考虑。
对剩下的4种模式随机组合进行分析,利用LINGO软件进行求解得到数据。
再将分析结果通过EXCEL进行整理,从人员需求数目、夜班人数等因素进行比较排序,得到最优结果。
4.2模型的求解
4.2.1所提供数据分析
表1:
每个工作区间对应的时间段
时段编号(i)
1
2
3
4
5
6
7
8
9
10
11
12
时段
00-
02
02-
04
04-
06
06-
08
08-
10
10-
12
12-
14
14-
16
16-
18
18-
20
20-
22
22-
24
表2:
、各时间段需求护士人数
时段编号
(i)
1
2
3
4
5
6
7
8
9
10
11
12
a(i)
15
15
15
35
40
40
40
30
31
35
30
20
4.2.2编程求解
LINGO(部分)求解结果如下(代码见附录):
本文首先对五种模式共存的情况用LINGO进行求解得到最少需要人数87人(求解代码和生成见附录),并将护士排班情况绘成EXCEL表格。
在表格中,模式5持续时间过长,且工作休息间歇安排极不合理,在后面的分析中不作考虑。
随后,对另4种模式相互组合的情况分别用LINGO进行逐一求解,并将部分模式分析的程序代码呈现(见附录)。
求解完数据后,通过EXCEL软件对所有数据按①所需最少人数、②0-6时段开始上班人数、③6-12时段开始上班人数进行排序分析,并用不同的颜色填充符合要求的解。
(最优的前30%)
具体权衡条件如下:
1、以所需人数最少为优先考虑条件
2、考虑0-6时开始上班人数尽可能少
3、要保证护士人员在6-12时上班的人数尽可能多
结论:
在每个护士每天工作8小时,且在连续工作4小时后至少需休息1小时的条件下,该医院为满足工作需求至少需要87名护士,为减少0-6时段开始上班人数,将上班时间集中在6-12时段,通过对照分析,模式3(101101)和模式4(110101)的组合为最优选择。
对应调度安排见表3:
护士值班安排表-34(问题一)
表4:
护士值班安排表1(问题一)
注:
1.模式组合中的数字代表不同模式,多个数字代表多种模式组合,例如:
“123”代表模式1、模式2、模式3的组合
2.0-6人数,6-12人数分别代表从0:
00到6:
00以及从6:
00到12:
00开始上班的人数
五、问题二的模型建立与求解
5.1问题的分析
此问题整体解题思路与问题一相似,在护士人员只有80人的前提下要保证工作的完成,且尽可能少的安排加班人数,这也是一个典型的0-1整数规划问题。
此处新增加约束条件:
①护士总人数限定位80人,②加班人数最少,③加班时间为2小时,④加班时段紧随在正常工作时长结束后,不休息。
在此继续采用保留的4种正常工作模式,编号同上。
因为条件④的限制,且必须满足护士工作4小时后需要休息2小时,所以只有两种加班模式符合,用start6和start7表示:
start6:
1,0,1,1,0,1,1
start7:
1,1,0,1,0,1,1
在用LINGO软件分析求解之前,先进行简单数据分析。
将总工时与护士人数列二元一次方程组,设需要加班护士人数为
,正常工作护士人数为y。
解得
=26
y=54
由此可见加班人数最少为26人,在后面的LINGO求解过程中可以此为参考。
5.2模型求解
LINGO(部分)求解结果如下(代码见附录):
本问首先对4种正常工作模式与2种加班模式用LINGO程序进行求解,得到最少加班人数为26人,并将护士排班情况绘成EXCEL表格。
(求解代码和生成见附录)。
在EXCEL表格中对所有数据按所需加班人数、0-6时段安排加班人数(A)、6-12时段安排加班人数(B),0-6时段安排开始上班人数(C)、6-12时段安排开始上班人数(D)进行排,并用不同的颜色填充单元格以示区分(最优30%)。
具体数据及分析结果见表5。
具体权衡条件如下:
1、以加班所需人数最少为优先考虑条件,在人数相同时再考虑下述条件
2、对A、B、C、D人数通过加权综合分析,具体权重计算如下:
A[0,9]B[0,25]C[6,27]D[34,52]
(1)由表格数据可知A区间长度为9,B区间长度为25,C区间长度为21,D区间长度为18
(2)0-6时段,人数越少越好,系数取负;6-12时段,人数越多越好,系数取正;
ABCD区间长度不同,做系数调整,α*9=β*25=γ*21=θ*18
(3)对ABCD不同因素,我们做如下权重分配:
A占36%,B占24%,C占24%,D占16%。
加权值M=0.36*α*A+0.24*β*B+0.24*γ*C+0.16*θ*D
3.通过分数计算结果得到最优答案,得分最高的即为最优解
结论:
在护士总数为80人前提下,考虑到护士每天加班的时间为2小时,且紧随在后一个4小时工作时段之后,中间没有休息,为保证完成工作需要至少有26名护士加班。
考虑到加班人员工作时间较长,尽可能集中安排在上午(6-12)开始上班;尽量减少加班护士在凌晨(0-6)上班的情况,同时也兼顾正常上班护士的需求,综合考量,模式1、模式2、模式3、模式6和模式7的组合为最优选择,即正常工作模式:
11011、101011、101101,加班工作模式:
1101011、1011011组合。
对应调度安排见表5:
护士值班安排表-12367(问题二)。
表6:
护士值班安排表2(问题二)
六、模型的评价与改进
6.1模型优点
①文中采用EXCEL表格处理数据,使得工作安排醒目、分析逻辑清楚;
②在解决两个问题的时候,均采用了基于工作模式的0-1整数规划方式,使得问题分析更简单;
③在权衡模式选择的时候,文中对各种因素进行加权划分,结果更科学化、人性化。
6.2模型缺点
①由于该模型完全假设在护士保证全勤工作能力相同的理想条件下,一些客观因素考虑不周;
②在假设工作模式的时候,文中假设每个护士只有一种工作模式这在事实很难做到,而且在这种情况下可能不是最优答案。
③在加权过程中,所用的加权方式有一定局限性,对客观因素菇凉不到位
6.3模型改进
(1)在模型建立过程中,为将多目标规划转化为0-1整数规划,在工作模式的选取存在偶然性。
现实中,考虑到医院自己、护士本身受其他因素的影响,我们应该尽可能结合多种情况建立更多模型求解。
(2)在求解完护士工作的规划后,应该设计一个影响护士自身出勤的因数、以及不同护士工作能力差别的因数,并在加权计算中体现
【参考文献】
[1]启源、金星、叶俊./数学模型(第四版).:
高等教育,2011.1;
[2]卓金武、必文、永生./MATLAB在数学建模中的应用(第2版).:
航空航天大学
[3]三峡大学2009年三峡大学数学建模热身赛.网络
附录
模型一:
1、五种模式组合分析
Lingo程序代码如下:
model:
!
start111011;
!
start2101011;
!
start3101101;
!
start4110101;
!
start51010101;
sets:
times/1..12/:
start1,start2,start3,start4,start5,required;
endsets
data:
!
每时段所需的最少护士数;
required=151515354040403031353020;
ole('G:
/值班.xls')=start1;
ole('G:
/值班.xls')=start2;
ole('G:
/值班.xls')=start3;
ole('G:
/值班.xls')=start4;
ole('G:
/值班.xls')=start5;
enddata
!
最小化所需安排护士数;
min=sum(times:
start1+start2+start3+start4+start5);
!
人数取整;
for(times:
gin(start1));
for(times:
gin(start2));
for(times:
gin(start3));
for(times:
gin(start4));
for(times:
gin(start5));
for(times(J):
start1(wrap(J+8,12))+
start1(wrap(J+9,12))+
start1(wrap(J+11,12))+
start1(wrap(J,12))+
start2(wrap(J+7,12))+
start2(wrap(J+9,12))+
start2(wrap(J+11,12))+
start2(wrap(J,12))+
start3(wrap(J+7,12))+
start3(wrap(J+9,12))+
start3(wrap(J+10,12))+
start3(wrap(J,12))+
start4(wrap(J+7,12))+
start4(wrap(J+8,12))+
start4(wrap(J+10,12))+
start4(wrap(J,12))+
start5(wrap(J+6,12))+
start5(wrap(J+8,12))+
start5(wrap(J+10,12))+
start5(wrap(J,12))
>=required(J));
End
运行结果:
2、四种模式下的随机组合
例:
模式3、4组合
Lingo程序代码如下:
model:
!
start3101101;
!
start4110101;
sets:
times/1..12/:
start3,start4,required;
endsets
data:
!
每时段所需的最少护士数;
required=151515354040403031353020;
ole('G:
/值班.xls')=start3;
ole('G:
/值班.xls')=start4;
enddata
!
最小化所需安排护士数;
min=sum(times:
start3+start4);
!
人数取整;
for(times:
gin(start3));
for(times:
gin(start4));
for(times(J):
start3(wrap(J+7,12))+
start3(wrap(J+9,12))+
start3(wrap(J+10,12))+
start3(wrap(J,12))+
start4(wrap(J+7,12))+
start4(wrap(J+8,12))+
start4(wrap(J+10,12))+
start4(wrap(J,12))
>=required(J));
End
运行结果:
模型二:
1、123467,6种模式综合求解
model:
!
start111011;
!
start2101011;
!
start3101101;
!
start4110101;
!
start61101011;
!
start71011011;
sets:
times/1..12/:
start1,start2,start3,start4,start6,start7,required;
endsets
data:
!
每时段所需的最少护士数;
required=151515354040403031353020;
ole('G:
/值班.xls')=start1;
ole('G:
/值班.xls')=start2;
ole('G:
/值班.xls')=start3;
ole('G:
/值班.xls')=start4;
ole('G:
/值班.xls')=start6;
ole('G:
/值班.xls')=start7;
enddata
!
最小化安排加班护士数;
min=sum(times:
start6+start7);
!
人数取整;
for(times:
gin(start1));
for(times:
gin(start2));
for(times:
gin(start3));
for(times:
gin(start4));
for(times:
gin(start6));
for(times:
gin(start7));
!
限定护士人数为80;
sum(times:
start1+start2+start3+start4+start6+start7)=80;
for(times(J):
start1(wrap(J+8,12))+
start1(wrap(J+9,12))+
start1(wrap(J+11,12))+
start1(wrap(J,12))+
start2(wrap(J+7,12))+
start2(wrap(J+9,12))+
start2(wrap(J+11,12))+
start2(wrap(J,12))+
start3(wrap(J+7,12))+
start3(wrap(J+9,12))+
start3(wrap(J+10,12))+
start3(wrap(J,12))+
start4(wrap(J+7,12))+
start4(wrap(J+8,12))+
start4(wrap(J+10,12))+
start4(wrap(J,12))+
start6(wrap(J+6,12))+
start6(wrap(J+7,12))+
start6(wrap(J+9,12))+
start6(wrap(J+11,12))+
start6(wrap(J,12))+
start7(wrap(J+6,12))+
start7(wrap(J+8,12))+
start7(wrap(J+9,12))+
start7(wrap(J+11,12))+
start7(wrap(J,12))
>=required(J));
End
运行结果:
2、组合模式随机求解
例:
1、2、3、6、7模式
Lingo程序代码如下:
model:
!
start111011;
!
start2101011;
!
start3101101;
!
start61101011;
!
start71011011;
sets:
times/1..12/:
start1,start2,start3,start6,start7,required;
endsets
data:
!
每时段所需的最少护士数;
required=151515354040403031353020;
ole('G:
/值班.xls')=start1;
ole('G:
/值班.xls')=start2;
ole('G:
/值班.xls')=start3;
ole('G:
/值班.xls')=start6;
ole('G:
/值班.xls')=start7;
enddata
!
最小化安排加班护士数;
min=sum(times:
start6+start7);
!
人数取整;
for(times:
gin(start1));
for(times:
gin(start2));
for(times:
gin(start3));
for(times:
gin(start6));
for(times:
gin(start7));
!
限定护士人数为80;
sum(times:
start1+start2+start3+start6+start7)=80;
for(times(J):
start1(wrap(J+8,12))+
start1(wr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 护士 排班 优化 问题