SlideShare a Scribd company logo
1 of 35
2009 高教社杯全国大学生数学建模竞赛

                       承     诺   书

    我们仔细阅读了中国大学生数学建模竞赛的竞赛规则.
    我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括电话、电子邮件、网上
咨询等)与队外的任何人(包括指导教师)研究、讨论与赛题有关的问题。
    我们知道,抄袭别人的成果是违反竞赛规则的, 如果引用别人的成果或其他公开的
资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正文引用处和
参考文献中明确列出。
    我们郑重承诺,严格遵守竞赛规则,以保证竞赛的公正、公平性。如有违反竞赛规则
的行为,我们将受到严肃处理。


    我们参赛选择的题号是(从 A/B/C/D 中选择一项填写):           B
    我们的参赛报名号为(如果赛区设置报名号的话):
    所属学校(请填写完整的全名):                         东北大学
    参赛队员 (打印并签名) :1.             杨柳
           2.          岳坤
           3.          庞和明
    指导教师或指导教师组负责人      (打印并签名):             王琪


                                      日期:    2009 年 9   月   14
日




    赛区评阅编号(由赛区组委会评阅前进行编号):
2009 高教社杯全国大学生数学建模竞赛

              编 号 专 用 页


     赛区评阅编号(由赛区组委会评阅前进行编号):



     赛区评阅记录(可供赛区评阅时使用):

评
阅
人


评
分


备
注




     全国统一编号(由赛区组委会送交全国前编号):




    全国评阅编号(由全国组委会评阅前进行编号)
目录
1 问题的提出 ...................................................3
2 问题的分析....................................................3
3 模型假设......................................................4
4 符号系统......................................................5
5 病床安排模型评价指标体系的建立(问题一)......................6
 5.1 床位使用评价指标.........................................................................................................................................6
 5.2 病人满意度评价指标.....................................................................................................................................7
 5.3 用评价指标体系对原有床位安排模型进行评价.........................................................................................8

  6 病床安排模型的建立与评价(问题二)..........................8
 6.1 医院就诊流程分析.........................................................................................................................................8
    6.1.1 手术科室病人诊疗的常规运行流程.....................................................................................................8
    6.1.2 对诊疗流程的主要环节进行描述.........................................................................................................9
    6.1.3 医院医学条件及制度安排分析...........................................................................................................10
 6.2 排队论相关知识...........................................................................................................................................10
    6.2.1 排队系统...............................................................................................................................................10
    6.2.2 顾客到达时间间隔分布和服务时间分布............................................................................................11
 6.3 模型一:建立基于 PFCFS 排队算法的病床安排模型..............................................................................12
    6.3.1 模型条件...............................................................................................................................................12
    6.3.2 模型描述与分析...................................................................................................................................12
    6.3.3 床位安排 PFCFS 算法描述..................................................................................................................15
 6.4 床位安排模型仿真.......................................................................................................................................16

7 病人住院时间预测模型(问题三)...............................17
 7.1 模型二:基于神经网络的病人住院时间预测模型...................................................................................17
    7.1.1 神经网络模型的确定...........................................................................................................................17
    7.1.2 模型二建立与求解...............................................................................................................................18
 7.2 基于模型一计算机仿真的病人住院时间预测方法...................................................................................19

     8 周末不安排手术情况下的床位安排模型(问题四)..............20
 8.1 问题分析.......................................................................................................................................................20
 8.2 模型三:增加手术时间约束的病床安排模型...........................................................................................20
    8.2.1 情况 1 下的模型改进............................................................................................................................21
    8.2.2 情况 2 下的模型改进............................................................................................................................21
    8.2.3 情况 3 下的模型改进............................................................................................................................21
 8.3 仿真结果及评价...........................................................................................................................................22

     9 病床比例分配模型的建立与求解(问题五)...................22
附录..........................................................26
 附录 1..................................................................................................................................................................26
 附录 2..................................................................................................................................................................32

10 模型改进方向...............................................23
 10.1 考虑病人个人满意度评价.........................................................................................................................23

                                                                                  1
10.2 考虑拒收及病人因为等待队列太长离开排队系统.................................................................................23
 10.3 考虑医院因满负荷运作产生的负面效应.................................................................................................24
 10.4 考虑医院增加应急预案的情况.................................................................................................................24

参考文献 .....................................................25



                         医院眼科的最优病床安排方案的研究与求解

                                                                 摘要

    本文首先建立一个病床安排模型评价指标体系,从医院和病人两个方面来考察指
标的选取,选取床位负荷表征指标—平均使用率 Y1 、床位利用效率表征指标—平均周转
次数 Y2 和病人满意度表征指标—平均等待时间 Y3 来评价病床安排方案的优劣,并采用
归一化分析的思想,建立了全面合理的病床安排方案评价体系。                      用该评价指标对题中给
出的数据进行分析,得出优化前原平均使用率、                   平均周转次数和平均等待时间指标分别
为 100%、8.44 和 10.50。
    第二问是一个排队系统动态优化问题。                首先用排队系统理论来描述实际问题,将输
入流按照不同的性质分成四路,分别是外伤、                  白内障(双眼)、   白内障(单眼)、     其他眼
科疾病(含青光眼和视网膜疾病)。该问可以将 79 张床位视为一个服务台,病人到达
流服从 Poisson 分布,建立 M / M /1 无限源排队系统。本文主要针对本问要求设计了排
队 PFCFS(Priority-First Come First Serve)算法(见图 6.5),在每周不同的时间
赋予四类病人不同的优先权,排队时不同路队列按优先权排序,优先满足前队列的床
位安排,同路队列内按照 FCFS 原则排序,目标是使得医院资源利用率达到最大并且
病人的平均等待时间最短。           本文用面向对象的思想分析了眼科病床安排过程中各对象属
性的变化,并用 JAVA 编程实现了该排队调度算法,比较优化前后的床位利用指标和
等待时间指标,性能提高了 10.19%,证明了算法的有效性。
    第三问应用第二问建立的模型,根据第二问的排队调度模型可以推算出当前等待
队列中病人的最优入院时间,从而可以提前得到门诊病人的入院时间区间。                           此外,本文
还尝试用神经网络模型对病人入院时间做出了预测,并将这两种方案得到的预测区间
进行了对比分析。
    第四问使用穷举方法。         通过分析缩小穷举范围,对每一种可能的调整情况进行模拟
仿真,得到三种情况下单位时间内病床周转次数分别为:9.27、                    9.45、10.30。可以知道
第三种情况相对较好,所以医院手术时间可以调整为在周三与周五进行白内障手术。
    第五问要将病床按照床位划归方案划分为多个服务台组,各服务台组专为某一类
病人服务,对于同一类病人以先到先服务的原则进行排队,可以构成几个相互独立的
M / M /1 系统,计算各个排队系统带到稳态时的平均逗留时间。然后确定合理的病床分
配比例让所有的病人的平均逗留时间最短,这样把问题转换为了一般非线性规划问题,
用 LINGO 软件即可求解,最佳床位比例分配方案见下表。

  疾病类型                            外伤                   白内障(双眼) 白内障(单眼) 其他眼科疾病
病床分配比例                           0.106                   0.194   0.113   0.587
 分配床位数                             8                       15      9       47

                                                                 2
最后本文就所建立的三个模型在实际运用中的作用进行了分析,并提出了改进方
向,结合实际,加入重要因素的考虑,比如考虑拒收及病人损失情况、病床满负荷运行
的负面效应、应急预案等。

关键词: 排队系统     PFCFS 算法 归一分析法   BP 神经网络   模型仿真 面向对象

                        1 问题的提出

    本题研究医院眼科的病床最佳优化方案,提出了医院眼科病床的合理安排的数学
建模问题。  该医院眼科门诊每天开放,住院部共有病床 79 张。    该医院眼科手术主要分四
大类:白内障、  视网膜疾病、 青光眼和外伤,给出了 2008 年 7 月 13 日至 2008 年 9 月 11
日这段时间里各类病人的情况。
    白内障手术较简单,而且没有急症。目前该院是每周一、三做白内障手术,此类病
人的术前准备时间只需 1、 天。
              2  做两只眼的病人比做一只眼的要多一些,大约占到 60%。
如果要做双眼是周一先做一只,周三再做另一只。
    外伤疾病通常属于急症,病床有空时立即安排住院,住院后第二天便会安排手术。
    其他眼科疾病比较复杂,有各种不同情况,但大致住院以后 2-3 天内就可以接受
手术,主要是术后的观察时间较长。   这类疾病手术时间可根据需要安排,一般不安排在
周一、周三。由于急症数量较少,建模时这些眼科疾病可不考虑急症。
    该医院眼科手术条件比较充分,在考虑病床安排时可不考虑手术条件的限制,但
考虑到手术医生的安排问题,通常情况下白内障手术与其他眼科手术(急症除外)不
安排在同一天做。当前该住院部对全体非急症病人是按照 FCFS(First come, First
serve)规则安排住院,但等待住院病人队列却越来越长,医院方面希望你们能通过数
学建模来帮助解决该住院部的病床合理安排问题,以提高对医院资源的有效利用。
    问题一:试分析确定合理的评价指标体系,用以评价该问题的病床安排模型的优
劣。
    问题二:试就该住院部当前的情况,建立合理的病床安排模型,以根据已知的第
二天拟出院病人数来确定第二天应该安排哪些病人住院。      并对你们的模型利用问题一中
的指标体系作出评价。
    问题三:作为病人,自然希望尽早知道自己大约何时能住院。        能否根据当时住院病
人及等待住院病人的统计情况,在病人门诊时即告知其大致入住时间区间。
    问题四:若该住院部周六、 周日不安排手术,请你们重新回答问题二,医院的手术
时间安排是否应作出相应调整?
    问题五:有人从便于管理的角度提出建议,在一般情形下,医院病床安排可采取
使各类病人占用病床的比例大致固定的方案,试就此方案,建立使得所有病人在系统
内的平均逗留时间(含等待入院及住院时间)最短的病床比例分配模型。

                        2 问题的分析

     本题研究医院眼科中的排队现象以及床位安排方案问题。     首先要求建立一个评价指
标体系来评价病床安排模型的优劣,应从医院和病人两个方面来考察指标体系的选取,
最优的安排方案应使得双方的利益尽量得到均衡。        本文选取床位负荷表征指标—平均使
用率   Y1 、床位利用效率表征指标—平均周转次数 Y2 和病人满意度表征指标—平均等待时
间 Y3 来评价病床安排方案的优劣,并采用归一化分析的思想,建立了全面合理的病床

                           3
安排方案评价体系。用该评价指标对题中给出的数据进行分析,以便与病床安排模型优
化后的情况作比较。
  第二问是一个排队系统动态优化问题,要求建立病床安排模型,由次日出院病人
的情况来确定第二天应该要安排哪些病人入院,实质是要制定一个合理的调度方案,
使得床位利用的各项指标和病人等待时间指标都达到最优。         可以通过合理入院时间的选
取来最大限度的减少病人的等待时间。    首先用排队系统理论来描述实际问题,将输入流
按照不同的性质分成四路,分别是外伤、     白内障(双眼)、   白内障(单眼)、其他眼科疾
病(含青光眼和视网膜疾病),建立    M / M /1 无限源排队系统。我们主要针对本题要求
设计了排队规则,目标是使得当排队系统达到稳态时,通过合理的调度方案安排合适
类型的病人入院填补空床,使得所有病人的平均等待时间最短,建立床位安排模型后,
本文还用面向对象的思想分析了眼科病床安排过程中各对象属性的变化,并用 JAVA 编
程实现了自己设计的排队调度算法的计算机仿真,并与原 FCFS 规则排队的模型对比床
位利用指标和等待时间指标,优化效果显著,说明了算法设计的有效性。         第三问是对第
二问建立的模型的一个实际应用,根据第二问的排队调度模型可以推算出当前等待队
列中病人的最优入院时间,从而可以提前得到门诊病人的入院时间区间。         此外,本文还
尝试用神经网络模型对病人入院时间做出了预测。
  第四问增加了一个新的约束,规定周六和周日不能安排手术,需要解决的问题是
医院的手术时间安排是否应作出相应调整,这就需要将不调整时的状态与各种调整后
的状态进行对比,调整后若能产生更好的结果,则就对手术时间安排进行调整,若调
整后的结果都不尽如人意,就不需要对手术时间安排进行调整了。一周只有 7 天,而且
双眼白内障手术是有限制的,即两次手术之间需要隔一天,这就决定了白内障手术应
保持隔一天手术一次的安排,调整时不能改变两次手术时间间隔。         有了此限制对于手术
时间的安排,可进行调整的情况也不多,可以使用穷举的方法,对每一种调整情况进
行分析,最后根据各种情况的仿真结果进行分析和评价,确定是否需要进行手术时间
安排的调整。对于急症患者,仍按照优先就诊的原则,周六和周日也对其进行手术。
  最后一问将床位划归给了各类不同类型的病人,此时在排队系统建模时就不能再
将所有的床考虑为一个整体当成服务台,而是要按照床位划归方案划分为多个服务台
组,可以构成几个相互独立的 M / M /1 系统,计算各个排队系统带到稳态时的平均逗
留时间。然后确定合理的病床分配比例让所有的病人的平均逗留时间最短,这样把问题
转换为了一般非线性规划问题,用 LINGO 软件即可求解。

                    3 模型假设

1. 不考虑医院满负荷运行状态下造成的人力和财力的负面影响;
2. 前来医院就诊的患者数量保持一定规律,不考虑病情的季节性变化以及其它原因
   造成的就诊病人数量的大幅度改变情况;
3. 除了外伤属于急症外,不考虑其他眼科疾病的急症情况;
4. 假定病人源无限,并且服务空间容量无限,不考虑拒收或是由于等待队列太长导
   致病人失去耐心离开排队系统的情况;
5. 该医院眼科手术条件比较充分,在考虑病床安排时可不考虑手术条件的限制只要
   考虑到手术医生的安排问题,白内障手术与其他眼科手术(急症除外)不安排在
   同一天做;
6. 不考虑病床消毒、维修、保养等时间,假定所有病床始终运行情况良好,在满负荷
   情况下总能够配备充足的护士维护人员及物资资源等。

                      4
4 符号系统

Y1       床位负荷表征指标—平均使用率
Y2       床位利用效率表征指标—平均周转次数
Y        床位使用效率指标
y1       标准化床位使用率
y2       标准化床位周转率
bi       第 i 天被使用的床位数
n        病床总数
T        统计期天数
N in     统计期内入住医院的总人数
tj       在家等待时间
t j'     在医院等待时间
pi        第 i 类病人前来门诊的概率
ni        统计期内第 i 类病人数。
Ls       系统平均队长
Lq
         等待队列平均长度
Ws       病人平均逗留时间
Wq
   在等待队列中的等待时间
 c 分组后病床数目
ρ 服务强度
λ 病人门诊到达率即单位时间内前来门诊的病人数目
µ 平均服务率即单位时间内能够被服务的病人数目
γi  病人的床位占总床位数的比例
T         四类病人的平均逗留时间为
Wsi       第 i 类病人平均逗留时间
xi        第 i 病人的总人数
tsq       术前准备时间
ts        手术时间
thg       术后观察时间
tz        一个病人从入院到出院的总时间
t ws      外伤病人入院时间
t sqjd    术前阶段时间
t sqdd    术前等待时间
t sb      双眼白内障病人等待时间
tdy       单眼白内障病人等待时间



                            5
5 病床安排模型评价指标体系的建立(问题一)

5.1 床位使用评价指标

   对于床位安排模型的评价应该从医院和病人双方面来选取指标体系。  对医院而言,
应该要使得其工作效率达到最大,而床位的利用情况是反映医院工作效率的重要指标。
反映床位利用情况的指标主要有[1]:
    平均病床工作日:是指平均每张床位一定时期内的工作天数,反映床位的使用
     情况。由于修理、 消毒或其它原因,每张病床不可能每天都在使用,即病床不应
     该总处于满负荷状态。  
    实际床位使用率:它反映平均每天使用床位与实有床位的比例情况。
    床位周转次数:床位周转次数是衡量医院床位周转速度快慢的指标。
    床位周转间隔:是从一个病人出院到下个病人入院的间隔天数,按每张床计算
     出的数值。
    手术前平均占用病床日:它反映病人入院之后手术之前占用病床的天数。如果
     能恰好等于手术准备所需的时间,那么可以使病床高效使用;如果与实际手术
     准备所有时间相差甚远则说明病床的安排不合理,因为这部分病床的占用本可
     以避免。
    平均住院日:指统计期内病人平均住院的时间。缩短平均住院日是开发病床资
     源的一种重要手段,既能节省床位投资,使现有的卫生资源得到充分有效的利
     用,又能使医院的技术优势得到充分发挥,为医院增加收益。  
   上述指标体系中平均床位工作日与实际床位使用率两项指标形式不同,前者用平
