护士工作时间的安排
摘要
医院里每个科室都有自己的护士工作时间表。一般而言,每个科室的一个工作日分为12个两小时的时段,每个时段护士的人员要求不同。例如,在夜间只要求有很少几名护士就足够了,但在早晨为了给病人提供特殊报务,需要很多护士。
在已知某医院心脑血管科每个时段护士的人员需求量的条件下,为了确定满足其需求量的最少护士数量以及制定出其护士的工作时间表,本文通过建立护士安排方案的数学规划模型,在满足各时间段人员需求量的条件下,分别算出了最少所需护士总数及在护士人数有限的情况下最少加班人员人数,并制定了不同情况下护士工作安排的最优方案。
为保证模型计算结果的多样性和准确性,本文分别运用MATLAB和lingo做线性规划处理,通过综合比较两种软件得出的结果,我们择优制定了护士工作时间的安排方案。
针对问题一,依据已给出的各时间段人员需求量和每个护士每天工作8小时,在工作4个小时后需要休息1个小时这一假定条件,我们建立了线性规划模型,分别运用MATLAB和lingo进行求解,都得出所需护士人员总数最少为100人。具体优化方案见后文。
针对问题二,在护士总数为80的限定条件下,依据各时间段人员需求量和加班人员每天加班时间为2个小时,且紧随在一个4小时工作时段之后,加班与4小时工作时段之间没有休息这一假定,分别设各时间段开始正常上班的护士人数为、应加班的护士人数。由于题中未提及加班时间紧随在哪一个4小时工作时段之后,故在问题一的基础上应分情况讨论再建立线性规划模型,此处分两种情况讨论,分别为紧随在前一个4小时工作时段之后和紧随在后一个4小时工作时段之后。运用MATLAB和lingo对模型进行求解,我们在不同的情况下两种软件都得出所需加班的护士人员总数最少为40人。具体优化方案见后文。
关键词:护士工作安排 数学规划模型 最优方案 MATLAB lingo
1.问题重述
某医院的心脑血管科需要制定护士的工作时间表。在心脑血管科的一个工作日分为12个两小时的时段,每个时段的人员要求不同。例如,在夜间只要求有很少几名护士就足够了,但在早晨为了给病人提供特殊报务,需要很多护士。表B1列出了每个时段的人员需求量。
编号 | 时段 | 需要人数 |
1 | 0:00—2:00 | 15 |
2 | 2:00—4:00 | 15 |
3 | 4:00—6:00 | 15 |
4 | 6:00—8:00 | 35 |
5 | 8:00—10:00 | 40 |
6 | 10:00—12:00 | 40 |
7 | 12:00—14:00 | 40 |
8 | 14:00—16:00 | 30 |
9 | 16:00—18:00 | 31 |
10 | 18:00—20:00 | 35 |
11 | 20:00—22:00 | 30 |
12 | 22:00—24:00 | 20 |
问题1:(1)为满足需求最少需要多少名护士?这里假定每位护士每天工作8小时,且在工作4小时后需要休息1小时。(2)如果满足需求的排班方案不止一种,请给出你认为最合理的排班方案,并说明其理由。
问题2:目前心脑血管科只有80名护士,如果这个数目不能满足指定的需求,只能考虑让部分护士加班。如果加班,每天加班的时间为2小时,且紧随在一个4小时工作时段之后,中间没有休息。(1)请给出护士工作时间安排的方案,以使需要加班的护士数目最少。(2)如果排班(包括加班)的方案不止一种,请给出你认为最合理的排班和加班方案,并说明其理由。
2.问题分析
本题属于带有一定约束条件的数学规划问题。在满足各时间段人员需求量的条件下,需要对现有人员做出最优安排,从而达到医院的需求,同时使人员利用率最高从而降低成本。
对于问题一,本题给出了该医院心血管科各时间段的护士人员需求量,并假定每个护士每天工作8小时,且在工作4个小时后需要休息1个小时,要求我们求出满足需求的最少护士人数。若护士休息1小时后立即开始工作,则会出现护士在2小时时段间开始工作或休息,在这种情况下想要解决问题就还需要将现有的2小时时段分割为2个1小时时段,再重新确定新的每个1小时时段护士需要人数,然后再进行求解,但是如果这样处理不仅加剧了模型求解的复杂程度而且在重新确定新的每个1小时时段护士需要人数时主观臆断太强,这样会降低模型的一般性和准确性。故为降低模型的复杂性和提高准确度,我们假定每个时段为2小时且护士只在时段初开始工作,时段间不开始工作,即允许0点开始工作但是不允许1点开始工作。在该假设条件下,护士休息1个小时作休息2小时处理。故每个护士的每天的在岗时间为连续5个时段,包括4个时段的工作时间及1小时休息(做1个时段处理)。因为变量为护士人数,故所得结果为自然数。我们假定在各时间段开始上班的人数为自变量,所需人员总数为应变量,各个时段的需要人数为限制条件,建立整数规划模型,运用软件进行求解。
对于问题二,与问题一相比,增加了该医院心脑血管科现有护士为80人,加班人员每天加班时间为2个小时,且紧随在一个4小时工作时段之后,中间没有休息的限定条件。对于是否要加班,要先看第一题的结果,若大于80人,则必须有人加班,若小于80人,则反之。此时,我们假定在各时间段开始正常上班的人数以及开始上班且需要加班的人数为自变量,所需加班人员总数为应变量,在限定条件下,建立整数规划模型,运用软件进行求解。
3.符号说明
1. :为满足需求所需要的护士人员总数;
2. :需要加班的护士人员总数;
3. :各个时段需要的人数;
4.
5. :第
6. :第
4.模型假设
1. 正常上班时,每个护士每天工作8小时,且在工作4个小时后需要休息1个小时;
2. 护士只在时段初开始工作,时段间不开始工作,即允许0点开始工作但是不允许1点开始工作;
3. 在假设2下,将护士休息1小时作1个时段处理;
4. 加班人员每天加班时间为2个小时,且紧随在一个4小时工作时段之后,中间没有休息。
5.建模过程
问题一的建模与求解
本题给出了该医院心血管科各时间段的护士人员需求量,并假定每个护士每天工作8小时,且在工作4个小时后需要休息1个小时,要求我们求出满足需求的最少护士人数。假定护士只在时段初开始工作,时段间不开始工作,即允许0点开始工作但是1点不允许开始工作,故在每个时段为2小时的条件下,护士休息1个小时作休息了两小时处理。故每个护士的每天的在岗时间为连续5个时段,包括4个时段的工作时间及一小时休息(作一个时段处理)。因为变量为护士人数,所以所得结果为自然数。我们假定在各时间段开始上班的人数为自变量,所需人员总数为应变量,各个时段的需要人数为限制条件,建立数学规划模型,运用软件进行求解。
模型建立
为满足需求所需要的护士人员总数等于各个时段开始上班的护士人数之和,即:
以第一个时段即0:00-2:00为例,在该时段工作的护士分别为第9、10、12、1时段开始上班的护士。为满足该时段人员需求,则应满足有以下条件:
其他时段与第一个时段同理。故可建立数学规划模型如下:
上述式子中为时,为.
模型求解
由上述结果可知,为满足需求所需要的护士人员总数最少为100人,但是所求得的各个时段开始上班的护士人数存在小数,出现这种情况无法避免。若四舍五入取值,虽然能得到正确有效的结果,但是需进行检验,该过程工作量大且较麻烦。于是考虑再用lingo编程求解。
由上述结果可知,为满足需求所需要的护士人员总数最少为100人,与用MATLAB求得的结果相同,故可确定上述结果是正确的。且由上述结果可知各个时段最优的护士排班方案为:
编号 | 时段 | 该时段开始上班的护士人数 |
1 | 0:00—2:00 | 23 |
2 | 2:00—4:00 | 4 |
3 | 4:00—6:00 | 12 |
4 | 6:00—8:00 | 0 |
5 | 8:00—10:00 | 13 |
6 | 10:00—12:00 | 11 |
7 | 12:00—14:00 | 17 |
8 | 14:00—16:00 | 0 |
9 | 16:00—18:00 | 7 |
10 | 18:00—20:00 | 0 |
11 | 20:00—22:00 | 12 |
12 | 22:00—24:00 | 0 |
模型结果分析
该模型得出的结果经检验完全符合题意,故接受。
问题二的建模与求解
对于问题二,与问题一相比,增加了该医院心脑血管科现有护士为80人,加班人员每天加班时间为2个小时,且紧随在一个4小时工作时段之后,中间没有休息的限定条件。故每个护士的每天的在岗时间为连续6个时段,包括4个时段的工作时间,1个时段的加班时间及一小时休息(作一个时段处理)。对于是否要加班,要先看第一题的结果,若大于80人,则必须有人加班,若小于80人,则反之。由于第一问求出为满足需求最少需要护士100人,故必须有人加班。
我们假定在各时间段开始正常上班的人数以及开始上班且需要加班的人数为自变量,所需加班人员总数为应变量,在限定条件下,建立数学规划模型,运用软件进行求解。
模型建立
需要加班的护士人员总数等于在各个时间段开始上班且需要加班的护士人数之和,即:
由于题中未提及加班时间紧随在哪一个4小时工作时段之后,故在问题一的基础上应分情况讨论再建立线性规划模型,此处分两种情况讨论,分别为加班时间紧随在前一个4小时工作时段之后和加班时间紧随在后一个4小时工作时段之后。下面分情况讨论建立模型。
①加班时间紧随在前一个4小时工作时段之后
以第一个时段即0:00-2:00为例,在该时段工作的护士分别为第9、10、12、1时段开始正常上班的护士和在第1、12、11、9、8时段开始工作且需要加班的护士。为满足该时段人员需求,则应满足以下条件:
其他时段与第一个时段同理。故可建立数学规划模型如下:
①加班时间紧随在后一个4小时工作时段之后
以第一个时段即0:00-2:00为例,在该时段工作的护士分别为第9、10、12、1时段开始正常上班的护士和在第1、12、10、9、8时段开始工作且需要加班的护士。为满足该时段人员需求,则应满足以下条件:
其他时段与第一个时段同理。故可建立数学规划模型如下:
模型求解
紧随在前一个4小时工作时段之后
由上述结果可知,需要加班的护士人员总数最少为40人,但是所求得的各个时间段开始上班且需要加班的护士人数存在小数,出现这种情况无法避免。若四舍五入取值,虽然能得到正确有效的结果,但是需进行检验,该过程工作量大且较麻烦。于是考虑再用lingo编程求解。
由上述结果可知,需要加班的护士人员总数最少为40人,与用MATLAB求得的结果相同,故可确定上述结果是正确的。且由上述结果可知各个时段最优的护士排班方案为:
编号 | 时段 | 该时段开始正常上班的护士人数 | 该时段开始上班且需要加班的护士人数 |
1 | 0:00—2:00 | 0 | 0 |
2 | 2:00—4:00 | 0 | 0 |
3 | 4:00—6:00 | 7 | 0 |
4 | 6:00—8:00 | 0 | 11 |
5 | 8:00—10:00 | 9 | 8 |
6 | 10:00—12:00 | 3 | 2 |
7 | 12:00—14:00 | 20 | 0 |
8 | 14:00—16:00 | 0 | 0 |
9 | 16:00—18:00 | 0 | 0 |
10 | 18:00—20:00 | 0 | 2 |
11 | 20:00—22:00 | 1 | 5 |
12 | 22:00—24:00 | 0 | 12 |
紧随在后一个4小时工作时段之后
由上述结果可知,需要加班的护士人员总数最少为40人,但是所求得的各个时间段开始上班且需要加班的护士人数存在小数,出现这种情况无法避免。若四舍五入取值,虽然能得到正确有效的结果,但是需进行检验,该过程工作量大且较麻烦。于是考虑再用lingo编程求解。
由上述结果可知,需要加班的护士人员总数最少为40人,与用MATLAB求得的结果相同,故可确定上述结果是正确的。且由上述结果可知各个时段最优的护士排班方案为:
编号 | 时段 | 该时段开始正常上班的护士人数 | 该时段开始上班且需要加班的护士人数 |
1 | 0:00—2:00 | 0 | 14 |
2 | 2:00—4:00 | 0 | 0 |
3 | 4:00—6:00 | 0 | 0 |
4 | 6:00—8:00 | 6 | 0 |
5 | 8:00—10:00 | 5 | 1 |
6 | 10:00—12:00 | 10 | 10 |
7 | 12:00—14:00 | 14 | 0 |
8 | 14:00—16:00 | 5 | 0 |
9 | 16:00—18:00 | 0 | 0 |
10 | 18:00—20:00 | 0 | 0 |
11 | 20:00—22:00 | 0 | 1 |
12 | 22:00—24:00 | 0 | 14 |
模型结果分析
需要加班的护士人员总数最少为40人。故猜测护士加班时间无论紧随在哪一个4小时工作时段之后对结果都无影响。
又该模型得出的结果经检验完全符合题意,故可接受。
6.模型的综合评价
模型的优点
本文所建立的模型操作简单,准确性高,贴合实际,能够完美解决题目所提出的问题。
模型的缺点
在运用该模型求解第二题时,我们默认所有参与加班的护士都按同一种方式加班,即要么全部紧随在前一个4小时工作时段之后加班,要么全部紧随在后一个4小时工作时段之后加班。但是实际中这种默认情况一般不存在,常常是有的护士按前一种方式加班,有的护士按后一种方式加班。模型在这个问题上有待改进。
模型的改进
在问题二中加入三个自变量,分别为各时间段开始正常上班的人数、开始上班且在前一个4小时工作时段加班的人数、开始上班且在后一个4小时工作时段加班的人数。分析方法与原模型相同。
模型的推广
本文所建立的模型除了可以解决护士工作时间安排的问题,还可以解决其他类似的排班问题。
7.参考文献
[1] 胡运权,《运筹学教程》,清华大学出版社,
8.附录
:
A=[-1 0 0 0 0 0 0 0 -1 -1 0 -1;
-1 -1 0 0 0 0 0 0 0 -1 -1 0;
0 -1 -1 0 0 0 0 0 0 0 -1 -1;
-1 0 -1 -1 0 0 0 0 0 0 0 -1;
-1 -1 0 -1 -1 0 0 0 0 0 0 0 ;
0 -1 -1 0 -1 -1 0 0 0 0 0 0 ;
0 0 -1 -1 0 -1 -1 0 0 0 0 0 ;
0 0 0 -1 -1 0 -1 -1 0 0 0 0 ;
0 0 0 0 -1 -1 0 -1 -1 0 0 0 ;
0 0 0 0 0 -1 -1 0 -1 -1 0 0 ;
0 0 0 0 0 0 -1 -1 0 -1 -1 0 ;
0 0 0 0 0 0 0 -1 -1 0 -1 -1 ];
b=[-15;-15;-15;-35;-40;-40;-40;-30;-31;-35;-30;-20];
f=[1 1 1 1 1 1 1 1 1 1 1 1];
x=[0 0 0 0 0 0 0 0 0 0 0 0];
[x,fval]=linprog(f,A,b,[],[],x,[])
:
Min=x1+x2+x3+x4+x5+x6+x7+x8+x9+x10+x11+x12;
x1+x12+x9+x10>=15;
x2+x1+x10+x11>=15;
x3+x2+x11+x12>=15;
x4+x3+x12+x1>=35;
x5+x4+x1+x2>=40;
x6+x5+x2+x3>=40;
x7+x6+x3+x4>=40;
x8+x7+x4+x5>=30;
x9+x8+x5+x6>=31;
x10+x9+x6+x7>=35;
x11+x10+x7+x8>=30;
x12+x11+x8+x9>=20;
@gin(x1);
@gin(x2);
@gin(x3);
@gin(x4);
@gin(x5);
@gin(x6);
@gin(x7);
@gin(x8);
@gin(x9);
@gin(x10);
@gin(x11);
@gin(x12);
Matlab:
A=[-1 0 0 0 0 0 0 0 -1 -1 0 -1 -1 0 0 0 0 0 0 -1 -1 0 -1 -1;
-1 -1 0 0 0 0 0 0 0 -1 -1 0 -1 -1 0 0 0 0 0 0 -1 -1 0 -1;
0 -1 -1 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 0 0 0 0 0 0 -1 -1 0;
-1 0 -1 -1 0 0 0 0 0 0 0 -1 0 -1 -1 -1 0 0 0 0 0 0 -1 -1;
-1 -1 0 -1 -1 0 0 0 0 0 0 0 -1 0 -1 -1 -1 0 0 0 0 0 0 -1;
0 -1 -1 0 -1 -1 0 0 0 0 0 0 -1 -1 0 -1 -1 -1 0 0 0 0 0 0;
0 0 -1 -1 0 -1 -1 0 0 0 0 0 0 -1 -1 0 -1 -1 -1 0 0 0 0 0;
0 0 0 -1 -1 0 -1 -1 0 0 0 0 0 0 -1 -1 0 -1 -1 -1 0 0 0 0;
0 0 0 0 -1 -1 0 -1 -1 0 0 0 0 0 0 -1 -1 0 -1 -1 -1 0 0 0;
0 0 0 0 0 -1 -1 0 -1 -1 0 0 0 0 0 0 -1 -1 0 -1 -1 -1 0 0;
0 0 0 0 0 0 -1 -1 0 -1 -1 0 0 0 0 0 0 -1 -1 0 -1 -1 -1 0;
0 0 0 0 0 0 0 -1 -1 0 -1 -1 0 0 0 0 0 0 -1 -1 0 -1 -1 -1;
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ];
b=[-15;-15;-15;-35;-40;-40;-40;-30;-31;-35;-30;-20;80];
f=[0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1];
x=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
[x,fval]=linprog(f,A,b,[],[],x,[])
Min=x21+x22+x23+x24+x25+x26+x27+x28+x29+x210+x211+x212;
x11+x112+x19+x110+x21+x212+x211+x29+x28>=15;
x12+x11+x110+x111+x22+x21+x212+x210+x29>=15;
x13+x12+x111+x112+x23+x22+x21+x211+x210>=15;
x14+x13+x112+x11+x24+x23+x22+x212+x211>=35;
x15+x14+x11+x12+x25+x24+x23+x21+x212>=40;
x16+x15+x12+x13+x26+x25+x24+x22+x21>=40;
x17+x16+x13+x14+x27+x26+x25+x23+x22>=40;
x18+x17+x14+x15+x28+x27+x26+x24+x23>=30;
x19+x18+x15+x16+x29+x28+x27+x25+x24>=31;
x110+x19+x16+x17+x210+x29+x28+x26+x25>=35;
x111+x110+x17+x18+x211+x210+x29+x27+x26>=30;
x112+x111+x18+x19+x212+x211+x210+x28+x27>=20;
x11+x12+x13+x14+x15+x16+x17+x18+x19+x110+x111+x112+x21+x22+x23+x24+x25+x26+x27+x28+x29+x210+x211+x212<=80;
@gin(x11);
@gin(x12);
@gin(x13);
@gin(x14);
@gin(x15);
@gin(x16);
@gin(x17);
@gin(x18);
@gin(x19);
@gin(x110);
@gin(x111);
@gin(x112);
@gin(x21);
@gin(x22);
@gin(x23);
@gin(x24);
@gin(x25);
@gin(x26);
@gin(x27);
@gin(x28);
@gin(x29);
@gin(x210);
@gin(x211);
@gin(x212);
Matlab:
A=[-1 0 0 0 0 0 0 0 -1 -1 0 -1 -1 0 0 0 0 0 0 -1 -1 -1 0 -1;
-1 -1 0 0 0 0 0 0 0 -1 -1 0 -1 -1 0 0 0 0 0 0 -1 -1 -1 0;
0 -1 -1 0 0 0 0 0 0 0 -1 -1 0 -1 -1 0 0 0 0 0 0 -1 -1 -1;
-1 0 -1 -1 0 0 0 0 0 0 0 -1 -1 0 -1 -1 0 0 0 0 0 0 -1 -1;
-1 -1 0 -1 -1 0 0 0 0 0 0 0 -1 -1 0 -1 -1 0 0 0 0 0 0 -1;
0 -1 -1 0 -1 -1 0 0 0 0 0 0 -1 -1 -1 0 -1 -1 0 0 0 0 0 0;
0 0 -1 -1 0 -1 -1 0 0 0 0 0 0 -1 -1 -1 0 -1 -1 0 0 0 0 0;
0 0 0 -1 -1 0 -1 -1 0 0 0 0 0 0 -1 -1 -1 0 -1 -1 0 0 0 0;
0 0 0 0 -1 -1 0 -1 -1 0 0 0 0 0 0 -1 -1 -1 0 -1 -1 0 0 0;
0 0 0 0 0 -1 -1 0 -1 -1 0 0 0 0 0 0 -1 -1 -1 0 -1 -1 0 0;
0 0 0 0 0 0 -1 -1 0 -1 -1 0 0 0 0 0 0 -1 -1 -1 0 -1 -1 0;
0 0 0 0 0 0 0 -1 -1 0 -1 -1 0 0 0 0 0 0 -1 -1 -1 0 -1 -1;
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ];
b=[-15;-15;-15;-35;-40;-40;-40;-30;-31;-35;-30;-20;80];
f=[0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1];
x=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
[x,fval]=linprog(f,A,b,[],[],x,[])
Lingo:
Min=x21+x22+x23+x24+x25+x26+x27+x28+x29+x210+x211+x212;
x11+x112+x19+x110+x21+x212+x210+x29+x28>=15;
x12+x11+x110+x111+x22+x21+x211+x210+x29>=15;
x13+x12+x111+x112+x23+x22+x212+x211+x210>=15;
x14+x13+x112+x11+x24+x23+x21+x212+x211>=35;
x15+x14+x11+x12+x25+x24+x22+x21+x212>=40;
x16+x15+x12+x13+x26+x25+x23+x22+x21>=40;
x17+x16+x13+x14+x27+x26+x24+x23+x22>=40;
x18+x17+x14+x15+x28+x27+x25+x24+x23>=30;
x19+x18+x15+x16+x29+x28+x26+x25+x24>=31;
x110+x19+x16+x17+x210+x29+x27+x26+x25>=35;
x111+x110+x17+x18+x211+x210+x28+x27+x26>=30;
x112+x111+x18+x19+x212+x211+x29+x28+x27>=20;
x11+x12+x13+x14+x15+x16+x17+x18+x19+x110+x111+x112+x21+x22+x23+x24+x25+x26+x27+x28+x29+x210+x211+x212<=80;
@gin(x11);
@gin(x12);
@gin(x13);
@gin(x14);
@gin(x15);
@gin(x16);
@gin(x17);
@gin(x18);
@gin(x19);
@gin(x110);
@gin(x111);
@gin(x112);
@gin(x21);
@gin(x22);
@gin(x23);
@gin(x24);
@gin(x25);
@gin(x26);
@gin(x27);
@gin(x28);
@gin(x29);
@gin(x210);
@gin(x211);
@gin(x212);
本文来源:https://www.2haoxitong.net/k/doc/6747c09ca36925c52cc58bd63186bceb18e8ed88.html
文档为doc格式