目录
1 题目
2 问题
3 Matlab代码实现
本次以第三题为例进行讲解:
无论是2022年3月初在吉林省长春市大规模爆发的新型冠状病毒疫情(COVID-19),还是4月初在上海及5月初在北京大规模爆发的疫情,均显示出了一些普遍存在的难点问题。考虑到近期或未来仍然有部分省份存在潜在的大规模爆发风险,因此非常有必要引进更为科学的COVID-19应对策略,并努力为有效降低大规模疫情防控成本、缩短疫情防控周期及保障各省经济的稳定可持续发展方面提供可靠的依据。
在COVID-19疫情应对方面所面临的主要问题包括疫情大规模爆发期间医疗资源的合理分配与调度问题、科学核算监测方案的制定问题、居民基本生活物资的保障问题及后期的复工复产方案设计等问题。
clear
clc
lou=103;%总楼栋
ren=18326;%总人数
%% 楼房参数
%层数、单元数、每个单元户数、平均入住率、栋数(楼房参数)
M=[6 3 36 0.7 60
11 2 44 0.75 20
18 3 126 0.8 23];
H=round(M(:,2).*M(:,3).*M(:,4),0);%每栋楼分别有多少户
%% 产生每户人口数
%假设一户人1人的概率为60%,2人的概率为30%,3人的概率为10%
R1=[]; %1大栋
for i=1:M(1,end) %入住率70%的60栋
z=[];
for j=1:H(1) %每栋有多少户
a=rand;
if a<=0.6
%楼型,栋,户,人
R1=[R1;1,i,j,1];
elseif a>0.9
R1=[R1;1,i,j,3];
else
R1=[R1;1,i,j,2];
end
end
end
R2=[]; %2大栋
for i=1:M(2,end) %入住率75%的20栋
z=[];
for j=1:H(2) %每栋多少户
a=rand;
if a<=0.6
%楼型,栋,户,人
R2=[R2;2,i,j,1];
elseif a>0.9
R2=[R2;2,i,j,3];
else
R2=[R2;2,i,j,2];
end
end
end
R3=[]; %3大栋
for i=1:M(3,end) %入住率80%的有23栋
z=[];
for j=1:H(3)
a=rand;
if a<=0.6
%楼型,栋,户,人
R3=[R3;3,i,j,1];
elseif a>0.9
R3=[R3;3,i,j,3];
else
R3=[R3;3,i,j,2];
end
end
end
RR=[R1;R2;R3];
peason=sum(RR(:,4));
%=======如果小于封闭人数,则进行补充=======
if peasonren
c=peason-ren;
b=find(RR(:,4)==3);
if length(b)>c
a=randperm(length(b));
RR(b(a(1:c)),4)=RR(b(a(1:c)),4)-1;
elseif length(b)T_min)
kk=[];%核酸检测点数
xx=[];%每栋楼划给哪个核酸点编号
ff1=[];
ff2=[];
for i=1:num
kk(i,1)=randi([5,20]);%假设这里最多设置20个核算点位,至少设置5个
xx(i,:)=randi([1,kk(i,1)],1,n);
ff1(i,1)=kk(i,1);
zz=zeros(1,kk(i,1));
for j=1:n
zz(xx(i,j))=zz(xx(i,j))+W(j,4);%假设核酸检测1个人花费单位时间1
end
ff2(i,1)=max(zz);
end
%是否更新最优
for j=1:num
delta1=ff1(j,1)-f1(j,1);
delta2=ff2(j,1)-f2(j,1);
if delta1<=0 & delta2<=0
x(j,:)=xx(j,:);
f1(j,1)=ff1(j,1);
f2(j,1)=ff2(j,1);
else
pp=exp(-delta2/T);
if pp>rand
x(j,:)=xx(j,:);
f1(j,1)=ff1(j,1);
f2(j,1)=ff2(j,1);
end
end
end
[TT,chrom]=NSII(x,f1,f2);
bestx=chrom(1,:);
bestf=TT(1,:);
T=T*alpha;
end