均数表示,后者用百分数表示,但本质是一样的,都是反映床位负荷。   它受床位周转次
数、周转间隔时间的制约。在正常情况下,床位每周转 1 次,就会出现一定的周转间隔,
周转次数少,周转间隔长,出现空床的机会就多,平均床位工作天数就少,床位使用
率就低。而床位周转次数与出院者平均住院天数成反比。因此在保证模型合理有效的前
提下,为了尽可能简捷的评价床位安排方案,本文选取了下列指标来评价病床使用情
况:
   床位负荷表征指标—平均使用率 Y1 ;
   床位利用效率表征指标—平均周转次数 Y2 。
   需要说明的是使用率指标当某输入病人流大于输出病人流时,病床使用率会不断
上升,直到达到 100%后稳定下来,其变化规律如图 5.1 所示。




                   6
图 5.1 病床占用量随着时间变化图象

各指标的计算方法如下,采用了归一分析的思想:
病床平均使用率

                             n

                            ∑b      i
                     Y1 =   i =1

                             Tn
病床平均周转次数
                             N in
                     Y2 =
                             T
其中, bi 是第 i 天被使用的床位数, n 为病床总数, T 为统计期天数, N in 为统计期内入
住医院的总人数。定义床位使用效率指标 Y
                        Y Y
                     Y= 1× 2
                         y1 y2
  y1 和 y2 分别为标准化使用率和标准化床位周转率,根据卫生部有关评审标准及医
院所定的管理目标,若以一年为统计期,则床位使用率标准值为 89%,床位周转率标准值
为 21 次[2]。这个指标就全面反映了床位使用负荷及效率状况。

5.2 病人满意度评价指标

  从病人的角度而言,要尽可能的提高病人的满意率,病床的安排方案会影响病人
接受手术的等待时间。除了外伤属于急症,需要立即入院,次日安排手术治疗外,其他
三种疾病在不考虑急症的情况下都需要等待,最优的病床安排方案应使得病人的等待
时间最少,等待队列最短。所以选取表征病人满意率的指标—病人等待时间 Y3 。由于不

                                   7
同类型的病人所需等待时间差异较大,比如患白内障(双眼)的病人只能在周一开始
手术,这部分病人的等待时间无疑要长一些,因此应该将不同类型的病分开考虑。等待
时间指标 Y3 的计算方法为
                           ni

                     5     ∑ (t   j   + t j ' w)
                Y3 = ∑ (   j =1
                                                   ) pi
                    i =1          ni
                                                          '
  等待时间分为在家等待时间 t j 和在医院等待时间 t j 两种,后者比前者更加耗费医
院的医疗成本,并且由于病人在医院里生活受到种种限制,其不满意度会因此更加显
著的增加,因此要引入一个权值 w( w > 1) 来描述在医院等待时间比在家等待时间对不满
意度的影响更剧烈。 pi 为第 i 类病人前来门诊的概率,将白内障(单眼)、白内障(双
眼)、视网膜疾病、青光眼和外伤五类病人单独考虑。 ni 为统计期内第 i 类病人数。

5.3 用评价指标体系对原有床位安排模型进行评价

    为了与后面优化后的床位安排模型作对比,这里先用建立的评价指标体系对题目
中给出的原有的床位安排模型相关数据进行评价,用 Excel 表格可以很快算出原有
FCFS 规则下的床位安排模型的各项评价指标值,如表 5.1 所示。


          表 5.1 原有 FCFS 规则床位安排模型的各项评价指标值
 评价指标项     床位平均              床位平均                         标准床位使用      病人等待
          使用率 Y1 (系         周转次数 Y2                        效率指标 Y    时间指标 Y3
          统达到稳定后)
   数值       100%                      8.44                    2.71     10.5




               6 病床安排模型的建立与评价(问题二)

6.1 医院就诊流程分析

6.1.1 手术科室病人诊疗的常规运行流程


  病人从出现症状入院到确诊需要进入手术室,再从手术室通过手术等治疗治愈出
院,这一流程是病人诊疗的常规运行流程。(如图 6.1 所示)




                                       8
急诊       等                    术           出
            待                    前           院
                      入               手
            入                    准
                      院               术
            院                    备
   门诊


             图 6.1 手术科室病人诊疗常规流程概况图

  从图中可以看出诊疗流程的一些特点:1. 流程流向单一,大多数手术病人的诊疗
流程的流向基本一致。2. 流程环节较多,图中已经简化了诊疗流程,但仍能看出过程
较为复杂,加之病人的病情程度以及科室的忙闲程度都有很大的差异,容易造成流程
的周转不畅。3. 流程的周期较长,从确诊到手术完成后出院病人经历整个诊疗流程的
时间相对较长。

6.1.2 对诊疗流程的主要环节进行描述


   诊疗流程的运作必然牵扯到每个环节的运作,环节与环节之间的有效衔接,才能
使得整个诊疗过程运行便捷、通畅。所以下文对这些主要环节和各环节之间的关系进行
必要的描述。手术病人诊疗过程主要分为以下两部分:
   1. 住院前
   住院前主要集中在门、急诊阶段,共经历挂号、候诊、接诊、等待检查、检查、办理缴
费、住院手续及等待住院 6 个主要环节。本文将此六个环节归为病情确定(前五个环节)
和等待住院两个阶段。接下来对这两个阶段内容进行一下介绍。
   病情确定:从病人到医院至病人病情程度的确定,办完住院手续。 这个阶段医院根
据病人要进行眼科手术的种类对病人进行相应的归类,之后根据实际情况进行入院安
排。
   等待住院:病人已确定病情及办完入院手续,根据安排的入院日期等待入院接受
治疗。
   2. 住院后
   手术病人住院后,流程则分为术前阶段、术中阶段、术后阶段。(见图 6.2)


     入院   术前等待 术前准备    手术(有多次手术情况)术后观察      出院




          术前阶段            术中阶段       术后阶段



                 图 6.2 手术病人住院过程图

                          9
对于术前阶段本文不考虑入院所花的时间,只计算术前准备和术前等待时间,而
如何减少术前等待时间是提高医院病床利用效率的关键;术中阶段有不同情况之分,
大部分病人只需接受一次手术即可治愈出院,但对于双眼的白内障患者,其需要进行
两次手术;术后阶段的出院时间,本文中也不考虑。

6.1.3 医院医学条件及制度安排分析


  根据已给材料可以得到以下医院相关信息:

  1. 医院眼科门诊每天开放,住院部共有病床 79 张;
  2. 医院眼科手术主要分四大类:白内障、视网膜疾病、青光眼和外伤;
  3. 白内障手术较简单,而且没有急症。每周一、  三做白内障手术,此类病人的术前
       准备时间只需 1、2 天。做两只眼的病人比做一只眼的要多一些,大约占到 60%。
       如果要做双眼是周一先做一只,周三再做另一只;
  4.   外伤疾病通常属于急症,病床有空时立即安排住院,住院后第二天便会安排手
       术;
  5.   其它眼科疾病大致住院以后 2-3 天内就可以接受手术。    这类疾病手术时间一般不
       安排在周一、周三。由于急症数量较少,这些眼科疾病可不考虑急症。
  6.   白内障手术与其它眼科手术(急症除外)不安排在同一天做;
  7.   住院部对全体非急症病人是按照 FCFS(First come, First serve)规则安排
       住院(此处是需要建模改进的地方)。

6.2 排队论相关知识

  排队理论是一门应用十分广泛的运筹学分支,它在各种存在等待情形的环境中都
有非常成功的应用。简单的说,排队论就是研究排队现象建立排队模型。建立排队模型
的目的就是要规划一种为顾客提供服务的方式以实现一定的运营效率。本文通过使用排
队论相关知识,建立病床安排模型,并对问题进行了求解。

6.2.1 排队系统


  一个排队系统有三个基本组成部分:顾客输入过程、排队结构与排队规则、服务机
构与服务规则[3],排队服务过程见图 6.3。




                            10
排队规则            服务规则


                  排队结构            服务机构           …
    顾客源

          顾客到来                            顾客离去




                         图 6.3 排队系统

   输入过程:指顾客到达排队系统的规律。可用到达时间间隔或单位时间内顾客到达
数的概率分布描述。 按到达时间间隔分为确定时间间隔和随机时间间隔;按顾客到达方
式有单个到达和成批到达;从顾客元来看,分有限元总体和无限远总体。
   排队规则:排队系统一般分等待制、损失制和混合制。不同的排队规则适应不同的
排队状况。
   服务规则:指排队系统中服务台的个数、排列以及服务方式。
   服务台:排队系统服务台的个数可以是一个或多个,多个服务台可以是串联或并
联。

6.2.2 顾客到达时间间隔分布和服务时间分布


   如果顾客到达满足如下条件,则称为泊松流:
1) 在不相互重叠的时间区间内,到达顾客数相互独立(无后效性);
2) 对于充分小的时间间隔 [t , t + ∆t ] 内,到达 1 个顾客的概率与 t 无关,仅与时间间隔
   成正比(平稳性):
                P (t , t + ∆t ) = λ∆t + ο (∆t )
3) 对于充分小的时间间隔 [t , t + ∆t ] ,2 个及以上的顾客到达的概率可忽略不计(普遍
  性)。

    对于泊松流,在时间 t 系统内有 n 个顾客的概率服从如下泊松分布:
                           (λ t ) n − λ t
                 Pn (t ) =         e , t > 0, n = 0,1, 2,L
                             n!
式 (6.2) 中的参数 λ 代表单位时间里到达顾客的平均数,即平均到达率。则 1 λ 代表平均
的顾客到达时间间隔。
    而泊松流到达时间间隔服从负指数分布,所以顾客到达时间间隔分布服从负指数分
布。
    根据已有资料,各类病症的手术准备时间已给出,手术通常一天内即可完成,所以
本文将服务时间分布当做定长分布,相关数据由提供的 2008-07-13 到 2008-09-11 的
病人信息统计获得。


                             11
6.3 模型一:建立基于 PFCFS 排队算法的病床安排模型

    根据已有信息可以知道,本模型的重点是建立一个合理的排队规则来提高医院病床
的利用效率。基于排队理论, 本文设计了排队 PFCFS(Priority-First Come First
Serve)算法,在每周不同的时间赋予四类病人不同的优先权,排队时不同路队列按优
先权排序,优先满足前队列的床位安排,同路队列内按照 FCFS 原则排序,目标是使
得医院资源利用率达到最大并且病人的平均等待时间最短。

6.3.1 模型条件


   1. 病人输入过程:采用病人到达的时间间隔分布来描述输入过程。病人到达之间
      是相互独立的服从无记忆的泊松分布。
   2. 病人排队规则:混合制,普通病人根据病症种类进行分类排队,各队列之间根
      据优先级决定入院先后(详见模型描述),队列内部按先到先服务原则排列。
   3. 服务原则:对于病种不同的病人采用对应的服务,即手术。

6.3.2 模型描述与分析


  将所有病人根据所要做的手术分为四类:单眼白内障、        双眼白内障、外伤、其它眼科
疾病。使用四个队列分别排列这四类病人。
  通过已有数据,可以得到各类眼病入院手术的时间情况,如术前准备时间 tsq 、     手术
时间 t s 、术后观察时间 thg 等。各类手术术前准备时间直接可知;对于术前等待时间,因
为要增加床位利用效率,所以本模型中设计其为零;手术时间除双眼白内障外都为一
天时间,双眼白内障两次手术中间隔了一天,本文将双眼白内障手术时间作为三天处
理;至于术后观察时间,可以通过已给出的医院历史数据对每种手术的术后观察时间
进行统计,将其均值(向上取整后)作为此类手术的术后观察时间。
  一个病人从入院到出院的总时间 t z 可由式
               t z = tsq + ts + thg
得出,数据详情见表 6.1。

                       表 6.1 各类型手术时间使用表
  手术类型        术前准备 t sq    手术时间 t s   术后观察 thg       总时间 t z
               (天)          (天)        (天)           (天)
 单眼白内障          1            1          3              5
白内障(双眼)         1            3          3              7
   外伤           1            1          6              8
其它眼科疾病          2            1          9             12

  由医院医学条件及制度安排分析可得一周内各类手术安排情况,见表 6.2。

                     表 6.2 一周内各类型手术时间安排表
              手术类型                        可进行手术时间
             单眼白内障                         周 1、周 3
                              12
白内障(双眼)                      周1
         外伤                       任意时间
       其它眼科疾病              周 2、周 4、周 5、周 6、周 7

    结合两表,可以得到下文约束条件来提高病床使用效率。     因为入院后的术中阶段和
术后阶段的时间是确定的,不会因为入院的日期不同而变化,提高床位使用效率就是
减少术前阶段的时间。  原来医院的先到先服务的排队原则导致有些病人在入院后需等待
较长时间才能进行手术,这样等待的这段时间相当于床位空闲,既浪费医院资源又浪
费病人治疗费用。
    提高效率的原则为只要安排了病人入院,则表明其可以直接进行术前准备,之后
便可进行手术,不需要手术等待时间,不再只使用先到先服务的排队原则,这样便可
以提高病床有效利用的时间,减少虚的院中等待时间。       以一周为一个工作周期,约束条
件如下:
   1. 外伤属于急症,无论在什么时候其优先级均为最高,此类病人确诊后尽快安排
      住院,入院后第二天便可接受手术,不分一周内哪一天。
   2. 因为双眼白内障手术只能安排在周一开始做,错过时间的话需等一周时间,又
      此手术的准备时间为 1 : 2 天,所以为了不额外的占用病床,需要在周六或周日
      优先将等待入院的双眼白内障患者安排入院,对于其它时段确诊的双眼白内障
      患者,即使其住进医院,其也不能进行手术,另外占着的床位不能给其他患者
      使用,降低了病床利用率。所以对于没有在周六和周日确诊的双眼白内障患者
      使其排在双眼白内障队列中等待下次入院安排。
   3. 单眼白内障可以在周一或周三进行手术,其手术准备时间也为 1 : 2 天,如果错
      过周三,则需要等很多天,至下周一,所以在周六或周日时双眼白内障患者住
      院安排完后若有空病床应先考虑单眼白内障患者。此外在周一或周二,若有单
      眼白内障患者等待入院应优先考虑。其它时段内单眼白内障患者应排在相应队
      列内等待下次入院安排。
   4. 其它眼科疾病因其手术准备时间为 2 : 3 天,时间较长,而且在除周一和周三剩
      余的时间内均可接受手术,计算可知其可在一周的任意一天内入院,而且不会
      额外占用病床。所以在除以上三个条件的情况下,应考虑其它眼科疾病的手术
      优先。
    通过以上约束条件,可以得到一周不同时间段内各类病症入院的优先级,见表
6.3(表中数值越大表示此种疾病入院的优先度越高, 0 表示不进行入院安排),根据
此表中相应日期各病症优先级当日对不同疾病的病人进行入院安排,作为入院规则的
主要依据。
             表 6.3 一周各时间段各类手术的优先程度表
    手术类型       周 6、周 7  周 1、周 2 周 3、 4、
                                    周 周
                优先级      优先级     5 优先级
   白内障(单眼)        2        3        0
   白内障(双眼)        3        0        0
     外伤           4        4        4
   其它眼科疾病         1        2        3
  但从另一方面看,这种原则会使某些先到的病人后来才进行手术,后到的病人反
而有可能先接受手术。
  此原则下,各类病人入院时间变化分析:

                      13
外伤:此类病人入院原则没有改变,即优先入院。病人入院时间 t ws 不变,即
                ∆t ws = 0
  双眼白内障:此类病人只在周六和周日安排入院,其它时间均放在其相应的等待
队列中等待,这样虽然感觉推迟了病人的入院时间,事实上取得了更好的效益。            按照先
到先服务的原则此类病人入院时间不在周六周日的情况有 3 种。
  1. 病人确诊时间不在周六周日,医院等待入院的病人总数较少,按照先到先服务
