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
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
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
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: