1 题目
B题大规模新型冠状病毒疫情最优应对策略研究
无论是2022年3月初在吉林省长春市大规模爆发的新型冠状病毒疫情(COVID-19),还是4月初在上海及5月初在北京大规模爆发的疫情,均显示出了一些普遍存在的难点问题。考虑到近期或未来仍然有部分省份存在潜在的大规模爆发风险,因此非常有必要引进更为科学的COVID-19应对策略,并努力为有效降低大规模疫情防控成本、缩短疫情防控周期及保障各省经济的稳定可持续发展方面提供可靠的依据。
在COVID-19疫情应对方面所面临的主要问题包括疫情大规模爆发期间医疗资源的合理分配与调度问题、科学核算监测方案的制定问题、居民基本生活物资的保障问题及后期的复工复产方案设计等问题。
2 问题
本次以第三题为例进行讲解:
3、在疫情爆发期间合理的核酸检测方案的设计是至关重要的,某大型小区具有 103 栋楼,封闭人数 18326 人。其中最高 6 层、3 个单元、36 户及平均入住率 70%的楼 60 栋,最高 11 层、2 个单元、44 户及平均入住率 75%的楼 20 栋,最高 18 层、3 个单元、126 户及平均入住率 80%的楼 23 栋。你能否结合上述数据提供考虑不同类型楼栋特征的最优核算监测分组方案、时间间隔及其具体的时间节点?
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 peason<ren c=ren-peason; a=randperm(size(RR,1)); %randperm将一列序号随机打乱,序号必须是整数。 RR(a(1:c),4)=RR(a(1:c),4)+1; end %======如果大于则削减============= if peason>ren 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)<c RR(b,4)=RR(b,4)-1; peason=sum(RR(:,4)); c=peason-ren; b=find(RR(:,4)==2); a=randperm(length(b)); RR(b(a(1:c)),4)=RR(b(a(1:c)),4)-1; end end peason=sum(RR(:,4)); c=peason-ren; disp('公众号:荔枝科研社') disp('回复关键字:2022数维杯') %% 每户人分好了,接下来汇总每栋人数 W=[]; n=0; for j=1:M(1,end) n=n+1; a=find(RR(:,1)==1); %1(60栋) b=find(RR(a,2)==j); %RR(a,2):1的第j栋 %楼栋编号,楼型,该楼型的第几栋,人数 W=[W;n,1,j,sum(RR(a(b),4))]; end for j=1:M(2,end) n=n+1; a=find(RR(:,1)==2); b=find(RR(a,2)==j); W=[W;n,2,j,sum(RR(a(b),4))]; end for j=1:M(3,end) n=n+1; a=find(RR(:,1)==3); b=find(RR(a,2)==j); W=[W;n,3,j,sum(RR(a(b),4))]; end %% 模拟退火寻优 %=====模拟退火法参数====== T=100; %初始化温度值 T_min=1; %设置温度下界 alpha=0.95; %温度的下降率 num=10000; %颗粒总数 %======预备求解问题======== k=[];%核酸检测点数 x=[];%每栋楼划给哪个核酸点编号 f1=[]; %核酸检测点数 f2=[]; %时间 for i=1:num k(i,1)=randi([5,20]);%假设这里最多设置20个核算点位,至少设置5个 x(i,:)=randi([1,k(i,1)],1,n); f1(i,1)=k(i,1); z=zeros(1,k(i,1)); for j=1:n z(x(i,j))=z(x(i,j))+W(j,4);%假设核酸检测1个人花费单位时间1 end f2(i,1)=max(z); end [TT,chrom]=NSII(x,f1,f2); bestx=chrom(1,:); bestf=TT(1,:); while(T>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