的原则病人可以在本周的周六前入院,若将这类病人推迟到周六或周日入院,并没有
增加其整个术前阶段的时间 t sqjd ,反而将其在医院等待入院的时间 t sqdd ,改为院外等待,
这样既可以给自己省钱,又可以给院方节省资源;
                  t sqjd + ∆tsqjd ∆tsqjd
                               (=0)
  2. 病人确诊时间不在周六周日,医院等待入院的病人总数较多,按照先到先服务
的原则病人不可以在本周的周六前入院,如果其能在本周周六或周日入院,和第一种
情况相似,
              t sqjd + ∆tsqjd ∆tsqjd
                           (=0)      .
  如果其需要安排在下周则根据上述优先原则在周六或周日优先安排其入院,这样
便提前了其入院的时间,对于此类病人来说提高了满意度,
             t sqjd + ∆tsqjd ∆tsqjd
                          (<0)
  如果在此原则下仍安排在了下周手术,根据情况将其再归为情况 1 或情况 2,总体
上病人入院时间得到了优化;
  3. 病人确诊时间在周六或周日,医院等待入院的病人总数较多,按照先到先服务
的原则不能在本周周六或周日入院,此时根据上述优先原则,若本周周六或周日出院
人数多于同类等待病人,病人可在本周提前入院,此时对病人来说提高了满意度,
               t sqjd + ∆tsqjd ∆tsqjd
                            (<0)      .
  如果在此原则下仍安排在了下周手术,根据情况将其视为为情况 1 或情况 2 处理。
总体上双眼白内障病人入院时间得到了优化。
  单眼白内障:对于周一或周二的情况和双眼白内障周六或周日的情况大致相同。对
于周六和周日其可能因为优先安排了双眼白内障患者而住院推迟,这时用一个病人情
况进行一下对比,双眼白内障患者可以节省近一周的等待时间( ∆t sb < 0 ),单眼白内
障患者等待时间可能增加一至两天到下周一或周二(因为周一或周二其优先度高于其
他两类普通眼病,所以在周一或周二入院的可能性很大),也可能增加三至四天至下
周周六或周日( ∆tdy > 0 ),综合来说病人总体等待时间没有增加,而且减少的可能性
较大,交换后时间变化
                     ∆t sd = ∆t sb + ∆tdb
   其他眼科疾病:在周六、周日、周一和周二的这段时间,其优先度相对其它几种病来
说较低,这样其在这段时间内手术被推迟的概率比较大,根据表 6.1 知道此类手术的
时间是比较长的,所以在等待相同时间的情况下,此类病人的满意度应该高于其他几
类病人。 并且在周三至周五这三天内除急诊外全部安排的为此类病人,其等待的时间并
不会过长,至多为四天,并且此种情况的概率较小,加上有些病人会提前安排入院,
两者可以做一下抵消。对总体等待时间影响较小。
   此外,经过对已给数据的统计可以得到图 6.4 所示的各类病人比例分布图,见图
6.4。


                        14
图 6.4 医院接待各类病人比例分布饼图

  从图中数据可以看出,其他眼科疾病所占比例最大,除外伤外其它三种病的比例
接近 2: 1: 1 ,而普通病症中其他眼科疾病在一周内所占绝对优先比例也为最多( 3 天),
白内障双眼所占绝对优先比例为 2 天,白内障单眼所占绝对优先比例为 2 天,这与其
病症比例接近,所以按此优先级进行床位安排是有一定合理性的。
  综上,总体病人等待时间变化会比原来排队原则下的情况有所优化,医院资源使
用效率会大幅提高。

6.3.3 床位安排 PFCFS 算法描述


  根据已经制定的优先级规则,将四类病人使用四个队列分别进行排列,各类病症
的优先级即为相应队列的优先级,队列内部按照先到先服务的原则进行排列。算法流程
图见图 6.5。计算机仿真程序源码实现见附录 1。




                          15
开始



                      系统时钟状态更新



                                T
                                         新病人病
                                         情确诊


        医院状态更新
                                    病人等待队列状态更新:病人
                                    根据自己得病类型进入相应等
                                    待队伍,各等待队伍内部按先
                                       到先服务原则排列
               院内床位
               信息更新

                                        是否有空床       F


  病人出          计算院内                         T
   院           空床数
                                      确定当前日期,依据表
                                      6.3中数据给各病症队
                                        列付相应优先权值


                                     按队列优先权值大小,依
                                     次选取队列,队列内部按
                                     先到先服务原则进行入院
                                      安排,直至没有空床




                                    院内床位状       病人等待队
                                     态更新        列状态更新


                 图 6.5 床位安排 PFCFS 算法流程图



6.4 床位安排模型仿真

  通过使用计算机仿真,使用按照泊松分布随机生成的病人数据,得到表 6.4 的仿
真结果。
                           16
表 6.4 床位安排模型仿真数据表
 时间          1        2     3        4   5   6   7 8 9    1        1   1   1   1   1   1   1   1   1   20
(天)                                                       0        1   2   3   4   5   6   7   8   9
 当天          1        1     1        8   1   1   6 6 9    5        9   1   1   1   5   1   5   7   8   7
 入院          0        0     8            3   2                         6   1   2       0
 人数

  表中取医院达到满床位状态后的数据,这样是为了能和原始数据进行更好的比较,
问题一中得到的指标是根据原始数据得到的,而原始数据便是医院满员时的情况(即
床位使用率为 100% )。表中显示的信息为每天入院的人数,利用问题一中的指标体系,
通过表中数据可以得到这段时期内医院的平均病床周转次数为 9.3。
  从统计数据中可以看到,与问题一中的原始数据统计结果相比,本模型仿真出的
结果较好,病床单位时间内的周转次数明显好于原始数据统计结果,平均每天可以对
接待一名病人。 而病人平均等待时间通过问题二的模型分析可知总体上平均等待时间不
会变坏,所以在这里就已病床周转次数为主。
  经过对比,本模型具有比较好的优化能力。

                                         7 病人住院时间预测模型(问题三)

7.1 模型二:基于                      BP
                                     神经网络的病人住院时间预测模型

7.1.1   BP
             神经网络模型的确定


    在进行  神经网络的设计时,一般应从网络的层数,每层中的神经元个数和输出
                 BP




变换函数,初始权值及学习速率等几个方面考虑[4]
1) 网络的层数
    理论上已证明:具有偏差和至少一个 S 型隐含层加上一个线性输出层的网络,能够
逼近任何有理数。这实际上已经给出了设计     网络的基本原则。                              BP




2) 隐含层的神经元数
    网络训练精度的提高与隐含层的神经元数目密切相关,用 L 表示隐含层神经元的数
目,则 L 的初始值可由以下两个公式中的其中之一来确定:

                                                 L = m+n
                          L = 0.43mn + 0.12n 2 + 2.54m + 0.77 n + 0.35 + 0.51

    其中 m , n 分别为输入层神经元数目与输出层神经元数目。
3) 初始权值的选取
    对非线性系统,初始权值对于学习是否达到局部极小,是否能够收敛以及训练时间
的长短关系很大。如果初始权值很大,使得加权后的输入和落在 S 型函数的饱和区,导致
其导数非常小,从而使学习过程几乎停止。      所以,一般取初始权值为(-1,1)之间的随机数。
4) 学习速率
    学习速率决定每一次循环训练所产生的权值变化量。     大的学习速率可能导致系统的
不稳定;小的学习速率则导致较长的训练时间和较慢的收敛速度。       一般的做法是采用自
适应学习速率,使网络的训练在不同的阶段自动设置不同大小的学习速率。
                                                         17
7.1.2 模型二建立与求解


  在实际应用中,     BP
                   网络一般采用 3 层结构,本文也不例外。      对于
                                              BP
                                                 网络输入层的
节点数,本文采用了当时住院病人人数和等待住院病人人数这两个输入变量,即:
                      N i ——第 i 天累积住院人数
                      Wi ——第 i 天累积等待住院人数
  其中 0 ≤ i ≤ 45 (从 2008 年 7 月 13 号开始)。病人的等待住院时间即可 BP 网络的输
出变量。
  由于外伤通常情况下属于急诊,在有空床位的情况下应该优先考虑让给外伤患者。
根据题目所给的数据可以看出:外伤患者都是只等了一天就可以入院。                 设外伤患者的门
诊日期为 D ,则外伤患者的入院时间 T 为
                             T = D +1

  其它病例可以直接通过  网络进行预测。根据实际情况可知,各种病例的病人所
                   BP




对应的等待时间不尽相同,呈现不同的变化规律。  所以,本模型只对白内障(单眼)进行
分析说明,其它比例可进行类推。 7.1 为白内障(单眼)在 45 天内每天的住院人数、
               图                           当
时的等待住院人数及等待住院时间的关系变化曲线。




                   图 7.1 输入变量和输出变量的关系曲线

   经过分析可以知道病人等待住院时间跟当前等待住院人数和当前已住院人数有关。
由于单眼白内障等待时间相对集中,所以本文定   神经网络的输入层神经元个数为
                                 BP




10,最终预测结果如图 7.2 所示。



                           18
图 7.2 等待时间的预测与仿真曲线对比图

    从图中可以看出,单眼白内障患者实际住院时间大部分集中在[12,13]这个区间内,
而该 BP
       神经网络模拟出来的等待时间几乎接近 12.5 天,与实际值的总体误差控制在
了 0.5 天内。所以该神经网络模拟的结果与实际结果可以认为两者相吻合,从而得出该
预测模型比较合理。这样就可以通过训练后的神经网络来预测其对应的等待时间。


7.2 基于模型一计算机仿真的病人住院时间预测方法

  模型一中用 JAVA 建立的计算机仿真程序(源文件见附录一)也可以用于提前预测
病人的入院时间。只要确立了排序规则,比如优化之前的 FCFS 规则以及模型一中的调
度优先权规则,在病人流和服务时间满足一定概率分布的情况下,就可以提前推算出
某一位门诊病人的入院时间、出院时间及等待时间。以模型一中的调度优先权规则为例,
输入服从泊松分布的伪随机数作为每天的门诊病人数,通过不断循环重复每天各个对
象状态的变化过程,总能找到当天门诊者入院的那天。图 7.3 列出了计算机仿真程序输
出的部分结果,其中时间指从统计期的第一天算起当天的序号,第一天的序号记做
“1”,这样只要改变循环次数就可以推出任意一天入院和出院的人员情况,也可以提
前推算任意一个病人的出院时间。




                      19
图 7.3 自编计算机仿真程序的部分输出结果



           8 周末不安排手术情况下的床位安排模型(问题四)

8.1 问题分析

  若该住院部周六、周日不安排手术,则在不改变其它任何条件的情况下,受到影响
较大的是其它眼科疾病,对于白内障手术而言,影响很小。现在需要解决的问题是医院
的手术时间安排是否应作出相应调整,这就需要将不调整时的状态与各种调整后的状
态进行对比,调整后若能产生更好的结果,则就对手术时间安排进行调整,若调整后
的结果都不尽如人意,就不需要对手术时间安排进行调整了。一周就 7 天,而且双眼白
内障手术是有限制的,即两次手术之间需要隔一天,这样的话就决定了白内障手术应
保持隔一天手术一次的安排,调整时不能改变两次手术时间间隔。有了此限制对于手术
时间的安排,可进行调整的情况也不多,可以使用穷举的方法,对每一种调整情况进
行分析,最后根据各种情况的仿真结果进行分析和评价,确定是否需要进行手术时间
安排的调整。对于急症患者,仍按照优先就诊的原则,周六和周日也对其进行手术。
  根据上述等到的条件,两次白内障手术时间安排情况可分为表 8.1 中的几类:

                表 8.1 两次白内障手术时间安排表
   两次白内障手术时间安排情况                   日期
        情况 1                     周 1、周 3
        情况 2                     周 2、周 4
        情况 3                     周 3、周 5

对于以上三种情况分别进行模型仿真和数据分析,可得出每种情况的结果,经过对比
后判断是否对手术时间安排进行调整。
  对比的原则是以病床周转次数为主要指标,仿真数据均取病床利用率为 100% 时的
数据。因为使用模型设计的床位安排方案病人等待的时间变化不具有很强的对比价值,
而且本模型主要是为了提高床位利用效率,所以为简化对比过程,比较时不考虑病人
平均等待时间的改变。

8.2 模型三:增加手术时间约束的病床安排模型

  对于本问题,改变的条件有:住院部周六、周日不安排手术;不同调整情况下白内
障手术的安排时间。周六周日不进行手术,则会影响到其它眼科疾病病人的入院时间选
                       20
择;不同调整情况,每种病症的优先权需要进行相应的调整。

8.2.1 情况 1 下的模型改进


  情况 1 下白内障的手术安排时间没有改变,只是增加了住院部周六、周日不安排手
术的条件。  此时,为了达到医院病床使用效率的提高,需要调整其它眼科疾病病人的入
院时间,对于白内障患者和急症患者不需要进行调整。  新的一周各时间段各类手术的优
先程度表见表 8.2。

               表 8.2 一周各时间段各类手术的优先程度表
  手术类型      周 6、周 7   周 1、周 2      周3   周 4、周 5
             优先级       优先级        优先级    优先级
白内障(单眼)        2         3          0      0
白内障(双眼)        3         0          0      0
  外伤           4         4          4      4
其它眼科疾病         1         2          3      0

根据此表对已给出的排队模型进行改进,然后模拟仿真。

8.2.2 情况 2 下的模型改进


  情况 2 下白内障的手术安排时间按变为了周 2、周 4,加上住院部周六、周日不安排
手术的条件。  这时在改进时需要将白内障病人的入院情况也进行调整,调整方式为将以
前的时间整体向后推移一天。新的一周各时间段各类手术的优先程度表见表 8.3。

               表 8.3 一周各时间段各类手术的优先程度表
  手术类型      周 7、周 1   周 2、周 3      周4   周 5、周 6
             优先级       优先级        优先级    优先级
白内障(单眼)        2         3          0      0
白内障(双眼)        3         0          0      0
  外伤           4         4          4      4
其它眼科疾病         1         2          0      3

根据此表对已给出的排队模型进行改进,然后模拟仿真。

8.2.3 情况 3 下的模型改进


  情况 3 下白内障的手术安排时间按变为了周 3、周 5,加上住院部周六、周日不安排
手术的条件。  情况与情况 2 的相似。新的一周各时间段各类手术的优先程度表见表 8.3。




                         21
表 8.3 一周各时间段各类手术的优先程度表
 手术类型      周 1、周 2    周 3、周 4        周5   周 6、周 7
            优先级        优先级          优先级    优先级
白内障(单眼)       2          3            0      0
白内障(双眼)       3          0            0      0
  外伤          4          4            4      4
其它眼科疾病        1          0            3      3

根据此表对已给出的排队模型进行改进,然后模拟仿真。

8.3 仿真结果及评价

  模拟仿真得到三种情况下单位时间内病床周转次数分别为:9.267、9.45、10.3。可
以知道第三种情况相对较好,所以医院手术时间安排可作调整,具体安排为白内障两
次手术时间为周 3 与周 5。
  三次的数据相差不大,在模拟中可能存在一些误差,数据的收集原则不妥也会造
成数据的不真实,所以上述的仿真结果只为参考使用,若想得到更可靠的结论,应该
重复多次进行仿真,从大量数据中进行统计分析总结规律。

              9 病床比例分配模型的建立与求解(问题五)

    本问将床位划归给了各类不同的病人,此时在排队系统建模时就不能再将所有的
床考虑为一个整体当成服务台,而是要按照床位划归方案划分为多个服务台组,各服
务台组专为某一类病人服务,对于同一类病人以先到先服务的原则进行排队。患者
Poisson 流到达,把各组服务台成一个整体作为单服务台,同组的床位越多,则该组在
单位时间内服务的病人数也越多。服务时间呈负指数分布,并且假定顾客源无限、服务
空间容量无限,则可以构成几个相互独立的 M / M /1 系统,计算各个排队系统带到稳
态时的平均逗留时间。         然后确定合理的病床分配比例让所有的病人的平均逗留时间最短。
根据排队论理论 ,在 M / M /1 无限源系统中有
              [5]

                                    λ
                             Ls =
                                  µ −λ
                                   ρλ
                             Lq =
                                  µ −λ
                                    1
                             Ws =
                                  µ −λ
                                    ρ
                             Wq =
                                  µ −λ
        L W W
其中 Ls 、 q 、 s 、 q 分别为系统平均队长、   等待队列平均长度、病人平均逗留时间和在等
待队列中的等待时间,服务强度          ρ 满足
                           λ
                      ρ=
                           µ

                               22
