【数学建模集训系列】眼科病床安排问题——FCFS
来源:互联网 发布:数组和集合的区别 编辑:程序博客网 时间:2024/04/29 10:28
%function sec_problem
%*********************************************************
% ※第二问代码:FCFS
% ※时间:2011/8/31
%*********************************************************
clear,clc
%**************根据术后恢复满足的正态分布随机产生术后恢复时间*****************
miu=[2.90 4.96 10.16 8.07 6.03];%各个正态分布均值
sigm=[0.69 0.59 1.56 2.36 1.82];%方差
num_type=[7 22 9 33 8];%各类病人数
for i=1:1:5
shuhou{i,1}=(fix(normrnd(miu(i),sigm(i),num_type(i),1)))';%产生随机数,5*1单元阵列
shuhou{i,1};
end
%**************计算可以入院病人的优先级,安排入院****************************
cha=693960;%matlab和excel日期之差
out1_time_num = xlsread('筛选_数据', 'FCFS', 'M2:N28');%前一组出院时间
in_order_type_time=xlsread('筛选_数据', 'FCFS', 'A2:C103');%门诊时间
%------------------计算优先级矩阵------------------------------
% 说明:值越小表示优先级越高,第二项为手术
% 白内障(单眼) 白内障(双眼) 青光眼 视网膜疾病 外伤
% 周日 3,1 2,1 4,2 4,2 1,1
% 周一 2,2 4,2 3,3 3,3 1,1
% 周二 2,1 4,1 3,2 3,2 1,1
% 周三 4,5 3,5 2,2 2,2 1,1
% 周四 4,4 3,4 2,2 2,2 1,1
% 周五 4,3 3,3 2,2 2,2 1,1
% 周六 3,2 2,2 4,3 4,3 1,1
%-------------------------------------------------------------
prio_mat=[3 2 4 4 1;2 4 3 3 1;2 4 3 3 1;4 3 2 2 1;4 3 2 2 1;4 3 2 2 1;3 2 4 4 1];
ssjg= [1 1 2 2 1;2 2 3 3 1;1 1 2 2 1;5 5 2 2 1;4 4 2 2 1;3 3 2 2 1;2 2 3 3 1];
flag_visited=zeros(102,1);
in_order_type_time_flag=[in_order_type_time flag_visited];
ruyuan_mat=nan(102,1);
shoushu1_mat=nan(102,1);
shoushu2_mat=nan(102,1);
chuyuan_mat=nan(102,1);
tic
for i=1:size(out1_time_num,1)
% for i=1:3
to_day=out1_time_num(i,1);%当天excel时间
m=find(in_order_type_time_flag(:,3)<to_day&in_order_type_time_flag(:,4)==0);
if isempty(m)
continue;
else
temp_in=in_order_type_time(m,:);%当天有机会入院的病人
%判断当天星期几y=weekday(x),返回值y:周日-周六分别为1-7
to_week=weekday(to_day+cha);
%附加优先级:序号+类型+门诊时间+优先级
for j=1:size(temp_in,1)
if temp_in(j,2)==5
prio(j,1)=0;
else
prio(j,1)= temp_in(j,1);
end
prio(j+1:end)=[];
end
temp_in=[temp_in prio];
%按优先级选取与病床相同数量的病人:按优先级排序,优先级相同的按门诊顺序时间排
temp_in_sort=sortrows(temp_in,4);
if size(out1_time_num,1)<=size(temp_in_sort,1)
num_2=out1_time_num(i,2);
else
num_2=size(temp_in_sort,1);
end
temp_write=temp_in_sort(1:num_2,:);
%计算excel表格写入范围,逐个入院
for j=1:num_2%out1_time_num(i,2)
ruyuan_mat(temp_write(j,1))=to_day;
%write_str=['D' num2str(temp_write(j,1)+1)];
%xlswrite('筛选_数据',to_day,'FCFS',write_str); %入院
%------------------------------------------------
%安排手术时间
shoushu1_mat(temp_write(j,1))=to_day+ssjg(to_week,temp_write(j,2));
if temp_write(j,2)==2
shoushu2_mat(temp_write(j,1))=to_day+ssjg(to_week,temp_write(j,2))+2;
end
%随机产生出院时间
chuyuan_mat(temp_write(j,1))=to_day+ssjg(to_week,temp_write(j,2))+...
fix(normrnd(miu(temp_write(j,2)),sigm(temp_write(j,2)),1));
%更新病床数
index=find(out1_time_num(:,1)==chuyuan_mat(temp_write(j,1)));
out1_time_num(index,2)=out1_time_num(index,2)+1;
%------------------------------------------------
end
%标记已经入院的数据
in_order_type_time_flag(temp_write(:,1),:)=1;
end
end
%write_str='D2:D103';
%xlswrite('筛选_数据',ruyuan_mat,'FCFS',write_str); %入院
disp('安排完成')
toc
write_mat=[ruyuan_mat shoushu1_mat shoushu2_mat chuyuan_mat]
write_str='D2:G103';
xlswrite('筛选_数据',write_mat,'FCFS',write_str);
out1_time_num
%*********************************************************
% ※第二问代码:FCFS
% ※时间:2011/8/31
%*********************************************************
clear,clc
%**************根据术后恢复满足的正态分布随机产生术后恢复时间*****************
miu=[2.90 4.96 10.16 8.07 6.03];%各个正态分布均值
sigm=[0.69 0.59 1.56 2.36 1.82];%方差
num_type=[7 22 9 33 8];%各类病人数
for i=1:1:5
shuhou{i,1}=(fix(normrnd(miu(i),sigm(i),num_type(i),1)))';%产生随机数,5*1单元阵列
shuhou{i,1};
end
%**************计算可以入院病人的优先级,安排入院****************************
cha=693960;%matlab和excel日期之差
out1_time_num = xlsread('筛选_数据', 'FCFS', 'M2:N28');%前一组出院时间
in_order_type_time=xlsread('筛选_数据', 'FCFS', 'A2:C103');%门诊时间
%------------------计算优先级矩阵------------------------------
% 说明:值越小表示优先级越高,第二项为手术
% 白内障(单眼) 白内障(双眼) 青光眼 视网膜疾病 外伤
% 周日 3,1 2,1 4,2 4,2 1,1
% 周一 2,2 4,2 3,3 3,3 1,1
% 周二 2,1 4,1 3,2 3,2 1,1
% 周三 4,5 3,5 2,2 2,2 1,1
% 周四 4,4 3,4 2,2 2,2 1,1
% 周五 4,3 3,3 2,2 2,2 1,1
% 周六 3,2 2,2 4,3 4,3 1,1
%-------------------------------------------------------------
prio_mat=[3 2 4 4 1;2 4 3 3 1;2 4 3 3 1;4 3 2 2 1;4 3 2 2 1;4 3 2 2 1;3 2 4 4 1];
ssjg= [1 1 2 2 1;2 2 3 3 1;1 1 2 2 1;5 5 2 2 1;4 4 2 2 1;3 3 2 2 1;2 2 3 3 1];
flag_visited=zeros(102,1);
in_order_type_time_flag=[in_order_type_time flag_visited];
ruyuan_mat=nan(102,1);
shoushu1_mat=nan(102,1);
shoushu2_mat=nan(102,1);
chuyuan_mat=nan(102,1);
tic
for i=1:size(out1_time_num,1)
% for i=1:3
to_day=out1_time_num(i,1);%当天excel时间
m=find(in_order_type_time_flag(:,3)<to_day&in_order_type_time_flag(:,4)==0);
if isempty(m)
continue;
else
temp_in=in_order_type_time(m,:);%当天有机会入院的病人
%判断当天星期几y=weekday(x),返回值y:周日-周六分别为1-7
to_week=weekday(to_day+cha);
%附加优先级:序号+类型+门诊时间+优先级
for j=1:size(temp_in,1)
if temp_in(j,2)==5
prio(j,1)=0;
else
prio(j,1)= temp_in(j,1);
end
prio(j+1:end)=[];
end
temp_in=[temp_in prio];
%按优先级选取与病床相同数量的病人:按优先级排序,优先级相同的按门诊顺序时间排
temp_in_sort=sortrows(temp_in,4);
if size(out1_time_num,1)<=size(temp_in_sort,1)
num_2=out1_time_num(i,2);
else
num_2=size(temp_in_sort,1);
end
temp_write=temp_in_sort(1:num_2,:);
%计算excel表格写入范围,逐个入院
for j=1:num_2%out1_time_num(i,2)
ruyuan_mat(temp_write(j,1))=to_day;
%write_str=['D' num2str(temp_write(j,1)+1)];
%xlswrite('筛选_数据',to_day,'FCFS',write_str); %入院
%------------------------------------------------
%安排手术时间
shoushu1_mat(temp_write(j,1))=to_day+ssjg(to_week,temp_write(j,2));
if temp_write(j,2)==2
shoushu2_mat(temp_write(j,1))=to_day+ssjg(to_week,temp_write(j,2))+2;
end
%随机产生出院时间
chuyuan_mat(temp_write(j,1))=to_day+ssjg(to_week,temp_write(j,2))+...
fix(normrnd(miu(temp_write(j,2)),sigm(temp_write(j,2)),1));
%更新病床数
index=find(out1_time_num(:,1)==chuyuan_mat(temp_write(j,1)));
out1_time_num(index,2)=out1_time_num(index,2)+1;
%------------------------------------------------
end
%标记已经入院的数据
in_order_type_time_flag(temp_write(:,1),:)=1;
end
end
%write_str='D2:D103';
%xlswrite('筛选_数据',ruyuan_mat,'FCFS',write_str); %入院
disp('安排完成')
toc
write_mat=[ruyuan_mat shoushu1_mat shoushu2_mat chuyuan_mat]
write_str='D2:G103';
xlswrite('筛选_数据',write_mat,'FCFS',write_str);
out1_time_num
- 【数学建模集训系列】眼科病床安排问题——FCFS
- 【数学建模集训系列】眼科病床安排问题——优先级调度
- 【数学建模】CUMCM-2009B 眼科病床的合理安排 解题思路整理
- 眼科病床的合理安排
- 数学建模初赛试题—护士工作时间安排
- 【数学建模集训系列】公交查询系统的matlab实现-问题重述
- 【数学建模集训系列】系统动力学软件Vensim学习
- 数学建模———线性规划问题
- 数学建模常用Matlab/Lingo/c代码总结系列——最小费用最大流问题
- 数学建模常用Matlab/Lingo/c代码总结系列——整数规划问题
- 数学建模常用Matlab/Lingo/c代码总结系列——旅行商TSP问题
- 寒假集训作业(8)——数学问题
- 【数学建模集训系列】公交查询系统的matlab实现-公交站点和线路对应矩阵
- 【数学建模集训系列】公交查询系统的matlab实现-站点和站点之间直达矩阵
- 【数学建模集训系列】公交查询系统的matlab实现-只含公交的查询
- 【数学建模集训系列】公交查询系统的matlab实现-运行截图和结果
- 【数学建模集训系列】公交查询系统的matlab实现-加入地铁线T1
- 【数学建模集训系列】公交查询系统的matlab实现-加入地铁线T2
- TVB体的来源
- sysfs文件系统操作
- 简单介绍如何使用robotium进行自动化测试
- velocity源码分析:初始化之日志系统
- 转自weiphone]在美做开发多年,写给国内apple开发新手的一些心得,无教程
- 【数学建模集训系列】眼科病床安排问题——FCFS
- 一起来学设计模式(5)——适配器模式
- 为读者做好计算
- css中height:100%不起作用的解决方法
- Using Eclipse
- 数组
- Flash常用源代码大全
- hive源码结构分析(编译器)
- CListCtrl控件功能扩展总结