护士排班优化模型
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数模第三次培训论文
论文题目:护士排班优化模型
姓名1:李辉树学号:******** 专业:信计专业姓名1:彭记译学号:******** 专业:信计专业姓名1:游美玲学号:******** 专业:信计专业
2011 年7月14日
护士排班优化模型
摘要
本文将根据该题护士排班条件,以满足各班次护士量需求同时达到数量最少为目标,建立了护士排班优化模型,用Lingo 软件求解得到具体排班方案。
对于问题一:本文建立数据规划模型,固定每人该天排两个班次,且两个班次不连续,采用逐步累加法得出当天每个班次签到人数表达式,代入Lingo 软件求解得出每天该科所需的最少护士数为145人。
经排班检验可知该值为最小值。
对于问题二:本文以一星期为周期,综合分析每个班次排班要求及对应的最少护士数,制定最少人数计算公式即:x 6*7,将结果结合其它排班规定进行检验得出最少签约护士数为210人。
对于问题三:本文建立人与班次0-1矩阵,以第i 号人为横坐标,对应每天每个班次为纵坐标。
将护士排班规定转化为矩阵约束性条件,将有关数据转化为Lingo 语句代入软件求解,得到具体排班方案见附表一。
其中:
条件一,两个班次不连上即:
(,)(,1)1,1,2,...210,1,2,...,41z i j z i j i j ++≤==;
条件二,第一天排班在小夜班的护士,第二天在时间段06:00-10:00不排班即:
(,6*1)(,6*1)1,1,2,...,210,1,2,...,6z i j z i j i j -++≤==;
条件三,大夜班每个星期最多只排一次,且第二天必须休息即:
6
12*(,6*)(,6*)2,1,2,...,210,1,2,...,6k z i j z i j k i j =++≤==∑。
对于问题四:本文建立人与护师0-1矩阵,将问题三中的矩阵与之连接,对应矩阵值相乘,据题意得到不等式关系,再利用累加法,取得人与护师0-1矩阵值之和的最小值即为最少需要量。
经Lingo 程序验证知,最少需要量为84人。
本文模型将护士排班条件数学化,建立的矩阵模型求解,最后通过矩阵结果反映实际排班情况,使人易理解,同时大大降低了求解难度。
关键词:Lingo 软件;数据规划模型;逐步累加法;0-1矩阵
一、问题重述
某医院某科室每日至少需要下列数量的护士:
(1)每天至多工作8个小时,即上两个班次,两个班次不连上;
(2)第一天排班在时间段22:00-02:00(小夜班)的护士,第二天在时间段06:00-10:00不排班;
(3)时间段02:00-06:00(大夜班)每个星期最多只排一次,且第二天必须休息;
(4)每个星期每位护士工作40小时;
建立数学模型满足该医院各班所需要的护士数,解决如下问题:
问题1:每天该科所需的最少护士数?
问题2:以一个星期为周期,该科最少需签约多少护士?
问题3:以一个星期为周期,试给出具体的排班方案,该方案是否唯一?
问题4:根据医院要求,每班次上班的护士中护师以上职称的所占比例不低于40%,求在护士数最少的条件下,最少需要多少护师职称以上(包括护师职称)的护士才能满足院方对职称的要求。
(注:护士职称评定共分五级别,分别是:护士、护师、主管护师、副主任护士、主任护师。
)
二、问题分析
通过对该题的仔细理解得知:本题需根据该题护士排班规定,以满足各班次护士量需求同时达到数量最少为目标,建立最优的护士排班模型。
以下将对其中要点进行分析:
一、分析最优护士数
对医院而言,每个班次护士数越多越好,签约的护士数越少越好。
又根据国家工作时间安排:每位护士每个星期工作40小时,同时护士排班需科学安排以适应生理需求,故综合得知:最优护士数为在达到每个班次最少需要数、满足该
院护士排班额外规定的基础上,取最小数。
对于求最优护师以上职称的护士,可建立人与护师0-1矩阵,将问题三中的矩阵与之连接,类似于上述求法得出最小数。
二、最优排班方案
以一星期为周期,最优排班方案即:给满足题意的最少护士数安排一星期的具体值班情况,确定其满足每天每个班次都有足够护士在值班。
由于数据量庞大,则需建立模型,将排班条件转化为Lingo语句,用Lingo软件输出结果。
在求解最优排班方案时,本文需建立人与班次0-1矩阵,接着将排班条件转化为正确Lingo语句,运行从而得到结果。
三、模型假设
1、假设0-1矩阵中护士在对应的班次排班了为1,没排班为0;
2、假设问题一中护士都排两次班;
3、假设每个班次签到的护士不一定在该班次上班。
4、假设护士都不缺勤,允许自由换班。
四、符号说明
五、模型建立与求解
5.1 问题一
5.1.1 建模思路
以一天为单位,固定每人该天排两个班次,且两个班次不连续,本文建立数据规划模型,采用逐步累加法得出表达式:对于每个班次,该班次签到人数、上个班次剩余没有签到的人数及上面相隔一个班次的班次签到人数之和需大于(或等于)该班次所需最少护士数,则每天该科所需的最少护士数为每个班次签到人数之和的最小值。
在Lingo 软件编写对应程序即可求解。
5.1.2 模型建立
分别对每个班次分析得到目标函数为z =123456x x x x x x +++++,每个班次的不等式如下:
第一个班次签到人数大于(或等于)60:
601≥x ;
第二个班次第一次剩余与第二次签到人数大于(或等于)70:
706021≥+-x x ;
第三个班次第一次签到、第二次剩余及第三次签到人数大于(或等于)60:
6070603121≥+--++x x x x ;
第四个班次第二次签到、第三次剩余及第四次签到人数大于(或等于)50:
50607060431212≥+-+--+++x x x x x x ;
第五个班次第三次签到、第四次剩余及第五次签到人数大于(或等于)20:
205060706054312123≥+-+-+--++++x x x x x x x x ;
第六个班次第四次签到、第五次剩余及第六次签到人数大于(或等于)30: 3020506070606543121234≥+-+-+-+--+++++x x x x x x x x x x 。
5.1.3 模型求解
将上述语句转化为Lingo 语句代入编程得:min =145。
5.1.4 模型检验
将一天所需最少护士数相加除以二可得结果为未考虑同一人排相邻两个班次的情况即最小值,所得结果为145,与min =145相同,所以所得值为每天该科所需的最少护士数。
5.2 问题二
5.2.1 建模思路
本文以一星期为周期,根据每个星期每位护士工作40小时条件得到最少人数为:(60+70+60+50+30+20)*4/40=203人,据大夜班每个星期最多只排一次,且第二天必须休息条件可得最少人数为:30*7=210,由此可见210较203更符合题意,又210人数符合其它条件,故;以一个星期为周期,该科最少需签约护士数为210。
然后将此结果代入问题三中的模型中进行检验,若当人数值为209,输出结果有误,即排班不能排满;当人数值为210,输出每人排班结果时,则说
明结果属实。
5.2.2 模型建立
根据条件(3)可得:
61*7x p =;
根据条件(4)可得:
106
12∑==i i
x p 。
5.2.3 模型求解
通过求解比较可得:以一个星期为周期,该科最少需签约护士数为210。
5.2.4 模型检验
将护士数210代入第三问的模型中进行检验发现:当人数值为209,输出结果有误,即排班不能排满;当人数值为210,输出每人排班结果。
所以最少签约护士为210。
5.3 问题三
5.3.1 建模思路
本文建立人与班次0-1矩阵,以第i 号人为横坐标,对应每天每个班次为纵坐标,护士在对应的班次排了班矩阵值为1,没排班为0。
将护士排班规定一一转化为矩阵约束性条件,使用Lingo 线性语句表示,将所有语句代入软件运行得到人与班次0-1矩阵中所有值,将数据调出,用Excel 软件结合1为排了班,0为没排班的含义进行处理,可得到每个人的具体排班方案。
5.3.2 模型建立
每个排班人数应大于(或等于)该班所需最少护士数:
j i w
j i z ≥∑=),(2101;
由条件(1)可得:
2)6,(6
1≤+∑=a a k i z ;
若1),(=j i z 时,0)1,(=+j i z ;
由条件(2)可得:
若1)16,(=-a i z 时,0)16,(=+a i z ;
由条件(3)可得:
1)6,(7
1≤∑=a a i z ;
若1)6,(=+a k i z 时,0)66,(6
1=++∑=a a k i z ;
由条件(4)可得:
10)66,(716
1=-+∑∑==k a a k i z 。
5.3.3 模型求解
将所有约束条件使用Lingo 线性语句表示,将所有语句代入软件运行得到结果见附表一。
5.3.4 模型检验
本模型非常巧妙地建立0-1矩阵,解决了具体排版方案设计,方便、快捷、易懂,所以此类方法可以推广到生活中许多类似的问题上,通用性强。
5.4 问题四
5.4.1 建模思路
在问题三人与班次0-1矩阵的基础上,建立人与护师0-1矩阵,由于两者的约束条件一致,则将两个矩阵连立,对应矩阵值相乘:若两者都为1,乘积为1,即护师在该处排了班;若两者不全为1,结果都为0,即护师在该处未排班。
进而得到新的矩阵,该矩阵每列之和需大于(或等于)该班所需最少护师数,本问题所求最少护师数为:在该时的最小矩阵值之和。
5.4.2 模型建立
经分析知:目标函数为
∑==210
1),(min i j i q ;
每个排班人数应大于(或等于)该班所需最少护士数:
j i v
j i z i q ≥∑=),(*)(2101;
5.4.3 模型求解
在保持问题三约束条件语句不变,加上上述条件与目标函数代入软件运行得到结果见附表一。
5.4.4 模型检验
将护师数84代入第三问的模型中进行检验发现:当人数值为83,输出结果有误,即排班不能排满;当人数值为210,输出每人排班结果和目标数值。
所以最少签约护师为84。
六、模型评价与推广
该模型的建立结合了数学知识逐步累加法与等效法,以及充分展示了Lingo 软件功能的实用性。
解决每个人的具体排班方案设计,同时得到了最优护士数。
6.1 模型的优点:
(1)本模型建立过程中使用的数学方法既实用又易理解。
(2)本文巧妙地建立了人与班次0-1矩阵,将问题大大的简易化,使得模型能够快速求解。
(3)在Lingo编程过程中,本文巧妙地将条件用线性语句表示,从而加快运行速度,得到合理结果。
6.2 模型的缺点:
在求解第一问时,运用的方法不适应数据量较多的情况,有局限待改进。
6.3 模型的推广:
(1)本模型准确性较高,可以应用到学校、工厂等其他员工排班问题上。
(2)根据实际情况,进一步加强约束条件的严谨性,使得模型更加紧密,结果会得到进一步优化。
七、参考文献
[1] 沈吟东,陈名晖,邓婕,《利用矩阵向量化变换求解护士排班问题》,2008。
[2] 姜启源,谢金星,数学建模案例选集,北京:高等教育出版社,2006。
[3] 袁新生等,《Lingo和Excel在数学建模中的应用》,北京:科学出版社,2007。
[4] 任小英,赵光红等,护士对排班方式评价的调查与分析[J],《护理学杂志》,2006年第10期:20。
[5]秦玉霞,李晓星,牛娟,互补增值原理在护士排班中的运用[J],《临床护理杂志》2002年第1期:5-6。
附录
第一问:
min=x1+x2+x3+x4+x5+x6;
x1>60;
x1-60+x2>70;
x1+x2+x1-60-70+x3>60;
x2+x1+x2+x1-60-70+x3-60+x4>50;
x3+x2+x1+x2+x1-60-70+x3-60+x4-50+x5>20;
x4+x3+x2+x1+x2+x1-60-70+x3-60+x4-50+x5-20+x6>30;
运行结果:
Global optimal solution found.
Objective value: 145.0000
Infeasibilities: 0.000000
Total solver iterations: 1
Variable Value Reduced Cost
X1 145.0000 0.000000
X2 0.000000 0.000000
X3 0.000000 0.000000
X4 0.000000 0.000000
X5 0.000000 0.5000000
X6 0.000000 0.5000000
第三问:
model:
sets:
person/1..210/;
ban/1..42/:a;
banban/1..41/;
shelie/1..7/;
she/1..6/;
link(person,ban):z;
endsets
data:
a=60,70,60,50,20,30,60,70,60,50,20,30,60,70,60,50,20,30,60,70,60,50,2 0,30,60,70,60,50,20,30,60,70,60,50,20,30,60,70,60,50,20,30;
enddata
@for(person(i):@sum(she(j):z(i,j))<2);
@for(person(i):@sum(she(j):z(i,6+j))<2);
@for(person(i):@sum(she(j):z(i,12+j))<2);
@for(person(i):@sum(she(j):z(i,18+j))<2);
@for(person(i):@sum(she(j):z(i,24+j))<2);
@for(person(i):@sum(she(j):z(i,30+j))<2);
@for(person(i):@sum(she(j):z(i,36+j))<2);
@for(person(i):@for(banban(j):z(i,j)+z(i,j+1)<1));
@for(person(i):@sum(shelie(j):z(i,6*j))<1);
@for(person(i):@for(she(j):2*z(i,6*j)+(z(i,6*j+1)+z(i,6*j+2)+z(i,6*j+ 3)+z(i,6*j+4)+z(i,6*j+5)+z(i,6*j+6))<2));
@for(person(i):@for(she(j):z(i,6*j-1)+z(i,6*j+1)<1));
@for(ban(j):@sum(person(i):z(i,j))>a(j));
@for(person(i):@sum(ban(j):z(i,j))=10);
@for(link(i,j):@bin(z(i,j)));
end
(运行结果见附表二)
第四问:
model:
sets:
person/1..210/:q;
ban/1..42/:a;
banban/1..41/;
shelie/1..7/;
she/1..6/;
link(person,ban):z;
endsets
data:
a=60,70,60,50,20,30,60,70,60,50,20,30,60,70,60,50,20,30,60,70,60,50,2 0,30,60,70,60,50,20,30,60,70,60,50,20,30,60,70,60,50,20,30;
enddata
min=@sum(person(i):q(i));
@for(person(i):@sum(she(j):z(i,j))<2);
@for(person(i):@sum(she(j):z(i,6+j))<2);
@for(person(i):@sum(she(j):z(i,12+j))<2);
@for(person(i):@sum(she(j):z(i,18+j))<2);
@for(person(i):@sum(she(j):z(i,24+j))<2);
@for(person(i):@sum(she(j):z(i,30+j))<2);
@for(person(i):@sum(she(j):z(i,36+j))<2);
@for(person(i):@for(banban(j):z(i,j)*z(i,j+1)=0));
@for(person(i):@sum(shelie(j):z(i,6*j))<1);
@for(person(i):@for(she(j):z(i,6*j)*(z(i,6*j+1)+z(i,6*j+2)+z(i,6*j+3) +z(i,6*j+4)+z(i,6*j+5)+z(i,6*j+6))=0));
@for(person(i):@for(she(j):z(i,6*j-1)*z(i,6*j+1)=0));
@for(ban(j):@sum(person(i):z(i,j))>a(j));
@for(person(i):@sum(ban(j):z(i,j))=10);
@for(link(i,j):@bin(z(i,j)));
@for(person(i):@bin(q(i)));
@for(ban(j):@sum(person(i):@floor((q(i)+z(i,j))/2))>@sum(person(i):z( i,j))*0.4);
end
(运行结果见附表三)
10。