下面建立以平均逗留时间最短为目标的最优化模型。设分给四类病人的床位占总床
位数的比例为 γ i ,四类病人的平均逗留时间为
                4           4                 4
                                       1             1
            T = ∑ Wsi = ∑                  =∑
               i =1     i =1        µi − λi i =1 nγ i − λ
                                                         i
                                                 Ti
Wsi 为第 i 类病人平均逗留时间, Ti 为该类病床平均服务每个相应类型的病人所花的时
间, n 为总的床位数。从而可以建立最优化模型
                    min T
约束条件为
                                4

                            ∑γ
                            i =1
                                     i   =1

                        1≥ γi ≥ 0

  这样就将使得所有病人在系统内的平均逗留时间最短的病床比例分配模型转化为
了一般的非线性规划问题,用 LINGO 软件即可求解,求得的最优解见表 9.1。

            表 9.1 使得病人平均逗留时间最少的床位分配比例
  疾病类型     外伤类                  白内障(双眼) 白内障(单眼) 其他眼科疾病
病床分配比例     0.106                  0.194   0.113   0.587
 分配床位数       8                      15      9       47


                            10 模型改进方向

  以上建立的床位安排模型只是单纯的提高医院的病床使用效率并减少病人等待时
间,对于许多条件作了简化处理,应该结合实际加入重要因素的考虑。

10.1 考虑病人个人满意度评价

  为了提高病床的使用效率,模型一中对病人的入院顺序进行了一些调整,改变了人
们通常的先到先服务观念,这样会引起一些病人满意度的下降。虽然通过等待时间的分
析可以知道总体的等待时间并未增加,但受影响的病人的满意度变化并没有进行分析。
需要确定病人满意度评价标准来衡量受影响病人的满意度与等待时间的关系,这样便
可以对调整前后病人满意度的变化有所掌握,在建立模型时将病人的满意度也作为一
个参考指标。

10.2 考虑拒收及病人因为等待队列太长离开排队系统

  建模时假定病人源无限,并且服务空间容量(包括等待队列和服务队列)无限,
没有考虑拒收或是由于等待队列太长导致病人失去耐心离开排队系统的情况,模型中
并没有设定等待住院的病人的上限,根据实际情况知道当排队等候服务的人达到一定
数量后,以后再来的顾客会选择离开,不接受服务。所以设计等待入院的病人的数量值,
实现既能使医院效益最大化,而且还能使顾客满意度不至于过低。当等待队伍超过设定

                                          23
值时可对其进行转院治疗,这样医方可以减轻负担,病人还可以进行最优的选择。

10.3 考虑医院因满负荷运作产生的负面效应

  模型设计的一个原则就是提高医院病床的使用效率,这样就减去了很多病床空闲
时间。虽然表面上使医院的利益扩大了,但实际上并不一定如此。长期满负荷运行,可
能导致医院管理层面会出现问题,比如病床没有充足的时间维修、消毒、保养,医生、护
士等工作情绪的波动,医疗设备的更换周期缩短等等一系列问题的出现。 所以在模型设
计中还需要考虑这些因素的影响,不过这样一来模型会变得更加复杂,分析和实现会
变得更加困难。

10.4 考虑医院增加应急预案的情况

  在本题的求解过程中,题目给定的数据所反映的是医院眼科病床总是处于高负荷
状态,即便每天有部分病人出院,也只能空出很少部分病床。倘若遇到自然灾害或者眼
疾高峰期等情况,可能急症患者会大量增加,导致医院没有足够的床位安排急症患者
入院治疗,从而只能转院或者拒收,无疑对于医院和患者双方利益都造成损失。所以医
院如果能增加应急预案,平时就能预留若干床位专门安排数量超限的急症患者,建模
时如果能考虑这个因素无疑能得到更佳的病床安排模型。




                     24
参考文献




25
[
 1] 常 州 市 卫 生 局 , 医 院 统 计 工 作 概 述 ( 二 ) , http://czws.gov.cn/zncs/detail.asp?
Unid=962 ,2009 年 9 月 12 日。
[
 2] 陈倩 杨柏如,床位利用模型在医疗工作效率评价中的应用,中国医院统计,2003 年 04 期。
[
 3] 华兴,排队论与随机服务系统,上海翻译出版公司,1989. 1-345。
[
 4] 戚德虎 康继昌,BP 神经网络的设计,计算机工程与设计,1998,19(2):48-50。
[
 5] 吴希,医院门诊系统的排队过程模型,中国药学导报,2007 年 9 月第 4 卷第 25 期。




                                    附录

附录 1

  共有Bed、  Diseases、Patient、simulate四个类,Bed、Diseases、Patient的代码从略,核心代
码即simulate.java如下所示:
import   java.util.*;
import   java.util.zip.DataFormatException;
import   java.io.BufferedReader;
import   java.io.FileReader;
import   java.io.IOException;

public class simulate {
    public static ArrayList<Patient> waiWaitList = new ArrayList<Patient>();
    public static ArrayList<Patient> bai1WaitList = new ArrayList<Patient>();
    public static ArrayList<Patient> bai2WaitList = new ArrayList<Patient>();
    public static ArrayList<Patient> otherWaitList = new ArrayList<Patient>();
    //数据
    static int waiPatient[] = new int[50];
    static int bai1Patient[] = new int[50];
    static int bai2Patient[] = new int[50];
    static int otherPatient[] = new int[50];
    static int total[] = new int[50];
    public static Bed bed[] = new Bed[79];
    //当前剩余空床数
    public static int leftOfEmptyBeds = 10;
    //读取文件数据
    public static void main(String[] args) {
        try{
            BufferedReader reader = new BufferedReader(new FileReader("data.txt"));
        String line = reader.readLine();
        while (line != null) {
            if (line.startsWith("外伤")) {
                readPatient(line,waiPatient);
            } else if (line.startsWith("白内障(双眼)")) {
                readPatient(line,bai2Patient);
            } else if (line.startsWith("白内障")) {
                readPatient(line,bai1Patient);
            } else if(line.startsWith("其它"))
            {
                readPatient(line, otherPatient);
            }else if(line.startsWith("总共"))
            {
                readPatient(line, total);
            }
            else{
                throw new DataFormatException(line);
            }
            line = reader.readLine();
        }
        reader.close();
        }catch(DataFormatException dfe){
            dfe.getMessage();
        } catch (IOException e) {
            e.printStackTrace();
        }
        Diseases dis= new Diseases();
        int currentTime = 1;
        //创建病床
        for(int i = 0;i<bed.length;i++){
            bed[i] = new Bed();
        }
        //开始模拟
while(currentTime < 50){
       //每天在进行病床调度之前,首先要处理的是当天出院的情况。只要currentTime等于病人的
outTime,则病人出院。此时,治疗结束,输出看病信息,并清空病床
       System.out.println("第"+currentTime+"天");
            for(int i = 0;i<bed.length;i++)
       {
            if (bed[i].isEmpty() == false && currentTime ==
bed[i].getPatients().getOutTime()) {
                 System.out.print("病种:"+bed[i].getPatients().getDisease()+" 门诊时
间:"+bed[i].getPatients().getSeeTime()+"           入院时
间:"+bed[i].getPatients().getInTime()+"            出院时
间:"+bed[i].getPatients().getOutTime()+" 等待时
间:"+bed[i].getPatients().getWaitTime()+"n");
                  bed[i].setEmpty(true);
                  leftOfEmptyBeds++;
                  System.out.println("剩余床位:"+leftOfEmptyBeds);
            }
       }
       //创建病人对象
       int numOfPatient = total[currentTime-1];
       Patient patients[] = new Patient[numOfPatient];
       //初始化病人病种
         System.out.println("总门诊数"+patients.length);
         for (int i = 0; i < patients.length; i++) {
              patients[i] = new Patient();
       }
              int indexOfBai2 = waiPatient[currentTime-1]+bai1Patient[currentTime-1];
              int indexOfOther =
waiPatient[currentTime-1]+bai1Patient[currentTime-1]+bai2Patient[currentTime-1];
              for (int j = 0; j < waiPatient[currentTime-1]; j++)
              {
                   patients[j].setDisease("外伤");
                   patients[j].setSeeTime(currentTime);
                   waiWaitList.add(patients[j]);
              }
              //白内障个数
              for (int j = waiPatient[currentTime-1]; j <
waiPatient[currentTime-1]+bai1Patient[currentTime-1]; j++) {
                 patients[j].setDisease("白内障");
                   patients[j].setSeeTime(currentTime);
                   bai1WaitList.add(patients[j]);
            }
              for(int j = indexOfBai2;j< indexOfBai2 + bai2Patient[currentTime-1];j+
+){
                   patients[j].setDisease("白内障(双眼)");
                   patients[j].setSeeTime(currentTime);
                   bai2WaitList.add(patients[j]);
              }
              for (int j = indexOfOther; j <
indexOfOther+otherPatient[currentTime-1]; j++) {
                   patients[j].setDisease("其它");
                   patients[j].setSeeTime(currentTime);
                   bai2WaitList.add(patients[j]);
            }
       //测试队列的数据
for (Patient e : waiWaitList) {
             System.out.print(e.getDisease()+":门诊时间 "+e.getSeeTime()+"n");
         }
         System.out.println("个数"+waiWaitList.size());
         adjust(currentTime);
         currentTime++;
     }
 }
     public static void adjust(int currentTime){
         //计算星期
         int xingQi = currentTime%7;
         switch (xingQi) {
         case 3:
         case 4:
         {
             while (leftOfEmptyBeds > 0)
             {


if(waiWaitList.isEmpty()&&bai1WaitList.isEmpty()&&otherWaitList.isEmpty()&&bai2Wai
tList.isEmpty())
              {
                  System.out.println("今天无门诊");
                  break;
              }
              if (waiWaitList.isEmpty() == false) //有外伤人数
              {
              proccess(waiWaitList, currentTime, 8);
              }
              //若还有空床,并且单眼白内障队列非空,则
              if(leftOfEmptyBeds >0 && bai1WaitList.isEmpty() == false)
              {
                  proccess(bai1WaitList, currentTime, 5);
              }
              //若还有空床,并且其它眼科队列非空,则处理之
              if(leftOfEmptyBeds >0 && otherWaitList.isEmpty() == false)
              {
                  proccess(otherWaitList, currentTime, 12);
              }
              //之后处理双眼白内障
              if(leftOfEmptyBeds >0 && bai2WaitList.isEmpty() == false)
              {
                  proccess(bai2WaitList, currentTime, 7);
              }


if(waiWaitList.isEmpty()&&bai1WaitList.isEmpty()&&otherWaitList.isEmpty()&&bai2Wai
tList.isEmpty())
               {
                  break;
               }
           }
       }
           break;
       case 5:
       case 6:
       case 0:
{
           while (leftOfEmptyBeds > 0)
           {


if(waiWaitList.isEmpty()&&bai1WaitList.isEmpty()&&otherWaitList.isEmpty()&&bai2Wai
tList.isEmpty())
              {
                  System.out.println("今天无门诊");
                  break;
              }
              if (waiWaitList.isEmpty() == false) //有外伤人数
              {
              proccess(waiWaitList, currentTime, 8);
              }
              //若还有空床,并且其它眼科队列非空,则处理之
              if(leftOfEmptyBeds >0 && otherWaitList.isEmpty() == false)
              {
                  proccess(otherWaitList, currentTime, 12);
              }
              //若还有空床,并且单眼白内障队列非空,则
              if(leftOfEmptyBeds >0 && bai1WaitList.isEmpty() == false)
              {
                  proccess(bai1WaitList, currentTime, 5);
              }
              //之后处理双眼白内障
              if(leftOfEmptyBeds >0 && bai2WaitList.isEmpty() == false)
              {
                  proccess(bai2WaitList, currentTime, 7);
              }


if(waiWaitList.isEmpty()&&bai1WaitList.isEmpty()&&otherWaitList.isEmpty()&&bai2Wai
tList.isEmpty())
               {
                  break;
               }
           }
       }
       break;
       case 2:
       case 1:
       {
           while (leftOfEmptyBeds > 0)
           {


if(waiWaitList.isEmpty()&&bai1WaitList.isEmpty()&&otherWaitList.isEmpty()&&bai2Wai
tList.isEmpty())
              {
                  System.out.println("今天无门诊");
                  break;
              }
              if (waiWaitList.isEmpty() == false) //有外伤人数
              {
              proccess(waiWaitList, currentTime, 8);
              }
//之后处理双眼白内障
              if(leftOfEmptyBeds >0 && bai2WaitList.isEmpty() == false)
              {
                  proccess(bai2WaitList, currentTime, 7);
              }
              //若还有空床,并且单眼白内障队列非空,则
              if(leftOfEmptyBeds >0 && bai1WaitList.isEmpty() == false)
              {
                  proccess(bai1WaitList, currentTime, 5);
              }
              //若还有空床,并且其它眼科队列非空,则处理之
              if(leftOfEmptyBeds >0 && otherWaitList.isEmpty() == false)
              {
                  proccess(otherWaitList, currentTime, 12);
              }


if(waiWaitList.isEmpty()&&bai1WaitList.isEmpty()&&otherWaitList.isEmpty()&&bai2Wai
tList.isEmpty())
                {
                    break;
                }
            }
        }
        break;
        default:
            break;
        }
    }
    //找出动态数组中最小的门诊时间
    public static int minSeeTime(ArrayList<Patient> p){
        int min = 10000;
        for (Patient patient : p) {
            if(patient.getSeeTime() < min)
                min = patient.getSeeTime();
        }
        return min;
    }
    //找出动态数组中某门诊时间的病人数
    public static int numOfPatient(ArrayList<Patient> p,int seeTime){
        int num = 0;
        for (Patient patient : p) {
            if (patient.getSeeTime() == seeTime) {
                num++;
            }
        }
        return num;
    }
    //队列内调度
    public static void proccess(ArrayList<Patient> p ,int currentTime,int
totalTime)
    {    int j;
            for ( j = 0;j<p.size();j++)
            {
                for (int i = 0; i < bed.length; i++)
                    { //遍历病床数组,寻找空床,若出现空床,则将病人填入病床数组,并从等待队列中
将该病人删除。
if (bed[i].isEmpty() == true)
                       {
                           p.get(j).setInTime(currentTime);//入院时间
                           p.get(j).setWaitTime(currentTime-p.get(j).getSeeTime());
//等待时间
                           p.get(j).setOutTime(currentTime+totalTime);//外伤总住院天数为
8天
                           bed[i].setPatients(p.get(j));
                           bed[i].setEmpty(false);
                           p.remove(j); //导致动态数组p的size变小,如果不采取措施,则外层循
环次数越来越少
                           j--;
                           if (leftOfEmptyBeds>0) {
                               leftOfEmptyBeds--; //剩余病床数减少
                           }
                           else {
                               break;
                           }

                           System.out.println(bed[i].getPatients().getDisease()+"入
院");
                           System.out.println("剩余病床:"+leftOfEmptyBeds);
                           break;
                       }
                   }
             }
     }
     //读病人数据
     public static void readPatient(String line,int p[])throws DataFormatException
     {
         StringTokenizer token = new StringTokenizer(line,"_");
         token.nextToken();
                int i = 0;
                while (token.hasMoreElements()) {
                    p[i] = Integer.valueOf(token.nextElement().toString());
                    i++;
                }
     }
}


附录 2

       第五问求解排队系统最优化模型的lingo程序
       max=x/((79/8)*x-1.05)+y/((79/7)*y-2.2)+z/((79/5)*z-1.65)+k/((79/12)*k-3.867);
       x>0;
       y>0;
       z>0;
       k>0;
       (((79/8)*x-1.05))>0;
       (((79/7)*y-2.2))>0;
       (((79/5)*z-1.65))>0;
       (((79/12)*k-3.867))>0;
          x+y+z+k=1;
09 cumcm

More Related Content

Viewers also liked (15)

con cariño
con cariñocon cariño
con cariño
 
Slideshare
SlideshareSlideshare
Slideshare
 
Capitulos
CapitulosCapitulos
Capitulos
 
Como perder barriga em uma semana
Como perder barriga em uma semanaComo perder barriga em uma semana
Como perder barriga em uma semana
 
Escola josé henrique teixeira
Escola josé henrique teixeiraEscola josé henrique teixeira
Escola josé henrique teixeira
 
Presentación EFAD en RELETRAN
Presentación EFAD en RELETRANPresentación EFAD en RELETRAN
Presentación EFAD en RELETRAN
 
Astrologia
AstrologiaAstrologia
Astrologia
 
Begoña gros
Begoña grosBegoña gros
Begoña gros
 
Presentation1
Presentation1Presentation1
Presentation1
 
01 php7
01   php701   php7
01 php7
 
Manifestación de la tecnología
Manifestación de la tecnología  Manifestación de la tecnología
Manifestación de la tecnología
 
Mein blog
Mein blogMein blog
Mein blog
 
Energía limpias y renovables en la informática 2
Energía limpias y renovables en la informática 2Energía limpias y renovables en la informática 2
Energía limpias y renovables en la informática 2
 
Trabajo de internet diapositiva
Trabajo de internet diapositivaTrabajo de internet diapositiva
Trabajo de internet diapositiva
 
Carta mensal Distrito 4310 - Agosto 2015
Carta mensal Distrito 4310 - Agosto 2015Carta mensal Distrito 4310 - Agosto 2015
Carta mensal Distrito 4310 - Agosto 2015
 

Similar to 09 cumcm

Similar to 09 cumcm (8)

常谦_毕业论文
常谦_毕业论文常谦_毕业论文
常谦_毕业论文
 
崇越論文競賽簡報
崇越論文競賽簡報崇越論文競賽簡報
崇越論文競賽簡報
 
2.ie培訓教材
2.ie培訓教材2.ie培訓教材
2.ie培訓教材
 
基于视频的疲劳驾驶检测系统
基于视频的疲劳驾驶检测系统基于视频的疲劳驾驶检测系统
基于视频的疲劳驾驶检测系统
 
Lisheng
LishengLisheng
Lisheng
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 
Mimo ofdm
Mimo ofdmMimo ofdm
Mimo ofdm
 

More from yangliuyouxiang

Yangliu elegant resume public
Yangliu elegant resume publicYangliu elegant resume public
Yangliu elegant resume publicyangliuyouxiang
 
Yangliu elegant resume public
Yangliu elegant resume publicYangliu elegant resume public
Yangliu elegant resume publicyangliuyouxiang
 
Yangliu elegant resume v2.0
Yangliu elegant resume v2.0Yangliu elegant resume v2.0
Yangliu elegant resume v2.0yangliuyouxiang
 
创新中心大学竞赛科研交流PPT
创新中心大学竞赛科研交流PPT创新中心大学竞赛科研交流PPT
创新中心大学竞赛科研交流PPTyangliuyouxiang
 

More from yangliuyouxiang (6)

Yangliu elegant resume public
Yangliu elegant resume publicYangliu elegant resume public
Yangliu elegant resume public
 
Yangliu elegant resume public
Yangliu elegant resume publicYangliu elegant resume public
Yangliu elegant resume public
 
Yangliu elegant resume v2.0
Yangliu elegant resume v2.0Yangliu elegant resume v2.0
Yangliu elegant resume v2.0
 
Yangliu resume 20111010
Yangliu resume 20111010Yangliu resume 20111010
Yangliu resume 20111010
 
创新中心大学竞赛科研交流PPT
创新中心大学竞赛科研交流PPT创新中心大学竞赛科研交流PPT
创新中心大学竞赛科研交流PPT
 
Yangliu
YangliuYangliu
Yangliu
 

09 cumcm

  • 1. 2009 高教社杯全国大学生数学建模竞赛 承 诺 书 我们仔细阅读了中国大学生数学建模竞赛的竞赛规则. 我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括电话、电子邮件、网上 咨询等)与队外的任何人(包括指导教师)研究、讨论与赛题有关的问题。 我们知道,抄袭别人的成果是违反竞赛规则的, 如果引用别人的成果或其他公开的 资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正文引用处和 参考文献中明确列出。 我们郑重承诺,严格遵守竞赛规则,以保证竞赛的公正、公平性。如有违反竞赛规则 的行为,我们将受到严肃处理。 我们参赛选择的题号是(从 A/B/C/D 中选择一项填写): B 我们的参赛报名号为(如果赛区设置报名号的话): 所属学校(请填写完整的全名): 东北大学 参赛队员 (打印并签名) :1. 杨柳 2. 岳坤 3. 庞和明 指导教师或指导教师组负责人 (打印并签名): 王琪 日期: 2009 年 9 月 14 日 赛区评阅编号(由赛区组委会评阅前进行编号):
  • 2. 2009 高教社杯全国大学生数学建模竞赛 编 号 专 用 页 赛区评阅编号(由赛区组委会评阅前进行编号): 赛区评阅记录(可供赛区评阅时使用): 评 阅 人 评 分 备 注 全国统一编号(由赛区组委会送交全国前编号): 全国评阅编号(由全国组委会评阅前进行编号)
  • 3. 目录 1 问题的提出 ...................................................3 2 问题的分析....................................................3 3 模型假设......................................................4 4 符号系统......................................................5 5 病床安排模型评价指标体系的建立(问题一)......................6 5.1 床位使用评价指标.........................................................................................................................................6 5.2 病人满意度评价指标.....................................................................................................................................7 5.3 用评价指标体系对原有床位安排模型进行评价.........................................................................................8 6 病床安排模型的建立与评价(问题二)..........................8 6.1 医院就诊流程分析.........................................................................................................................................8 6.1.1 手术科室病人诊疗的常规运行流程.....................................................................................................8 6.1.2 对诊疗流程的主要环节进行描述.........................................................................................................9 6.1.3 医院医学条件及制度安排分析...........................................................................................................10 6.2 排队论相关知识...........................................................................................................................................10 6.2.1 排队系统...............................................................................................................................................10 6.2.2 顾客到达时间间隔分布和服务时间分布............................................................................................11 6.3 模型一:建立基于 PFCFS 排队算法的病床安排模型..............................................................................12 6.3.1 模型条件...............................................................................................................................................12 6.3.2 模型描述与分析...................................................................................................................................12 6.3.3 床位安排 PFCFS 算法描述..................................................................................................................15 6.4 床位安排模型仿真.......................................................................................................................................16 7 病人住院时间预测模型(问题三)...............................17 7.1 模型二:基于神经网络的病人住院时间预测模型...................................................................................17 7.1.1 神经网络模型的确定...........................................................................................................................17 7.1.2 模型二建立与求解...............................................................................................................................18 7.2 基于模型一计算机仿真的病人住院时间预测方法...................................................................................19 8 周末不安排手术情况下的床位安排模型(问题四)..............20 8.1 问题分析.......................................................................................................................................................20 8.2 模型三:增加手术时间约束的病床安排模型...........................................................................................20 8.2.1 情况 1 下的模型改进............................................................................................................................21 8.2.2 情况 2 下的模型改进............................................................................................................................21 8.2.3 情况 3 下的模型改进............................................................................................................................21 8.3 仿真结果及评价...........................................................................................................................................22 9 病床比例分配模型的建立与求解(问题五)...................22 附录..........................................................26 附录 1..................................................................................................................................................................26 附录 2..................................................................................................................................................................32 10 模型改进方向...............................................23 10.1 考虑病人个人满意度评价.........................................................................................................................23 1
  • 4. 10.2 考虑拒收及病人因为等待队列太长离开排队系统.................................................................................23 10.3 考虑医院因满负荷运作产生的负面效应.................................................................................................24 10.4 考虑医院增加应急预案的情况.................................................................................................................24 参考文献 .....................................................25 医院眼科的最优病床安排方案的研究与求解 摘要 本文首先建立一个病床安排模型评价指标体系,从医院和病人两个方面来考察指 标的选取,选取床位负荷表征指标—平均使用率 Y1 、床位利用效率表征指标—平均周转 次数 Y2 和病人满意度表征指标—平均等待时间 Y3 来评价病床安排方案的优劣,并采用 归一化分析的思想,建立了全面合理的病床安排方案评价体系。 用该评价指标对题中给 出的数据进行分析,得出优化前原平均使用率、 平均周转次数和平均等待时间指标分别 为 100%、8.44 和 10.50。 第二问是一个排队系统动态优化问题。 首先用排队系统理论来描述实际问题,将输 入流按照不同的性质分成四路,分别是外伤、 白内障(双眼)、 白内障(单眼)、 其他眼 科疾病(含青光眼和视网膜疾病)。该问可以将 79 张床位视为一个服务台,病人到达 流服从 Poisson 分布,建立 M / M /1 无限源排队系统。本文主要针对本问要求设计了排 队 PFCFS(Priority-First Come First Serve)算法(见图 6.5),在每周不同的时间 赋予四类病人不同的优先权,排队时不同路队列按优先权排序,优先满足前队列的床 位安排,同路队列内按照 FCFS 原则排序,目标是使得医院资源利用率达到最大并且 病人的平均等待时间最短。 本文用面向对象的思想分析了眼科病床安排过程中各对象属 性的变化,并用 JAVA 编程实现了该排队调度算法,比较优化前后的床位利用指标和 等待时间指标,性能提高了 10.19%,证明了算法的有效性。 第三问应用第二问建立的模型,根据第二问的排队调度模型可以推算出当前等待 队列中病人的最优入院时间,从而可以提前得到门诊病人的入院时间区间。 此外,本文 还尝试用神经网络模型对病人入院时间做出了预测,并将这两种方案得到的预测区间 进行了对比分析。 第四问使用穷举方法。 通过分析缩小穷举范围,对每一种可能的调整情况进行模拟 仿真,得到三种情况下单位时间内病床周转次数分别为:9.27、 9.45、10.30。可以知道 第三种情况相对较好,所以医院手术时间可以调整为在周三与周五进行白内障手术。 第五问要将病床按照床位划归方案划分为多个服务台组,各服务台组专为某一类 病人服务,对于同一类病人以先到先服务的原则进行排队,可以构成几个相互独立的 M / M /1 系统,计算各个排队系统带到稳态时的平均逗留时间。然后确定合理的病床分 配比例让所有的病人的平均逗留时间最短,这样把问题转换为了一般非线性规划问题, 用 LINGO 软件即可求解,最佳床位比例分配方案见下表。 疾病类型 外伤 白内障(双眼) 白内障(单眼) 其他眼科疾病 病床分配比例 0.106 0.194 0.113 0.587 分配床位数 8 15 9 47 2
  • 5. 最后本文就所建立的三个模型在实际运用中的作用进行了分析,并提出了改进方 向,结合实际,加入重要因素的考虑,比如考虑拒收及病人损失情况、病床满负荷运行 的负面效应、应急预案等。 关键词: 排队系统 PFCFS 算法 归一分析法 BP 神经网络 模型仿真 面向对象 1 问题的提出 本题研究医院眼科的病床最佳优化方案,提出了医院眼科病床的合理安排的数学 建模问题。 该医院眼科门诊每天开放,住院部共有病床 79 张。 该医院眼科手术主要分四 大类:白内障、 视网膜疾病、 青光眼和外伤,给出了 2008 年 7 月 13 日至 2008 年 9 月 11 日这段时间里各类病人的情况。 白内障手术较简单,而且没有急症。目前该院是每周一、三做白内障手术,此类病 人的术前准备时间只需 1、 天。 2 做两只眼的病人比做一只眼的要多一些,大约占到 60%。 如果要做双眼是周一先做一只,周三再做另一只。 外伤疾病通常属于急症,病床有空时立即安排住院,住院后第二天便会安排手术。 其他眼科疾病比较复杂,有各种不同情况,但大致住院以后 2-3 天内就可以接受 手术,主要是术后的观察时间较长。 这类疾病手术时间可根据需要安排,一般不安排在 周一、周三。由于急症数量较少,建模时这些眼科疾病可不考虑急症。 该医院眼科手术条件比较充分,在考虑病床安排时可不考虑手术条件的限制,但 考虑到手术医生的安排问题,通常情况下白内障手术与其他眼科手术(急症除外)不 安排在同一天做。当前该住院部对全体非急症病人是按照 FCFS(First come, First serve)规则安排住院,但等待住院病人队列却越来越长,医院方面希望你们能通过数 学建模来帮助解决该住院部的病床合理安排问题,以提高对医院资源的有效利用。 问题一:试分析确定合理的评价指标体系,用以评价该问题的病床安排模型的优 劣。 问题二:试就该住院部当前的情况,建立合理的病床安排模型,以根据已知的第 二天拟出院病人数来确定第二天应该安排哪些病人住院。 并对你们的模型利用问题一中 的指标体系作出评价。 问题三:作为病人,自然希望尽早知道自己大约何时能住院。 能否根据当时住院病 人及等待住院病人的统计情况,在病人门诊时即告知其大致入住时间区间。 问题四:若该住院部周六、 周日不安排手术,请你们重新回答问题二,医院的手术 时间安排是否应作出相应调整? 问题五:有人从便于管理的角度提出建议,在一般情形下,医院病床安排可采取 使各类病人占用病床的比例大致固定的方案,试就此方案,建立使得所有病人在系统 内的平均逗留时间(含等待入院及住院时间)最短的病床比例分配模型。 2 问题的分析 本题研究医院眼科中的排队现象以及床位安排方案问题。 首先要求建立一个评价指 标体系来评价病床安排模型的优劣,应从医院和病人两个方面来考察指标体系的选取, 最优的安排方案应使得双方的利益尽量得到均衡。 本文选取床位负荷表征指标—平均使 用率 Y1 、床位利用效率表征指标—平均周转次数 Y2 和病人满意度表征指标—平均等待时 间 Y3 来评价病床安排方案的优劣,并采用归一化分析的思想,建立了全面合理的病床 3
  • 6. 安排方案评价体系。用该评价指标对题中给出的数据进行分析,以便与病床安排模型优 化后的情况作比较。 第二问是一个排队系统动态优化问题,要求建立病床安排模型,由次日出院病人 的情况来确定第二天应该要安排哪些病人入院,实质是要制定一个合理的调度方案, 使得床位利用的各项指标和病人等待时间指标都达到最优。 可以通过合理入院时间的选 取来最大限度的减少病人的等待时间。 首先用排队系统理论来描述实际问题,将输入流 按照不同的性质分成四路,分别是外伤、 白内障(双眼)、 白内障(单眼)、其他眼科疾 病(含青光眼和视网膜疾病),建立 M / M /1 无限源排队系统。我们主要针对本题要求 设计了排队规则,目标是使得当排队系统达到稳态时,通过合理的调度方案安排合适 类型的病人入院填补空床,使得所有病人的平均等待时间最短,建立床位安排模型后, 本文还用面向对象的思想分析了眼科病床安排过程中各对象属性的变化,并用 JAVA 编 程实现了自己设计的排队调度算法的计算机仿真,并与原 FCFS 规则排队的模型对比床 位利用指标和等待时间指标,优化效果显著,说明了算法设计的有效性。 第三问是对第 二问建立的模型的一个实际应用,根据第二问的排队调度模型可以推算出当前等待队 列中病人的最优入院时间,从而可以提前得到门诊病人的入院时间区间。 此外,本文还 尝试用神经网络模型对病人入院时间做出了预测。 第四问增加了一个新的约束,规定周六和周日不能安排手术,需要解决的问题是 医院的手术时间安排是否应作出相应调整,这就需要将不调整时的状态与各种调整后 的状态进行对比,调整后若能产生更好的结果,则就对手术时间安排进行调整,若调 整后的结果都不尽如人意,就不需要对手术时间安排进行调整了。一周只有 7 天,而且 双眼白内障手术是有限制的,即两次手术之间需要隔一天,这就决定了白内障手术应 保持隔一天手术一次的安排,调整时不能改变两次手术时间间隔。 有了此限制对于手术 时间的安排,可进行调整的情况也不多,可以使用穷举的方法,对每一种调整情况进 行分析,最后根据各种情况的仿真结果进行分析和评价,确定是否需要进行手术时间 安排的调整。对于急症患者,仍按照优先就诊的原则,周六和周日也对其进行手术。 最后一问将床位划归给了各类不同类型的病人,此时在排队系统建模时就不能再 将所有的床考虑为一个整体当成服务台,而是要按照床位划归方案划分为多个服务台 组,可以构成几个相互独立的 M / M /1 系统,计算各个排队系统带到稳态时的平均逗 留时间。然后确定合理的病床分配比例让所有的病人的平均逗留时间最短,这样把问题 转换为了一般非线性规划问题,用 LINGO 软件即可求解。 3 模型假设 1. 不考虑医院满负荷运行状态下造成的人力和财力的负面影响; 2. 前来医院就诊的患者数量保持一定规律,不考虑病情的季节性变化以及其它原因 造成的就诊病人数量的大幅度改变情况; 3. 除了外伤属于急症外,不考虑其他眼科疾病的急症情况; 4. 假定病人源无限,并且服务空间容量无限,不考虑拒收或是由于等待队列太长导 致病人失去耐心离开排队系统的情况; 5. 该医院眼科手术条件比较充分,在考虑病床安排时可不考虑手术条件的限制只要 考虑到手术医生的安排问题,白内障手术与其他眼科手术(急症除外)不安排在 同一天做; 6. 不考虑病床消毒、维修、保养等时间,假定所有病床始终运行情况良好,在满负荷 情况下总能够配备充足的护士维护人员及物资资源等。 4
  • 7. 4 符号系统 Y1 床位负荷表征指标—平均使用率 Y2 床位利用效率表征指标—平均周转次数 Y 床位使用效率指标 y1 标准化床位使用率 y2 标准化床位周转率 bi 第 i 天被使用的床位数 n 病床总数 T 统计期天数 N in 统计期内入住医院的总人数 tj 在家等待时间 t j' 在医院等待时间 pi 第 i 类病人前来门诊的概率 ni 统计期内第 i 类病人数。 Ls 系统平均队长 Lq 等待队列平均长度 Ws 病人平均逗留时间 Wq 在等待队列中的等待时间 c 分组后病床数目 ρ 服务强度 λ 病人门诊到达率即单位时间内前来门诊的病人数目 µ 平均服务率即单位时间内能够被服务的病人数目 γi 病人的床位占总床位数的比例 T 四类病人的平均逗留时间为 Wsi 第 i 类病人平均逗留时间 xi 第 i 病人的总人数 tsq 术前准备时间 ts 手术时间 thg 术后观察时间 tz 一个病人从入院到出院的总时间 t ws 外伤病人入院时间 t sqjd 术前阶段时间 t sqdd 术前等待时间 t sb 双眼白内障病人等待时间 tdy 单眼白内障病人等待时间 5
  • 8. 5 病床安排模型评价指标体系的建立(问题一) 5.1 床位使用评价指标 对于床位安排模型的评价应该从医院和病人双方面来选取指标体系。 对医院而言, 应该要使得其工作效率达到最大,而床位的利用情况是反映医院工作效率的重要指标。 反映床位利用情况的指标主要有[1]:  平均病床工作日:是指平均每张床位一定时期内的工作天数,反映床位的使用 情况。由于修理、 消毒或其它原因,每张病床不可能每天都在使用,即病床不应 该总处于满负荷状态。    实际床位使用率:它反映平均每天使用床位与实有床位的比例情况。  床位周转次数:床位周转次数是衡量医院床位周转速度快慢的指标。  床位周转间隔:是从一个病人出院到下个病人入院的间隔天数,按每张床计算 出的数值。  手术前平均占用病床日:它反映病人入院之后手术之前占用病床的天数。如果 能恰好等于手术准备所需的时间,那么可以使病床高效使用;如果与实际手术 准备所有时间相差甚远则说明病床的安排不合理,因为这部分病床的占用本可 以避免。  平均住院日:指统计期内病人平均住院的时间。缩短平均住院日是开发病床资 源的一种重要手段,既能节省床位投资,使现有的卫生资源得到充分有效的利 用,又能使医院的技术优势得到充分发挥,为医院增加收益。   上述指标体系中平均床位工作日与实际床位使用率两项指标形式不同,前者用平 均数表示,后者用百分数表示,但本质是一样的,都是反映床位负荷。 它受床位周转次 数、周转间隔时间的制约。在正常情况下,床位每周转 1 次,就会出现一定的周转间隔, 周转次数少,周转间隔长,出现空床的机会就多,平均床位工作天数就少,床位使用 率就低。而床位周转次数与出院者平均住院天数成反比。因此在保证模型合理有效的前 提下,为了尽可能简捷的评价床位安排方案,本文选取了下列指标来评价病床使用情 况: 床位负荷表征指标—平均使用率 Y1 ; 床位利用效率表征指标—平均周转次数 Y2 。 需要说明的是使用率指标当某输入病人流大于输出病人流时,病床使用率会不断 上升,直到达到 100%后稳定下来,其变化规律如图 5.1 所示。 6
  • 9. 图 5.1 病床占用量随着时间变化图象 各指标的计算方法如下,采用了归一分析的思想: 病床平均使用率 n ∑b i Y1 = i =1 Tn 病床平均周转次数 N in Y2 = T 其中, bi 是第 i 天被使用的床位数, n 为病床总数, T 为统计期天数, N in 为统计期内入 住医院的总人数。定义床位使用效率指标 Y Y Y Y= 1× 2 y1 y2 y1 和 y2 分别为标准化使用率和标准化床位周转率,根据卫生部有关评审标准及医 院所定的管理目标,若以一年为统计期,则床位使用率标准值为 89%,床位周转率标准值 为 21 次[2]。这个指标就全面反映了床位使用负荷及效率状况。 5.2 病人满意度评价指标 从病人的角度而言,要尽可能的提高病人的满意率,病床的安排方案会影响病人 接受手术的等待时间。除了外伤属于急症,需要立即入院,次日安排手术治疗外,其他 三种疾病在不考虑急症的情况下都需要等待,最优的病床安排方案应使得病人的等待 时间最少,等待队列最短。所以选取表征病人满意率的指标—病人等待时间 Y3 。由于不 7
  • 10. 同类型的病人所需等待时间差异较大,比如患白内障(双眼)的病人只能在周一开始 手术,这部分病人的等待时间无疑要长一些,因此应该将不同类型的病分开考虑。等待 时间指标 Y3 的计算方法为 ni 5 ∑ (t j + t j ' w) Y3 = ∑ ( j =1 ) pi i =1 ni ' 等待时间分为在家等待时间 t j 和在医院等待时间 t j 两种,后者比前者更加耗费医 院的医疗成本,并且由于病人在医院里生活受到种种限制,其不满意度会因此更加显 著的增加,因此要引入一个权值 w( w > 1) 来描述在医院等待时间比在家等待时间对不满 意度的影响更剧烈。 pi 为第 i 类病人前来门诊的概率,将白内障(单眼)、白内障(双 眼)、视网膜疾病、青光眼和外伤五类病人单独考虑。 ni 为统计期内第 i 类病人数。 5.3 用评价指标体系对原有床位安排模型进行评价 为了与后面优化后的床位安排模型作对比,这里先用建立的评价指标体系对题目 中给出的原有的床位安排模型相关数据进行评价,用 Excel 表格可以很快算出原有 FCFS 规则下的床位安排模型的各项评价指标值,如表 5.1 所示。 表 5.1 原有 FCFS 规则床位安排模型的各项评价指标值 评价指标项 床位平均 床位平均 标准床位使用 病人等待 使用率 Y1 (系 周转次数 Y2 效率指标 Y 时间指标 Y3 统达到稳定后) 数值 100% 8.44 2.71 10.5 6 病床安排模型的建立与评价(问题二) 6.1 医院就诊流程分析 6.1.1 手术科室病人诊疗的常规运行流程 病人从出现症状入院到确诊需要进入手术室,再从手术室通过手术等治疗治愈出 院,这一流程是病人诊疗的常规运行流程。(如图 6.1 所示) 8
  • 11. 急诊 等 术 出 待 前 院 入 手 入 准 院 术 院 备 门诊 图 6.1 手术科室病人诊疗常规流程概况图 从图中可以看出诊疗流程的一些特点:1. 流程流向单一,大多数手术病人的诊疗 流程的流向基本一致。2. 流程环节较多,图中已经简化了诊疗流程,但仍能看出过程 较为复杂,加之病人的病情程度以及科室的忙闲程度都有很大的差异,容易造成流程 的周转不畅。3. 流程的周期较长,从确诊到手术完成后出院病人经历整个诊疗流程的 时间相对较长。 6.1.2 对诊疗流程的主要环节进行描述 诊疗流程的运作必然牵扯到每个环节的运作,环节与环节之间的有效衔接,才能 使得整个诊疗过程运行便捷、通畅。所以下文对这些主要环节和各环节之间的关系进行 必要的描述。手术病人诊疗过程主要分为以下两部分: 1. 住院前 住院前主要集中在门、急诊阶段,共经历挂号、候诊、接诊、等待检查、检查、办理缴 费、住院手续及等待住院 6 个主要环节。本文将此六个环节归为病情确定(前五个环节) 和等待住院两个阶段。接下来对这两个阶段内容进行一下介绍。 病情确定:从病人到医院至病人病情程度的确定,办完住院手续。 这个阶段医院根 据病人要进行眼科手术的种类对病人进行相应的归类,之后根据实际情况进行入院安 排。 等待住院:病人已确定病情及办完入院手续,根据安排的入院日期等待入院接受 治疗。 2. 住院后 手术病人住院后,流程则分为术前阶段、术中阶段、术后阶段。(见图 6.2) 入院 术前等待 术前准备 手术(有多次手术情况)术后观察 出院 术前阶段 术中阶段 术后阶段 图 6.2 手术病人住院过程图 9
  • 12. 对于术前阶段本文不考虑入院所花的时间,只计算术前准备和术前等待时间,而 如何减少术前等待时间是提高医院病床利用效率的关键;术中阶段有不同情况之分, 大部分病人只需接受一次手术即可治愈出院,但对于双眼的白内障患者,其需要进行 两次手术;术后阶段的出院时间,本文中也不考虑。 6.1.3 医院医学条件及制度安排分析 根据已给材料可以得到以下医院相关信息: 1. 医院眼科门诊每天开放,住院部共有病床 79 张; 2. 医院眼科手术主要分四大类:白内障、视网膜疾病、青光眼和外伤; 3. 白内障手术较简单,而且没有急症。每周一、 三做白内障手术,此类病人的术前 准备时间只需 1、2 天。做两只眼的病人比做一只眼的要多一些,大约占到 60%。 如果要做双眼是周一先做一只,周三再做另一只; 4. 外伤疾病通常属于急症,病床有空时立即安排住院,住院后第二天便会安排手 术; 5. 其它眼科疾病大致住院以后 2-3 天内就可以接受手术。 这类疾病手术时间一般不 安排在周一、周三。由于急症数量较少,这些眼科疾病可不考虑急症。 6. 白内障手术与其它眼科手术(急症除外)不安排在同一天做; 7. 住院部对全体非急症病人是按照 FCFS(First come, First serve)规则安排 住院(此处是需要建模改进的地方)。 6.2 排队论相关知识 排队理论是一门应用十分广泛的运筹学分支,它在各种存在等待情形的环境中都 有非常成功的应用。简单的说,排队论就是研究排队现象建立排队模型。建立排队模型 的目的就是要规划一种为顾客提供服务的方式以实现一定的运营效率。本文通过使用排 队论相关知识,建立病床安排模型,并对问题进行了求解。 6.2.1 排队系统 一个排队系统有三个基本组成部分:顾客输入过程、排队结构与排队规则、服务机 构与服务规则[3],排队服务过程见图 6.3。 10
  • 13. 排队规则 服务规则 排队结构 服务机构 … 顾客源 顾客到来 顾客离去 图 6.3 排队系统 输入过程:指顾客到达排队系统的规律。可用到达时间间隔或单位时间内顾客到达 数的概率分布描述。 按到达时间间隔分为确定时间间隔和随机时间间隔;按顾客到达方 式有单个到达和成批到达;从顾客元来看,分有限元总体和无限远总体。 排队规则:排队系统一般分等待制、损失制和混合制。不同的排队规则适应不同的 排队状况。 服务规则:指排队系统中服务台的个数、排列以及服务方式。 服务台:排队系统服务台的个数可以是一个或多个,多个服务台可以是串联或并 联。 6.2.2 顾客到达时间间隔分布和服务时间分布 如果顾客到达满足如下条件,则称为泊松流: 1) 在不相互重叠的时间区间内,到达顾客数相互独立(无后效性); 2) 对于充分小的时间间隔 [t , t + ∆t ] 内,到达 1 个顾客的概率与 t 无关,仅与时间间隔 成正比(平稳性): P (t , t + ∆t ) = λ∆t + ο (∆t ) 3) 对于充分小的时间间隔 [t , t + ∆t ] ,2 个及以上的顾客到达的概率可忽略不计(普遍 性)。 对于泊松流,在时间 t 系统内有 n 个顾客的概率服从如下泊松分布: (λ t ) n − λ t Pn (t ) = e , t > 0, n = 0,1, 2,L n! 式 (6.2) 中的参数 λ 代表单位时间里到达顾客的平均数,即平均到达率。则 1 λ 代表平均 的顾客到达时间间隔。 而泊松流到达时间间隔服从负指数分布,所以顾客到达时间间隔分布服从负指数分 布。 根据已有资料,各类病症的手术准备时间已给出,手术通常一天内即可完成,所以 本文将服务时间分布当做定长分布,相关数据由提供的 2008-07-13 到 2008-09-11 的 病人信息统计获得。 11
  • 14. 6.3 模型一:建立基于 PFCFS 排队算法的病床安排模型 根据已有信息可以知道,本模型的重点是建立一个合理的排队规则来提高医院病床 的利用效率。基于排队理论, 本文设计了排队 PFCFS(Priority-First Come First Serve)算法,在每周不同的时间赋予四类病人不同的优先权,排队时不同路队列按优 先权排序,优先满足前队列的床位安排,同路队列内按照 FCFS 原则排序,目标是使 得医院资源利用率达到最大并且病人的平均等待时间最短。 6.3.1 模型条件 1. 病人输入过程:采用病人到达的时间间隔分布来描述输入过程。病人到达之间 是相互独立的服从无记忆的泊松分布。 2. 病人排队规则:混合制,普通病人根据病症种类进行分类排队,各队列之间根 据优先级决定入院先后(详见模型描述),队列内部按先到先服务原则排列。 3. 服务原则:对于病种不同的病人采用对应的服务,即手术。 6.3.2 模型描述与分析 将所有病人根据所要做的手术分为四类:单眼白内障、 双眼白内障、外伤、其它眼科 疾病。使用四个队列分别排列这四类病人。 通过已有数据,可以得到各类眼病入院手术的时间情况,如术前准备时间 tsq 、 手术 时间 t s 、术后观察时间 thg 等。各类手术术前准备时间直接可知;对于术前等待时间,因 为要增加床位利用效率,所以本模型中设计其为零;手术时间除双眼白内障外都为一 天时间,双眼白内障两次手术中间隔了一天,本文将双眼白内障手术时间作为三天处 理;至于术后观察时间,可以通过已给出的医院历史数据对每种手术的术后观察时间 进行统计,将其均值(向上取整后)作为此类手术的术后观察时间。 一个病人从入院到出院的总时间 t z 可由式 t z = tsq + ts + thg 得出,数据详情见表 6.1。 表 6.1 各类型手术时间使用表 手术类型 术前准备 t sq 手术时间 t s 术后观察 thg 总时间 t z (天) (天) (天) (天) 单眼白内障 1 1 3 5 白内障(双眼) 1 3 3 7 外伤 1 1 6 8 其它眼科疾病 2 1 9 12 由医院医学条件及制度安排分析可得一周内各类手术安排情况,见表 6.2。 表 6.2 一周内各类型手术时间安排表 手术类型 可进行手术时间 单眼白内障 周 1、周 3 12
  • 15. 白内障(双眼) 周1 外伤 任意时间 其它眼科疾病 周 2、周 4、周 5、周 6、周 7 结合两表,可以得到下文约束条件来提高病床使用效率。 因为入院后的术中阶段和 术后阶段的时间是确定的,不会因为入院的日期不同而变化,提高床位使用效率就是 减少术前阶段的时间。 原来医院的先到先服务的排队原则导致有些病人在入院后需等待 较长时间才能进行手术,这样等待的这段时间相当于床位空闲,既浪费医院资源又浪 费病人治疗费用。 提高效率的原则为只要安排了病人入院,则表明其可以直接进行术前准备,之后 便可进行手术,不需要手术等待时间,不再只使用先到先服务的排队原则,这样便可 以提高病床有效利用的时间,减少虚的院中等待时间。 以一周为一个工作周期,约束条 件如下: 1. 外伤属于急症,无论在什么时候其优先级均为最高,此类病人确诊后尽快安排 住院,入院后第二天便可接受手术,不分一周内哪一天。 2. 因为双眼白内障手术只能安排在周一开始做,错过时间的话需等一周时间,又 此手术的准备时间为 1 : 2 天,所以为了不额外的占用病床,需要在周六或周日 优先将等待入院的双眼白内障患者安排入院,对于其它时段确诊的双眼白内障 患者,即使其住进医院,其也不能进行手术,另外占着的床位不能给其他患者 使用,降低了病床利用率。所以对于没有在周六和周日确诊的双眼白内障患者 使其排在双眼白内障队列中等待下次入院安排。 3. 单眼白内障可以在周一或周三进行手术,其手术准备时间也为 1 : 2 天,如果错 过周三,则需要等很多天,至下周一,所以在周六或周日时双眼白内障患者住 院安排完后若有空病床应先考虑单眼白内障患者。此外在周一或周二,若有单 眼白内障患者等待入院应优先考虑。其它时段内单眼白内障患者应排在相应队 列内等待下次入院安排。 4. 其它眼科疾病因其手术准备时间为 2 : 3 天,时间较长,而且在除周一和周三剩 余的时间内均可接受手术,计算可知其可在一周的任意一天内入院,而且不会 额外占用病床。所以在除以上三个条件的情况下,应考虑其它眼科疾病的手术 优先。 通过以上约束条件,可以得到一周不同时间段内各类病症入院的优先级,见表 6.3(表中数值越大表示此种疾病入院的优先度越高, 0 表示不进行入院安排),根据 此表中相应日期各病症优先级当日对不同疾病的病人进行入院安排,作为入院规则的 主要依据。 表 6.3 一周各时间段各类手术的优先程度表 手术类型 周 6、周 7 周 1、周 2 周 3、 4、 周 周 优先级 优先级 5 优先级 白内障(单眼) 2 3 0 白内障(双眼) 3 0 0 外伤 4 4 4 其它眼科疾病 1 2 3 但从另一方面看,这种原则会使某些先到的病人后来才进行手术,后到的病人反 而有可能先接受手术。 此原则下,各类病人入院时间变化分析: 13
  • 16. 外伤:此类病人入院原则没有改变,即优先入院。病人入院时间 t ws 不变,即 ∆t ws = 0 双眼白内障:此类病人只在周六和周日安排入院,其它时间均放在其相应的等待 队列中等待,这样虽然感觉推迟了病人的入院时间,事实上取得了更好的效益。 按照先 到先服务的原则此类病人入院时间不在周六周日的情况有 3 种。 1. 病人确诊时间不在周六周日,医院等待入院的病人总数较少,按照先到先服务 的原则病人可以在本周的周六前入院,若将这类病人推迟到周六或周日入院,并没有 增加其整个术前阶段的时间 t sqjd ,反而将其在医院等待入院的时间 t sqdd ,改为院外等待, 这样既可以给自己省钱,又可以给院方节省资源; t sqjd + ∆tsqjd ∆tsqjd (=0) 2. 病人确诊时间不在周六周日,医院等待入院的病人总数较多,按照先到先服务 的原则病人不可以在本周的周六前入院,如果其能在本周周六或周日入院,和第一种 情况相似, t sqjd + ∆tsqjd ∆tsqjd (=0) . 如果其需要安排在下周则根据上述优先原则在周六或周日优先安排其入院,这样 便提前了其入院的时间,对于此类病人来说提高了满意度, t sqjd + ∆tsqjd ∆tsqjd (<0) 如果在此原则下仍安排在了下周手术,根据情况将其再归为情况 1 或情况 2,总体 上病人入院时间得到了优化; 3. 病人确诊时间在周六或周日,医院等待入院的病人总数较多,按照先到先服务 的原则不能在本周周六或周日入院,此时根据上述优先原则,若本周周六或周日出院 人数多于同类等待病人,病人可在本周提前入院,此时对病人来说提高了满意度, t sqjd + ∆tsqjd ∆tsqjd (<0) . 如果在此原则下仍安排在了下周手术,根据情况将其视为为情况 1 或情况 2 处理。 总体上双眼白内障病人入院时间得到了优化。 单眼白内障:对于周一或周二的情况和双眼白内障周六或周日的情况大致相同。对 于周六和周日其可能因为优先安排了双眼白内障患者而住院推迟,这时用一个病人情 况进行一下对比,双眼白内障患者可以节省近一周的等待时间( ∆t sb < 0 ),单眼白内 障患者等待时间可能增加一至两天到下周一或周二(因为周一或周二其优先度高于其 他两类普通眼病,所以在周一或周二入院的可能性很大),也可能增加三至四天至下 周周六或周日( ∆tdy > 0 ),综合来说病人总体等待时间没有增加,而且减少的可能性 较大,交换后时间变化 ∆t sd = ∆t sb + ∆tdb 其他眼科疾病:在周六、周日、周一和周二的这段时间,其优先度相对其它几种病来 说较低,这样其在这段时间内手术被推迟的概率比较大,根据表 6.1 知道此类手术的 时间是比较长的,所以在等待相同时间的情况下,此类病人的满意度应该高于其他几 类病人。 并且在周三至周五这三天内除急诊外全部安排的为此类病人,其等待的时间并 不会过长,至多为四天,并且此种情况的概率较小,加上有些病人会提前安排入院, 两者可以做一下抵消。对总体等待时间影响较小。 此外,经过对已给数据的统计可以得到图 6.4 所示的各类病人比例分布图,见图 6.4。 14
  • 17. 图 6.4 医院接待各类病人比例分布饼图 从图中数据可以看出,其他眼科疾病所占比例最大,除外伤外其它三种病的比例 接近 2: 1: 1 ,而普通病症中其他眼科疾病在一周内所占绝对优先比例也为最多( 3 天), 白内障双眼所占绝对优先比例为 2 天,白内障单眼所占绝对优先比例为 2 天,这与其 病症比例接近,所以按此优先级进行床位安排是有一定合理性的。 综上,总体病人等待时间变化会比原来排队原则下的情况有所优化,医院资源使 用效率会大幅提高。 6.3.3 床位安排 PFCFS 算法描述 根据已经制定的优先级规则,将四类病人使用四个队列分别进行排列,各类病症 的优先级即为相应队列的优先级,队列内部按照先到先服务的原则进行排列。算法流程 图见图 6.5。计算机仿真程序源码实现见附录 1。 15
  • 18. 开始 系统时钟状态更新 T 新病人病 情确诊 医院状态更新 病人等待队列状态更新:病人 根据自己得病类型进入相应等 待队伍,各等待队伍内部按先 到先服务原则排列 院内床位 信息更新 是否有空床 F 病人出 计算院内 T 院 空床数 确定当前日期,依据表 6.3中数据给各病症队 列付相应优先权值 按队列优先权值大小,依 次选取队列,队列内部按 先到先服务原则进行入院 安排,直至没有空床 院内床位状 病人等待队 态更新 列状态更新 图 6.5 床位安排 PFCFS 算法流程图 6.4 床位安排模型仿真 通过使用计算机仿真,使用按照泊松分布随机生成的病人数据,得到表 6.4 的仿 真结果。 16
  • 19. 表 6.4 床位安排模型仿真数据表 时间 1 2 3 4 5 6 7 8 9 1 1 1 1 1 1 1 1 1 1 20 (天) 0 1 2 3 4 5 6 7 8 9 当天 1 1 1 8 1 1 6 6 9 5 9 1 1 1 5 1 5 7 8 7 入院 0 0 8 3 2 6 1 2 0 人数 表中取医院达到满床位状态后的数据,这样是为了能和原始数据进行更好的比较, 问题一中得到的指标是根据原始数据得到的,而原始数据便是医院满员时的情况(即 床位使用率为 100% )。表中显示的信息为每天入院的人数,利用问题一中的指标体系, 通过表中数据可以得到这段时期内医院的平均病床周转次数为 9.3。 从统计数据中可以看到,与问题一中的原始数据统计结果相比,本模型仿真出的 结果较好,病床单位时间内的周转次数明显好于原始数据统计结果,平均每天可以对 接待一名病人。 而病人平均等待时间通过问题二的模型分析可知总体上平均等待时间不 会变坏,所以在这里就已病床周转次数为主。 经过对比,本模型具有比较好的优化能力。 7 病人住院时间预测模型(问题三) 7.1 模型二:基于 BP 神经网络的病人住院时间预测模型 7.1.1 BP 神经网络模型的确定 在进行 神经网络的设计时,一般应从网络的层数,每层中的神经元个数和输出 BP 变换函数,初始权值及学习速率等几个方面考虑[4] 1) 网络的层数 理论上已证明:具有偏差和至少一个 S 型隐含层加上一个线性输出层的网络,能够 逼近任何有理数。这实际上已经给出了设计 网络的基本原则。 BP 2) 隐含层的神经元数 网络训练精度的提高与隐含层的神经元数目密切相关,用 L 表示隐含层神经元的数 目,则 L 的初始值可由以下两个公式中的其中之一来确定: L = m+n L = 0.43mn + 0.12n 2 + 2.54m + 0.77 n + 0.35 + 0.51 其中 m , n 分别为输入层神经元数目与输出层神经元数目。 3) 初始权值的选取 对非线性系统,初始权值对于学习是否达到局部极小,是否能够收敛以及训练时间 的长短关系很大。如果初始权值很大,使得加权后的输入和落在 S 型函数的饱和区,导致 其导数非常小,从而使学习过程几乎停止。 所以,一般取初始权值为(-1,1)之间的随机数。 4) 学习速率 学习速率决定每一次循环训练所产生的权值变化量。 大的学习速率可能导致系统的 不稳定;小的学习速率则导致较长的训练时间和较慢的收敛速度。 一般的做法是采用自 适应学习速率,使网络的训练在不同的阶段自动设置不同大小的学习速率。 17
  • 20. 7.1.2 模型二建立与求解 在实际应用中, BP 网络一般采用 3 层结构,本文也不例外。 对于 BP 网络输入层的 节点数,本文采用了当时住院病人人数和等待住院病人人数这两个输入变量,即: N i ——第 i 天累积住院人数 Wi ——第 i 天累积等待住院人数 其中 0 ≤ i ≤ 45 (从 2008 年 7 月 13 号开始)。病人的等待住院时间即可 BP 网络的输 出变量。 由于外伤通常情况下属于急诊,在有空床位的情况下应该优先考虑让给外伤患者。 根据题目所给的数据可以看出:外伤患者都是只等了一天就可以入院。 设外伤患者的门 诊日期为 D ,则外伤患者的入院时间 T 为 T = D +1 其它病例可以直接通过 网络进行预测。根据实际情况可知,各种病例的病人所 BP 对应的等待时间不尽相同,呈现不同的变化规律。 所以,本模型只对白内障(单眼)进行 分析说明,其它比例可进行类推。 7.1 为白内障(单眼)在 45 天内每天的住院人数、 图 当 时的等待住院人数及等待住院时间的关系变化曲线。 图 7.1 输入变量和输出变量的关系曲线 经过分析可以知道病人等待住院时间跟当前等待住院人数和当前已住院人数有关。 由于单眼白内障等待时间相对集中,所以本文定 神经网络的输入层神经元个数为 BP 10,最终预测结果如图 7.2 所示。 18
  • 21. 图 7.2 等待时间的预测与仿真曲线对比图 从图中可以看出,单眼白内障患者实际住院时间大部分集中在[12,13]这个区间内, 而该 BP 神经网络模拟出来的等待时间几乎接近 12.5 天,与实际值的总体误差控制在 了 0.5 天内。所以该神经网络模拟的结果与实际结果可以认为两者相吻合,从而得出该 预测模型比较合理。这样就可以通过训练后的神经网络来预测其对应的等待时间。 7.2 基于模型一计算机仿真的病人住院时间预测方法 模型一中用 JAVA 建立的计算机仿真程序(源文件见附录一)也可以用于提前预测 病人的入院时间。只要确立了排序规则,比如优化之前的 FCFS 规则以及模型一中的调 度优先权规则,在病人流和服务时间满足一定概率分布的情况下,就可以提前推算出 某一位门诊病人的入院时间、出院时间及等待时间。以模型一中的调度优先权规则为例, 输入服从泊松分布的伪随机数作为每天的门诊病人数,通过不断循环重复每天各个对 象状态的变化过程,总能找到当天门诊者入院的那天。图 7.3 列出了计算机仿真程序输 出的部分结果,其中时间指从统计期的第一天算起当天的序号,第一天的序号记做 “1”,这样只要改变循环次数就可以推出任意一天入院和出院的人员情况,也可以提 前推算任意一个病人的出院时间。 19
  • 22. 图 7.3 自编计算机仿真程序的部分输出结果 8 周末不安排手术情况下的床位安排模型(问题四) 8.1 问题分析 若该住院部周六、周日不安排手术,则在不改变其它任何条件的情况下,受到影响 较大的是其它眼科疾病,对于白内障手术而言,影响很小。现在需要解决的问题是医院 的手术时间安排是否应作出相应调整,这就需要将不调整时的状态与各种调整后的状 态进行对比,调整后若能产生更好的结果,则就对手术时间安排进行调整,若调整后 的结果都不尽如人意,就不需要对手术时间安排进行调整了。一周就 7 天,而且双眼白 内障手术是有限制的,即两次手术之间需要隔一天,这样的话就决定了白内障手术应 保持隔一天手术一次的安排,调整时不能改变两次手术时间间隔。有了此限制对于手术 时间的安排,可进行调整的情况也不多,可以使用穷举的方法,对每一种调整情况进 行分析,最后根据各种情况的仿真结果进行分析和评价,确定是否需要进行手术时间 安排的调整。对于急症患者,仍按照优先就诊的原则,周六和周日也对其进行手术。 根据上述等到的条件,两次白内障手术时间安排情况可分为表 8.1 中的几类: 表 8.1 两次白内障手术时间安排表 两次白内障手术时间安排情况 日期 情况 1 周 1、周 3 情况 2 周 2、周 4 情况 3 周 3、周 5 对于以上三种情况分别进行模型仿真和数据分析,可得出每种情况的结果,经过对比 后判断是否对手术时间安排进行调整。 对比的原则是以病床周转次数为主要指标,仿真数据均取病床利用率为 100% 时的 数据。因为使用模型设计的床位安排方案病人等待的时间变化不具有很强的对比价值, 而且本模型主要是为了提高床位利用效率,所以为简化对比过程,比较时不考虑病人 平均等待时间的改变。 8.2 模型三:增加手术时间约束的病床安排模型 对于本问题,改变的条件有:住院部周六、周日不安排手术;不同调整情况下白内 障手术的安排时间。周六周日不进行手术,则会影响到其它眼科疾病病人的入院时间选 20
  • 23. 择;不同调整情况,每种病症的优先权需要进行相应的调整。 8.2.1 情况 1 下的模型改进 情况 1 下白内障的手术安排时间没有改变,只是增加了住院部周六、周日不安排手 术的条件。 此时,为了达到医院病床使用效率的提高,需要调整其它眼科疾病病人的入 院时间,对于白内障患者和急症患者不需要进行调整。 新的一周各时间段各类手术的优 先程度表见表 8.2。 表 8.2 一周各时间段各类手术的优先程度表 手术类型 周 6、周 7 周 1、周 2 周3 周 4、周 5 优先级 优先级 优先级 优先级 白内障(单眼) 2 3 0 0 白内障(双眼) 3 0 0 0 外伤 4 4 4 4 其它眼科疾病 1 2 3 0 根据此表对已给出的排队模型进行改进,然后模拟仿真。 8.2.2 情况 2 下的模型改进 情况 2 下白内障的手术安排时间按变为了周 2、周 4,加上住院部周六、周日不安排 手术的条件。 这时在改进时需要将白内障病人的入院情况也进行调整,调整方式为将以 前的时间整体向后推移一天。新的一周各时间段各类手术的优先程度表见表 8.3。 表 8.3 一周各时间段各类手术的优先程度表 手术类型 周 7、周 1 周 2、周 3 周4 周 5、周 6 优先级 优先级 优先级 优先级 白内障(单眼) 2 3 0 0 白内障(双眼) 3 0 0 0 外伤 4 4 4 4 其它眼科疾病 1 2 0 3 根据此表对已给出的排队模型进行改进,然后模拟仿真。 8.2.3 情况 3 下的模型改进 情况 3 下白内障的手术安排时间按变为了周 3、周 5,加上住院部周六、周日不安排 手术的条件。 情况与情况 2 的相似。新的一周各时间段各类手术的优先程度表见表 8.3。 21
  • 24. 表 8.3 一周各时间段各类手术的优先程度表 手术类型 周 1、周 2 周 3、周 4 周5 周 6、周 7 优先级 优先级 优先级 优先级 白内障(单眼) 2 3 0 0 白内障(双眼) 3 0 0 0 外伤 4 4 4 4 其它眼科疾病 1 0 3 3 根据此表对已给出的排队模型进行改进,然后模拟仿真。 8.3 仿真结果及评价 模拟仿真得到三种情况下单位时间内病床周转次数分别为:9.267、9.45、10.3。可 以知道第三种情况相对较好,所以医院手术时间安排可作调整,具体安排为白内障两 次手术时间为周 3 与周 5。 三次的数据相差不大,在模拟中可能存在一些误差,数据的收集原则不妥也会造 成数据的不真实,所以上述的仿真结果只为参考使用,若想得到更可靠的结论,应该 重复多次进行仿真,从大量数据中进行统计分析总结规律。 9 病床比例分配模型的建立与求解(问题五) 本问将床位划归给了各类不同的病人,此时在排队系统建模时就不能再将所有的 床考虑为一个整体当成服务台,而是要按照床位划归方案划分为多个服务台组,各服 务台组专为某一类病人服务,对于同一类病人以先到先服务的原则进行排队。患者 Poisson 流到达,把各组服务台成一个整体作为单服务台,同组的床位越多,则该组在 单位时间内服务的病人数也越多。服务时间呈负指数分布,并且假定顾客源无限、服务 空间容量无限,则可以构成几个相互独立的 M / M /1 系统,计算各个排队系统带到稳 态时的平均逗留时间。 然后确定合理的病床分配比例让所有的病人的平均逗留时间最短。 根据排队论理论 ,在 M / M /1 无限源系统中有 [5] λ Ls = µ −λ ρλ Lq = µ −λ 1 Ws = µ −λ ρ Wq = µ −λ L W W 其中 Ls 、 q 、 s 、 q 分别为系统平均队长、 等待队列平均长度、病人平均逗留时间和在等 待队列中的等待时间,服务强度 ρ 满足 λ ρ= µ 22
  • 25. 下面建立以平均逗留时间最短为目标的最优化模型。设分给四类病人的床位占总床 位数的比例为 γ i ,四类病人的平均逗留时间为 4 4 4 1 1 T = ∑ Wsi = ∑ =∑ i =1 i =1 µi − λi i =1 nγ i − λ i Ti Wsi 为第 i 类病人平均逗留时间, Ti 为该类病床平均服务每个相应类型的病人所花的时 间, n 为总的床位数。从而可以建立最优化模型 min T 约束条件为 4 ∑γ i =1 i =1 1≥ γi ≥ 0 这样就将使得所有病人在系统内的平均逗留时间最短的病床比例分配模型转化为 了一般的非线性规划问题,用 LINGO 软件即可求解,求得的最优解见表 9.1。 表 9.1 使得病人平均逗留时间最少的床位分配比例 疾病类型 外伤类 白内障(双眼) 白内障(单眼) 其他眼科疾病 病床分配比例 0.106 0.194 0.113 0.587 分配床位数 8 15 9 47 10 模型改进方向 以上建立的床位安排模型只是单纯的提高医院的病床使用效率并减少病人等待时 间,对于许多条件作了简化处理,应该结合实际加入重要因素的考虑。 10.1 考虑病人个人满意度评价 为了提高病床的使用效率,模型一中对病人的入院顺序进行了一些调整,改变了人 们通常的先到先服务观念,这样会引起一些病人满意度的下降。虽然通过等待时间的分 析可以知道总体的等待时间并未增加,但受影响的病人的满意度变化并没有进行分析。 需要确定病人满意度评价标准来衡量受影响病人的满意度与等待时间的关系,这样便 可以对调整前后病人满意度的变化有所掌握,在建立模型时将病人的满意度也作为一 个参考指标。 10.2 考虑拒收及病人因为等待队列太长离开排队系统 建模时假定病人源无限,并且服务空间容量(包括等待队列和服务队列)无限, 没有考虑拒收或是由于等待队列太长导致病人失去耐心离开排队系统的情况,模型中 并没有设定等待住院的病人的上限,根据实际情况知道当排队等候服务的人达到一定 数量后,以后再来的顾客会选择离开,不接受服务。所以设计等待入院的病人的数量值, 实现既能使医院效益最大化,而且还能使顾客满意度不至于过低。当等待队伍超过设定 23
  • 26. 值时可对其进行转院治疗,这样医方可以减轻负担,病人还可以进行最优的选择。 10.3 考虑医院因满负荷运作产生的负面效应 模型设计的一个原则就是提高医院病床的使用效率,这样就减去了很多病床空闲 时间。虽然表面上使医院的利益扩大了,但实际上并不一定如此。长期满负荷运行,可 能导致医院管理层面会出现问题,比如病床没有充足的时间维修、消毒、保养,医生、护 士等工作情绪的波动,医疗设备的更换周期缩短等等一系列问题的出现。 所以在模型设 计中还需要考虑这些因素的影响,不过这样一来模型会变得更加复杂,分析和实现会 变得更加困难。 10.4 考虑医院增加应急预案的情况 在本题的求解过程中,题目给定的数据所反映的是医院眼科病床总是处于高负荷 状态,即便每天有部分病人出院,也只能空出很少部分病床。倘若遇到自然灾害或者眼 疾高峰期等情况,可能急症患者会大量增加,导致医院没有足够的床位安排急症患者 入院治疗,从而只能转院或者拒收,无疑对于医院和患者双方利益都造成损失。所以医 院如果能增加应急预案,平时就能预留若干床位专门安排数量超限的急症患者,建模 时如果能考虑这个因素无疑能得到更佳的病床安排模型。 24
  • 28. [ 1] 常 州 市 卫 生 局 , 医 院 统 计 工 作 概 述 ( 二 ) , http://czws.gov.cn/zncs/detail.asp? Unid=962 ,2009 年 9 月 12 日。 [ 2] 陈倩 杨柏如,床位利用模型在医疗工作效率评价中的应用,中国医院统计,2003 年 04 期。 [ 3] 华兴,排队论与随机服务系统,上海翻译出版公司,1989. 1-345。 [ 4] 戚德虎 康继昌,BP 神经网络的设计,计算机工程与设计,1998,19(2):48-50。 [ 5] 吴希,医院门诊系统的排队过程模型,中国药学导报,2007 年 9 月第 4 卷第 25 期。 附录 附录 1 共有Bed、 Diseases、Patient、simulate四个类,Bed、Diseases、Patient的代码从略,核心代 码即simulate.java如下所示:
  • 29. import java.util.*; import java.util.zip.DataFormatException; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class simulate { public static ArrayList<Patient> waiWaitList = new ArrayList<Patient>(); public static ArrayList<Patient> bai1WaitList = new ArrayList<Patient>(); public static ArrayList<Patient> bai2WaitList = new ArrayList<Patient>(); public static ArrayList<Patient> otherWaitList = new ArrayList<Patient>(); //数据 static int waiPatient[] = new int[50]; static int bai1Patient[] = new int[50]; static int bai2Patient[] = new int[50]; static int otherPatient[] = new int[50]; static int total[] = new int[50]; public static Bed bed[] = new Bed[79]; //当前剩余空床数 public static int leftOfEmptyBeds = 10; //读取文件数据 public static void main(String[] args) { try{ BufferedReader reader = new BufferedReader(new FileReader("data.txt")); String line = reader.readLine(); while (line != null) { if (line.startsWith("外伤")) { readPatient(line,waiPatient); } else if (line.startsWith("白内障(双眼)")) { readPatient(line,bai2Patient); } else if (line.startsWith("白内障")) { readPatient(line,bai1Patient); } else if(line.startsWith("其它")) { readPatient(line, otherPatient); }else if(line.startsWith("总共")) { readPatient(line, total); } else{ throw new DataFormatException(line); } line = reader.readLine(); } reader.close(); }catch(DataFormatException dfe){ dfe.getMessage(); } catch (IOException e) { e.printStackTrace(); } Diseases dis= new Diseases(); int currentTime = 1; //创建病床 for(int i = 0;i<bed.length;i++){ bed[i] = new Bed(); } //开始模拟
  • 30. while(currentTime < 50){ //每天在进行病床调度之前,首先要处理的是当天出院的情况。只要currentTime等于病人的 outTime,则病人出院。此时,治疗结束,输出看病信息,并清空病床 System.out.println("第"+currentTime+"天"); for(int i = 0;i<bed.length;i++) { if (bed[i].isEmpty() == false && currentTime == bed[i].getPatients().getOutTime()) { System.out.print("病种:"+bed[i].getPatients().getDisease()+" 门诊时 间:"+bed[i].getPatients().getSeeTime()+" 入院时 间:"+bed[i].getPatients().getInTime()+" 出院时 间:"+bed[i].getPatients().getOutTime()+" 等待时 间:"+bed[i].getPatients().getWaitTime()+"n"); bed[i].setEmpty(true); leftOfEmptyBeds++; System.out.println("剩余床位:"+leftOfEmptyBeds); } } //创建病人对象 int numOfPatient = total[currentTime-1]; Patient patients[] = new Patient[numOfPatient]; //初始化病人病种 System.out.println("总门诊数"+patients.length); for (int i = 0; i < patients.length; i++) { patients[i] = new Patient(); } int indexOfBai2 = waiPatient[currentTime-1]+bai1Patient[currentTime-1]; int indexOfOther = waiPatient[currentTime-1]+bai1Patient[currentTime-1]+bai2Patient[currentTime-1]; for (int j = 0; j < waiPatient[currentTime-1]; j++) { patients[j].setDisease("外伤"); patients[j].setSeeTime(currentTime); waiWaitList.add(patients[j]); } //白内障个数 for (int j = waiPatient[currentTime-1]; j < waiPatient[currentTime-1]+bai1Patient[currentTime-1]; j++) { patients[j].setDisease("白内障"); patients[j].setSeeTime(currentTime); bai1WaitList.add(patients[j]); } for(int j = indexOfBai2;j< indexOfBai2 + bai2Patient[currentTime-1];j+ +){ patients[j].setDisease("白内障(双眼)"); patients[j].setSeeTime(currentTime); bai2WaitList.add(patients[j]); } for (int j = indexOfOther; j < indexOfOther+otherPatient[currentTime-1]; j++) { patients[j].setDisease("其它"); patients[j].setSeeTime(currentTime); bai2WaitList.add(patients[j]); } //测试队列的数据
  • 31. for (Patient e : waiWaitList) { System.out.print(e.getDisease()+":门诊时间 "+e.getSeeTime()+"n"); } System.out.println("个数"+waiWaitList.size()); adjust(currentTime); currentTime++; } } public static void adjust(int currentTime){ //计算星期 int xingQi = currentTime%7; switch (xingQi) { case 3: case 4: { while (leftOfEmptyBeds > 0) { if(waiWaitList.isEmpty()&&bai1WaitList.isEmpty()&&otherWaitList.isEmpty()&&bai2Wai tList.isEmpty()) { System.out.println("今天无门诊"); break; } if (waiWaitList.isEmpty() == false) //有外伤人数 { proccess(waiWaitList, currentTime, 8); } //若还有空床,并且单眼白内障队列非空,则 if(leftOfEmptyBeds >0 && bai1WaitList.isEmpty() == false) { proccess(bai1WaitList, currentTime, 5); } //若还有空床,并且其它眼科队列非空,则处理之 if(leftOfEmptyBeds >0 && otherWaitList.isEmpty() == false) { proccess(otherWaitList, currentTime, 12); } //之后处理双眼白内障 if(leftOfEmptyBeds >0 && bai2WaitList.isEmpty() == false) { proccess(bai2WaitList, currentTime, 7); } if(waiWaitList.isEmpty()&&bai1WaitList.isEmpty()&&otherWaitList.isEmpty()&&bai2Wai tList.isEmpty()) { break; } } } break; case 5: case 6: case 0:
  • 32. { while (leftOfEmptyBeds > 0) { if(waiWaitList.isEmpty()&&bai1WaitList.isEmpty()&&otherWaitList.isEmpty()&&bai2Wai tList.isEmpty()) { System.out.println("今天无门诊"); break; } if (waiWaitList.isEmpty() == false) //有外伤人数 { proccess(waiWaitList, currentTime, 8); } //若还有空床,并且其它眼科队列非空,则处理之 if(leftOfEmptyBeds >0 && otherWaitList.isEmpty() == false) { proccess(otherWaitList, currentTime, 12); } //若还有空床,并且单眼白内障队列非空,则 if(leftOfEmptyBeds >0 && bai1WaitList.isEmpty() == false) { proccess(bai1WaitList, currentTime, 5); } //之后处理双眼白内障 if(leftOfEmptyBeds >0 && bai2WaitList.isEmpty() == false) { proccess(bai2WaitList, currentTime, 7); } if(waiWaitList.isEmpty()&&bai1WaitList.isEmpty()&&otherWaitList.isEmpty()&&bai2Wai tList.isEmpty()) { break; } } } break; case 2: case 1: { while (leftOfEmptyBeds > 0) { if(waiWaitList.isEmpty()&&bai1WaitList.isEmpty()&&otherWaitList.isEmpty()&&bai2Wai tList.isEmpty()) { System.out.println("今天无门诊"); break; } if (waiWaitList.isEmpty() == false) //有外伤人数 { proccess(waiWaitList, currentTime, 8); }
  • 33. //之后处理双眼白内障 if(leftOfEmptyBeds >0 && bai2WaitList.isEmpty() == false) { proccess(bai2WaitList, currentTime, 7); } //若还有空床,并且单眼白内障队列非空,则 if(leftOfEmptyBeds >0 && bai1WaitList.isEmpty() == false) { proccess(bai1WaitList, currentTime, 5); } //若还有空床,并且其它眼科队列非空,则处理之 if(leftOfEmptyBeds >0 && otherWaitList.isEmpty() == false) { proccess(otherWaitList, currentTime, 12); } if(waiWaitList.isEmpty()&&bai1WaitList.isEmpty()&&otherWaitList.isEmpty()&&bai2Wai tList.isEmpty()) { break; } } } break; default: break; } } //找出动态数组中最小的门诊时间 public static int minSeeTime(ArrayList<Patient> p){ int min = 10000; for (Patient patient : p) { if(patient.getSeeTime() < min) min = patient.getSeeTime(); } return min; } //找出动态数组中某门诊时间的病人数 public static int numOfPatient(ArrayList<Patient> p,int seeTime){ int num = 0; for (Patient patient : p) { if (patient.getSeeTime() == seeTime) { num++; } } return num; } //队列内调度 public static void proccess(ArrayList<Patient> p ,int currentTime,int totalTime) { int j; for ( j = 0;j<p.size();j++) { for (int i = 0; i < bed.length; i++) { //遍历病床数组,寻找空床,若出现空床,则将病人填入病床数组,并从等待队列中 将该病人删除。
  • 34. if (bed[i].isEmpty() == true) { p.get(j).setInTime(currentTime);//入院时间 p.get(j).setWaitTime(currentTime-p.get(j).getSeeTime()); //等待时间 p.get(j).setOutTime(currentTime+totalTime);//外伤总住院天数为 8天 bed[i].setPatients(p.get(j)); bed[i].setEmpty(false); p.remove(j); //导致动态数组p的size变小,如果不采取措施,则外层循 环次数越来越少 j--; if (leftOfEmptyBeds>0) { leftOfEmptyBeds--; //剩余病床数减少 } else { break; } System.out.println(bed[i].getPatients().getDisease()+"入 院"); System.out.println("剩余病床:"+leftOfEmptyBeds); break; } } } } //读病人数据 public static void readPatient(String line,int p[])throws DataFormatException { StringTokenizer token = new StringTokenizer(line,"_"); token.nextToken(); int i = 0; while (token.hasMoreElements()) { p[i] = Integer.valueOf(token.nextElement().toString()); i++; } } } 附录 2 第五问求解排队系统最优化模型的lingo程序 max=x/((79/8)*x-1.05)+y/((79/7)*y-2.2)+z/((79/5)*z-1.65)+k/((79/12)*k-3.867); x>0; y>0; z>0; k>0; (((79/8)*x-1.05))>0; (((79/7)*y-2.2))>0; (((79/5)*z-1.65))>0; (((79/12)*k-3.867))>0; x+y+z+k=1;