COVID-19疫情期间生活物资的科学管理问题建模与优化
2020年爆发的新冠肺炎疫情,时至今日国内和国际仍呈现多发频发态势。受国际环境更趋复杂严峻和国内疫情冲击明显的超预期影响,我国经济下行的压力进一步增大。面对复杂的防疫局势,建立规范化的疫情快速清零机制十分必要,特别是亟需解决居民生活物资发放的科学管理问题。生活物资发放是否科学,不仅影响隔离居民的基本生活,而且影响着疫情的二次传播。与此同时,应急物资管理本身就是一项复杂的系统工程,具有非线性、不确定性、动态性,给抗疫过程中的生活物资发放带来了巨大挑战,以长春市抗疫过程中的数据为依托,利用数据挖掘、数据分析、统计建模、运筹优化等方法探索一疫情下兼顾防疫安全与效率的科学物资管理方案既具现实意义又具研究价值。
问题一的主要目的探究生活物资的大规模流动方式对疫情的影响。对长春市2022年3月26日实行发放蔬菜包前后防控工作的效果进行判别与分析。本部分的研究分为三部分,包括可视化分析、统计分析(统计特征指标和时间序列统计特征指标) 、SEIR 预测对比分析(4.2节) 。分析结果显示:(1) 疫情的发展或控制与生活物资发放方式有关。长春市实行的蔬菜包方式是疫情期间为保障居民生活和减少疫情传播的有效发放方法:(2)在发放初期由于经验不足、备货力度不够、保供人员缺少、供货源不稳定等问题,使感染人数不减反升; (3) 蔬菜包的发放时间间隔越大,能够减少人员接触频率,减轻保供工作人员的工作强度,减少疫情传播的风险。
问题二的主要目的解决生活物资投放点数量与位置问题。子问题一是要求讨论投放点数量的合理性并优化,子问题二和子问题三是在子问题一的基础上对应急物资供应链上游的大规模物资分拣场所与政府储备物资的规划。针对子问题一,本文首先对隔离人口数和生活物资投放点数量做 Person相关系数,发现隔离人口数与生活物资投放点数量之间是极低的正相关,表明投放点的数量与分配方案不合理(5.2节) 。其次,采用层次分析法计算长春市生活物资投放点数量与分配的影响因素指标权重,综合评价投放点数量的合理性(5.2节),发现投放点的数量严重冗余、分配不合理。在此基础上,修正附件2投放点数量得到各区优化调整的投放数量(表5-8) 。针对子问题二,本文首先使用平均法和数据挖掘估算出各区生活必需品的需求情况,依次制定政府储备物资安全库存(表5-9)。针对子问题三,本文首先建立采用K- means聚类算法和遗传算法求解政府储备物资和大规模物资分拣场所的位置、数量规模与所服务的区域并提出最优的选址数量、规模(表5-13)。
问题三的主要目的是优化生活物资的发放效果。子问题一是分析蔬菜包需求和发放规律,子问题二是评价和调整4月10日至4月15日蔬菜包供应方案。针对子问题一,本文采用文本挖掘技术,统计了2022年3月26日到5月1日九区总体和分区的每日蔬菜包供给量和需求量。分别从蔬菜包的供应规律、需求规律和供需规律三方面切入,运用描述性统计、正态性检验、相关性分析的方法结合新冠肺炎感染人数变化(6.2节) ,多层次分
析蔬菜包的供需规律。针对问题二,本文采用TOPSIS 综合评价方法,建立包含:各区本土感染人数和无症状感染者人数,各区小区栋数、小区户数和小区人口数、街道数等指标构成的评价体系,计算各指标权重,获得各区的得分与排名(表6-5) 。为评价蔬菜包供应方案的调整效果,本文利用数据挖掘技术统计出4月10日至4月15日,各区每天的蔬菜包接收数目和发放数目(表6-9) 。本文将蔬菜包浪费或缺货数目作为蔬菜包发放效果的评价指标,计算出各区蔬菜包供应的优化方案与调整幅度(表6-10) 。从各区调整效果对比(表6-11) 结果显示,采用此优化方案九个区的蔬菜包浪费量或缺货问题得到明显改善。
问题四的目的是为长春市做好大规模封控情况下居民生活物资有序发放预案。子问题一是对上游物资来源地进行合理选址,子问题二是对中游物资集散地进行合理分配与选址,子问题三是在考虑车辆限重的情况下,将“工作量”(工作量=运输里程×小区居民人数)的最小化合理规划末端配送路径以及配送量。针对子问题一,采用射线法“由点连面”判定交通路口节点的区域划分,同时能够过滤掉冗余的交通路口节点信息。在此基础上,采用枚举法在保留下来的交通路口节点中寻找与所有小区的“工作量”指标之和最小的位置。每个区重复上述方法便可得到各区的中心点坐标,即为九个上游物资来源地位置(表7-2)。针对子问题二,本文采用轴辐射网络对中游的集散地进行选址和分配(表7-4) 。针对子问题三,本文考虑病毒传播和车量容量限制的路径优化模型(7.4节) 。鉴于此问题属于NP- hard问题,本文采用大规模邻域算法(ALNS) 和模拟退火算法(SA) 构成的混合启发式算法进行求解,最终得到由上游物资来源地-中游货物集散地-下游小区的多级有序物流网络(图7-4) 、最短配送路径以及合理的配送车辆数量与种类(7.5节) 和有序网络可视化 (7.6节) 。最后对模型的改进与推广提出展望。
关键词:多层物流网络优化; 选址与路径优化; 数据挖掘; K- means聚类;传染病模型;综合评价方法:相关性分析; 时间序列分析; 混合启发式算法; NP- hard; 应急物流
一、问题重述
1.1. 问题背景
2020年爆发的新冠肺炎疫情,时至今日国内和国际仍呈现多发频发态势。2022年以来由于新冠病毒变异株奥密克戎BA.2的高传播性、高传染性和高隐匿性,新一轮新冠肺炎疫情在我国多地散发,陆续发生多次大规模疫情爆发危机。凭借我国的制度优势,在疫情大规模爆发期间采取封闭式管理方式实现了疫情的快速清零。我国现行新冠肺炎疫情防控政策来看,涉及到封闭式管理方式的情况主要有两种,一是在静态管理情况下的“三个暂停”,即除参与防疫人员外,全市所有行政事业单位人员全部居家办公:除相关重点企业、保障民生的公共服务类企业外,所有经营性场所暂停营业; 除具备条件的集散点、药店、医疗机构等外,其他商户暂停营业; 出租车、网约车等车辆停运。以及三个“不”,即:指居民不聚集、不流动、不出门[1]。二是对在风险区的划定与管控中划分为高风险区的居住小区(村)实行封控措施。实行“足不出户、上门服务”的政策,只有当连续7天无新增感染者,且第7天风险区域内所有人员完成一轮核酸筛查均为阴性时,才能降为中风险地区。连续3天无新增感染者时,才能降为低风险区[2]。由此可见,封闭式管理的目的是减少城市人口流动,同时开展大规模核酸检测,实现以最快速度排查潜在感染者,从而切断疫情传播链。
但是,受国际环境更趋复杂严峻和国内疫情冲击明显的超预期影响,我国经济下行的压力进一步增大。面对复杂的防疫局势,从宏观调控的角度来看,需要政府高效统筹疫情防控和经济社会发展成效。从微观规制的角度来看,则急需建立规范化的疫情快速清零机制。特别是,亟需解决居民生活物资发放的科学管理问题。生活物资发放是否科学,不仅影响隔离居民的基本生活,而且很有可能在物资发放过程中造成疫情的二次传播。从学术界现有研究来看,学者们普遍认可了封闭式管理对快速抗击疫情的重要作用,认为采用封闭式应急管理模式是医院应对突发新型冠状病毒肺炎疫情的有效方式[3]。但是,关于封闭管理下居民生活物资的发放问题的研究,目前主要聚焦在研讨居民生活物资的采购与配送方式,如刘志强等提出物业代购、电商配送等采购方式,陈镜羽等总结分析出“小区团购+集中取货”“门店共享+非接触式自提”“O2O平台+共享配送员”等末端物流配送模式[4]。
然而,由于疫情的超传播力往往超出预期,同时应急工作的时效性、安全性和不计成本性的特点,疫情期间生活物资的管理是一项复杂的系统工程,往往需要政府居于主导地位进行统筹管理。数据表明,在疫情期间政府完全有能力调动足够数量的生活物资,只是生活物资发放给小区居民的渠道不畅[5]。从不同城市大规模疫情的控制工作实践来看,采用蔬菜包的做法是疫情期间为居民发放生活物资的有效方式。但是,实现蔬菜包科学供应十分困难,一是居民对新鲜蔬菜需求频率高,因而配送频率也较高,容易造成人员间密切接触[6]。同时,米、面、油及肉等基本生活物资,由于保质期较长且主要由政府储备,因此其配送任务一般穿插到蔬菜包的配送过程。另外,水果也是居民们普遍需要的,虽属于非必须食品,但如果生产出来却无法销售也对经济发展不利。
因此,蔬菜无论在数量、频次、影响等方面都更突出,故本赛题聚焦蔬菜的科学供应问题。本文致力于研究在疫情封控期间,政府如果制定科学的物资管理方案,以高效应对疫情居民生活物资发放的管理问题,旨在全面提高疫情防控效率,同时节约人员投入和经费支出。
1.2. 问题提出
为制定科学的物资管理方案,保证蔬菜的科学供应,全面提高疫情防控效率的同时节约人员投入和经费支出。本文利用数学建模和数据挖掘技术依次解决如下问题。
问题一:生活物资发放方式对疫情的影响分析
结合附件1中所提供的长春市COVID-19疫情期间病毒感染人数数据及其它附件数据或团队能搜集到的数据对长春市实行发放蔬菜包前后效果进行判别与分析,为今后的防控工作提供理论依据。
问题二:生活物资投放点数量评价与优化、物资储备与选址规划
结合附件2中提供的当时长春市不同区域投放点数量分布结果。同时,结合附件3中和附件4中有关数据,讨论投放点数量的合理性,并通过数学建模进行适当的优化。另外,请充分考虑未来疫情、自然灾害等特殊事件,对于政府储备物资和大规模物资分拣场所的位置与数量规模进行合理规划,并提出最优的选址数量、规模及其潜在的备用场所位置。并将相关结果以表格的形式放置在正文中,需要包含选址位置、所属区域、选址半径、管辖范围小区个数、管辖范围内人口数等关键信息。
问题三:生活物资的供需关系分析与分配优化
结合附件5分析蔬菜包需求、发放规律,并根据附件3中的各小区位置与人口信息,评价并调整4月10日至4月15日蔬菜包供应方案。
问题四:生活物资发放的多层次物流网络规划与评价
在第二、三问的基础上,结合附件3给出的长春市街道和小区情况的表格,做出特殊时期保障居民生活物资供应的详细预案(有序网络图) 。网络上游是各项物资来源(每个区选一个地点,参赛队可自行根据坐标选择),中游是各项物资的集散地(集散地数量自行选择,可以先按附件2设置,再调整优化),网络下游是长春市所有小区。物流是一个周期内各天通过网络各条边所运输的各项生活物资的数量(开始可以只考虑蔬菜,不同日期可以发送不同品种蔬菜以增加居民的蔬菜品种) 。在开始时,网络的各条边可以不使用真实的街道,允许采用两点之间最短路连接。后来,可以选择少数行政区按真实街道选择路线,直至全市。考虑到特殊时期,所以节省人力是最重要的指标,同时希望减少人员的直接、间接接触。其中,工作量指标按运输里程与小区居民人数乘积计算。在完成有序网络图后需要进一步考虑用卡车运送物资,大卡车每辆可装10吨,小卡车每辆可装4吨,观察预案有无显著不同。要求在正文以图形或表格的方式精简地将相关结果表述出来,并请对照指标分析与评价所给出的发放预案的优势。
二、模型假设
假设1:假设题目附件数据真实可靠,适用于做数学建模、数据挖掘和数据分析;
假设2:假设题目附件数据中的缺失值对结果不会造成重大影响:
假设3:假设每个投送点向各小区配送的速度相同,不考虑由车的性能、天气等因素造成的配送速度变化;
假设4:假设每个投送点向各小区配送的过程中不考虑恶劣天气、自然灾害、交通拥堵、红绿灯等意外情况:
假设5:由于题目中没有限制货车的派车成本、装卸货成本,因此假设上述成本忽略不计;
假设6:假设货车数量充足且不会超载行驶:
假设7:假设每辆货车工作时间不大于10小时:
假设8:假设物资投放点的容量相同:
假设9:假设蔬菜包隔夜存放第二天会变质不能再继续发放给隔离群众;
假设10:假设每区当日的蔬菜包接收量等价于每日每区的供应能力,每区当日的蔬菜包发放量等价于每日各区隔离群众的需求量。附件五中所存在的每日发放量大于接收量的情况视为缺货,反之视为浪费。
三、符号说明
No. | 符号 | 含义 |
1 | N | 2022 年长春市总人口 |
2 | λ₁ | 患病者每天有效接触的易感者的平均人数 |
3 | λ₂ | 潜伏者每天有效接触的易感者的平均人数 |
4 | δ | 日发病率, 每天发病成为患病者的潜伏者占潜伏者总数的比例 |
5 | μ | 日治愈率, 每天治愈的患病者人数占患病者总数的比例 |
6 | σ | 传染期接触数(σ=λ₁/μ) |
7 | tEnd | 预测日期长度 |
8 | i₀ | 患病者比例的初值 |
9 | e₀ | 潜伏者比例的初值 |
10 | S₀ | 易感者比例的初值 |
11 | Y₀ | 微分方程组的初值 |
12 | ā | 平均增长率 |
13 | R | 极差 |
14 | s | 标准差 |
15 | θ₁ | 交付的病毒传播风险 |
16 | Np | 小区居民人数 |
17 | H | 需要选取的集散点个数 |
18 | Q | 集散点容量的集合 |
19 | EO,EI | 起始路线编号和终止路线编号 |
20 | F(i) | 路线编号终点的前序节点集合 |
21 | A(i) | 路线编号起点的后序节点集合 |
22 23 | P K | 需要选取的集散点数量 车辆集合 |
四、问题一分析与求解
4.1. 问题一分析:生活物资发放方式对疫情的影响分析
根据问题一要求,本题需要对长春市实行发放蔬菜包前后效果进行判别与分析,为今后的防控工作提供理论依据。首先,从定性的角度,依据附件1中所提供的长春市COVID-19疫情期间2022年3月4日到2022年5月23 日的全市和九个区的新增本土感染者人数、新增无症状感染者人数,分别绘制时间序列折线图,通过折线随时间的波动变化和发展趋势来对比3月26日开始发放蔬菜包前后新增本土感染者人数和新增无症状感染人数的变化。其次,计算极差、标准差、均值、Hurst指数、平均增长率(初始值到峰值)等指标,对比蔬菜包发放前后新冠肺炎疫情时间序列统计特征的变化。最后,参考现有文献中新冠病毒奥密克戎亚型变异株BA.2的传染率[7]、恢复率[8]、潜伏期[7],运用SEIR 传染病预测模型,将2022年3月25日的新增本土感染者人数作为感染者的初始人数,将同日的新增
无症状感染人数作为潜伏者的人数,通过查询长春市卫生健康委员会网站,收集同日的累计治愈人数作为治愈者的初始人数,将全市人口数减去感染者人数、潜伏者人数和治愈者人数后得到易感染者的人数。由此预测在不采用蔬菜包物资发放方式的情况下,2022年3月26日至2022年5月23日长春市每天新增本土感染人数和无症状感染人数。从而,将此预测结果与附件1的数据进行对比,量化评价蔬菜包对疫情影响。
4.2. 评判发放蔬菜包对疫情的影响
4.2.1. 可视化分析
从定性的角度,依据附件1中所提供的长春市 COVID-19疫情期间2022年3月4日到2022年5月23日的全市和九个区的新增本土感染者人数、新增无症状感染者人数,分别绘制时间序列折线图,通过折线随时间的波动变化和发展趋势来对比3月26日开始发放蔬菜包前后新增本土感染者人数和新增无症状感染人数的变化。具体分析如下:
首先,计算长春市自2022年3月4日至2022年5月23 日新冠肺炎疫情发展的总体情况,包括感染人数、无症状感染人数和总计感染人数,如图4-2、图4-3和图4-4所示。从图可看出自2月26日开始发放蔬菜包后,随后两天内新增无症状感染人数和总计新增人数(累计新增人数) 都呈倒“V”下降趋势,新增本土感染人数也有所下降,但自3月28号后,新冠疫情总体呈上升态势并在4月2日达到顶峰,这可能是由于3月29日开始长春市东北亚粮油、海吉星两大蔬菜批发市场突发疫情而临时关闭[9],加上全市疫情形势严峻,蔬菜包的备货力度不足,保供人员上岗严重不足,导致市民大部分市民开始采取网上订购的方式,这一定程度上增加了在网购蔬菜的配送过程的感染风险,体现了采用蔬菜包发放方式的必要性。
随着长春市努力尽快释放蔬菜包的末端配送队伍,强化配送力量、多渠道稳定蔬菜包货源、多点位通物流和多层次保供应,自4月28日开始有序恢复生产生活秩序,全市疫
情形势逐步向好。并在5月12日首次实现了确诊病例和无症状感染者的“零”新增,除5月 14日发现1例集中隔离管控阳性人员外,截至5月23 日,连续11天无新增确诊病例和无症状感染者。这表明蔬菜包是疫情期间为居民发放生活物资的有效方式,能够有效的保证居民生活蔬菜肉蛋奶等基本生活需求,同时减少了配送频率从而降低了因频繁的配送造成的感染风险。但是,在蔬菜包发放的初期由于经验不足导致蔬菜包备货力度不够、保供人员缺少、供货源不稳定等问题,使感染人数有所增加。随着政府努力释放保供力量,使蔬菜包较为有序地发放一定程度上帮助实现短期清零的抗疫目标。
其次,分别计算长春市九个区的2022年3月4日至2022年5月23 日开始新增本土感染者人数和新增无症状感染人数的变动趋势,分别如图4-6和图4-7所示。由此可看出,自3月26日开始发放蔬菜包,长春市九区的新增本土病例有所下降,虽然4月份疫情有所反弹,但整体最终趋势趋于零,体现了蔬菜包对减少疫情传播的有效性。
图4-6. 长春市九区新冠肺炎新增本土病例的情况(2022.03.04-2022.05.23)
4.2.2. 统计分析
各统计指标的介绍如下:
(1) 统计特征指标
1) 均值:是表示数据集中趋势的量数,用于描述新增确诊病例的时间序列集中趋势。其计算公式如式 (4-1) 所示。
x=∑inxin (4-1)
2) 极差:是标志值变动的最大范围,也是测定标志变动的最简单的指标。新冠疫情时间序列统计指标中发挥着评价新增确诊病例的离散度的作用,其计算公式如式(4-2)下所示:
R=xₘₐₓ-xₘᵢₙ (4-2)
3)标准差:是描述时间序列全局结构的统计量,用于评价新增确诊病例时间序列的变化程度[10],其计算公式如式(4-2) 所示。其中,i表示新增确诊病例时间序列的时长:x₁表示每日新增确诊病例的均值:n代表每日新增确诊病例总时长。
(3) 疫情特征指标
平均增长率,可以用来反映研究期内从发现病例的第一天到新增病例达到最大值的速度,可以用来表示疫情的蔓延速度[10],同时也能用于反映国家的防控措施是否有效。计算公式如式(4-5)所示。其中,N代表每日新增确诊病例时间序列初始值到峰值的时长:Xmax 代表每日新增确诊病例的最大值。x₀代表第一个不为零的每日新增确诊病例数。
统计分析的计算结果如表4-1所示。从长春市新冠肺炎新增本土病例的均值来看,在3月 26日使用蔬菜包之前每日平均新增本土病例为556.59例,而使用蔬菜包之后平均每日新增本土病例为220.28例,使用蔬菜包后每日平均新增本土感染人数下降60.42%。从极差指标来看,在3月26日使用蔬菜包之前每日新增本土病例的最大值为1997例,最小值为2,极差为1977。而使用蔬菜包之后最大值为1544,最小值为0,极差为1544。使用蔬菜包后,新增本土感染人数极大值降低了21.98%,极小值出现了0表明疫情趋缓出现了“零”增长, 极差降低了21.9%。从 Hurst 指数来看, 指数从[0.5,1.0]区间变为[0,0.5]区间,表明疫情的持续性有所减弱。从平均增长率来看,使用蔬菜包之前每日平均新增本土病例的平均增长率为37%,使用蔬菜包之后平均增长率为16%,表明使用蔬菜包之后疫情的蔓延速度明显减缓。
表4-1. 新冠疫情时间序列统计指标
NO. | 统计特征分类 | 统计指标 | 计算结果 | 结果对比 | |
3月4日-3月25日 3月26日-5月23日 | |||||
1 | 统计特征 | 均值 (x) | 556.59 220.28 | -60.42% | |
2 | 极差 (R) | 1977 | 1544 | -21.90% | |
3 | 标准差 (s) | 563.76 | 345.37 | -38.74% | |
4 | 极大值 ( xmax) | 1979 | 1544 | -21.98% | |
5 | 极小值 ( xmin) | 2 | 0 | -2 | |
6 | 时域特征 | Hurst指数 | 0.55 | 0.413 | -24.90% |
7 | 疫情特征 | 平均增长率 (G) | 0.37 | 0.16 | -56.76% |
4.2.3. 预测对比分析
运用SEIR 传染病预测模型,将2022年3月25日的新增本土感染者人数作为感染者的初始人数,将同日的新增无症状感染人数作为潜伏者的人数,通过查询长春市卫生健康委员会网站,收集同日的累计治愈人数作为治愈者的初始人数,将全市人口数减去感染者人数、潜伏者人数和治愈者人数后得到易感染者的人数。模型参数如表4-2所示,计算结果如图4-8所示。预测在不采用蔬菜包物资发放方式的情况下2022年3月26日至2022年5月 23日长春市每天新增本土感染人数累计298.69万人约占全市总人口的35%,无症状感染人数累计达170.68万人约占全市总人口的20%。与附件1的数据进行对比,采用蔬菜包后2022年3月26日至2022年5月23日长春市累计新增本土感染人数降低了77.5%,无症状感染者降低了近30%。由此可见,使用蔬菜包的方式能够有效减少感染新冠病毒的风险,减少病毒的传播,是实现快速“清零”和保障隔离居民生活物资的有效方式。
表4-2. 考虑潜伏期传染性的SEIR 新冠感染人数预测模型参数
NO. 符号 含义 数值
1 N 2022年长春市总人口 8534000
12
2 λ₁ 患病者每天有效接触的易感者的平均人数 1.00
3 λ₂ 潜伏者每天有效接触的易感者的平均人数 0.25
4 δ 日发病率,每天发病成为患病者的潜伏者占潜伏者总数的比例 0.05
5 μ 日治愈率,每天治愈的患病者人数占患病者总数的比例 0.05
6 σ 传染期接触数 σ=λ₁/μ 20
7 tEnd 预测日期长度 60
表4-3. 采用蔬菜包和不采用蔬菜包的新冠感染人数对比
2022年3月26日至2022年5月23日 | |||
采用蔬菜包 (万人) | 不采用蔬菜包(万人) | 结果对比 | |
累计新增本土感染人数 累计新增无症状感染人数 | 1.28 2.23 | 5.69 8.68 | -77.5% -28.92% |
4.3. 结果分析
经过可视化分析、统计分析和预测对比分析,结果显示:疫情的发展或被控制扑灭与生活物资发放方式有关,发放蔬菜包的做法是疫情期间为居民发放生活物资的有效方式,能够有效的保证居民生活蔬菜肉蛋奶等基本生活需求,蔬菜包的发放时间间隔越大,能够减少人员接触频率,减轻保供工作人员的工作强度,减少疫情传播的风险。
但是,在蔬菜包发放的初期由于经验不足导致蔬菜包备货力度不够、保供人员缺少、供货源不稳定等问题,使感染人数有所增加。未来,为保证蔬菜包对疫情的正向控制作用,一是需要政府努力释放保供力量,包括释放蔬菜包的末端配送队伍,强化配送力量、多渠道稳定蔬菜包货源、多点位通物流和多层次保供应。二是蔬菜包等生活物资时一定要采取无接触配送的方式,不要和配送人员接触。三是蔬菜包的外包装一定要消毒处理,尽量在静置2至3个小时以后再取用,并且在冲洗时也应该佩戴一次性手套并一用一扔。
代码
import pandas as pd import numpy as np import matplotlib. pyplot as plt import sea born as sns from sci py import stats import warnings import palettable sns. set _ style(" darkgrid") sns. set _ context(" paper") plt. rcParams[" font. sans- serif"]="SimHei" plt. rcParams[" axes. unicode _ minus"]= False np. set _ printoptions( suppress = True, precision=10, threshold =2000, linewidth=150) pd. set _ option(' display. float _ format', lambda x :"%.2f'%x) pd. set _ option(' display. max _ columns',10) pd. set _ option(' display. max _ rows',20) warnings. filterwarnings(" ignore") % matplotlib inline covid _ sum = pd. read _ excel("附件1: 长春市 COVID-19疫情期间病毒感染人数数 据. xlsx", sheet _ name="总计") covid _ sum #SEIR2模型, 考虑潜伏期具有传染性 from scipy. integrate import odeint # 导入 scipy. integrate 模块 def dySEIR2(y,t, lamda, lam2, delta, mu): #SEIR 模型, 导数函数 s,e,i=y ds _ dt =- lamda*s*i-lam2*s*e de _ dt= lamda*s*i+lam2*s*e- delta*e di _ dt= delta*e- mu*i return np. array([ ds _ dt, de _ dt, di _ dt]) # 设置模型参数 number=8534000 # 总人数 lamda=1.0 #日接触率,患病者每天有效接触的易感者的平均人数 lam2=0.25 # 日接触率2, 潜伏者每天有效接触的易感者的平均人数 delta=0.05 # 日发病率, 每天发病成为患病者的潜伏者占潜伏者总数的比例 mu=0.05# 日治愈率, 每天治愈的患病者人数占患病者总数的比例 sigma= lamda/ mu # 传染期接触数 fsig=1-1/ sigma tEnd=57 # 预测日期长度 t= np. arange(0.0,tEnd,1) #( start, stop, step) i0=633/ number # 患病者比例的初值 |
e0=495/ number # 潜伏者比例的初值 s0=1-i0 # 易感者比例的初值 Y0=(s0,e0,i0) # 微分方程组的初值 # odeint 数值解, 求解微分方程初值问题 ySEIR2= odeint(dySEIR2,Y0,t, args=( lamda,lam2, delta, mu)) #SEIR 模型 # print(ySEIR2) # 输出绘图 # print(" lamda={}\ tmu={}\ tsigma={}\t(1-1/ sig)={}". format( lamda, mu, sigma, fsig)) plt. title("SEIR model") plt. xlabel('天数') plt. axis([0,tEnd,-0.1,1.1]) plt. plot(t,ySEIR2[:,0],'-g', label='易感者比例') # 易感者比例 plt. plot(t,ySEIR2[:,1],'-b', label='潜伏者比例') # 潜伏者比例 plt. plot(t,ySEIR2[:,2],'-m', label='患病者比例') # 患病者比例 plt. legend( loc=' upper right') plt. savefig("SEIR model. svg", format=" svg") plt. show() |
问题二算法程序
程序编号 | 5 | 程序说明 | 对集散地选址K- means | 编程软件 | Python |
data = pd. read _ excel('D:/ anaconda _ package/ jupyternotebook/华为杯/2022 华为杯/ data/问题二/ 小区数据. xlsx') data X= data[["小区横坐标","小区纵坐标"]] x km=KMeans(n_ clusters=25). fit(X) data[' cluster']= km. labels _ data. sort _ values(' cluster') data # data. to _ excel("聚类. xlsx") #类中心 cluster _ centers= km. cluster _ centers _ cluster _ centers cluster _ coordinate= pd. DataFrame( cluster _ centers) cluster _ coordinate cluster _ coordinate. iloc[0,0] x_ coordinat=[] y_ coordinat=[] for i in range( len( data)): forjin range(25): if data[' cluster']. values[i]==j: x_ coordinat. append( cluster _ coordinate. iloc[j,0]) y _ coordinat. append( cluster _ coordinate. iloc[j,1]) data['聚类中心横坐标']=x_ coordinat |
data['聚类中心纵坐标"]=y coordinat
data
def distance(x,y):
d= np. sqrt((x[0]-y[0])**2+(x[1]-y[1])**2)
return d
x1= data[['小区横坐标','小区纵坐标']]
x2= data[['聚类中心横坐标','聚类中心纵坐标']]
x1 = np. array(x1)
x2 = np. array(x2)
distance(x1 [1],x2 [1])
#计算各点到中心的距离
dis=[]
for i in range( len( data)):
dis. append( distance(x1 [i],x2 [i]))
data['距离"]= dis
village num= data. groupby(' cluster')['小区编号"]. count()
peo num= data. groupby(' cluster')['小区人口数 (人) ']. sum()
dis sum = data. groupby(' cluster')['距离"]. sum()
dis mean = data. groupby(' cluster')['距离"]. mean()
area x= data. groupby('所属区域')['小区横坐标"]. mean()
area y= data. groupby('所属区域')['小区纵坐标"]. mean()
area x
area y
area=[]
forii n range(9):
area. append(( area x[i], area y[i]))
total=[]
for i in range( len( cluster centers)):
tmp=[]
for j in range( len( area)):
d= distance( cluster centers[i], area[j])
tmp. append(d)
total. append( tmp)
belong area=[]
forii n range( len( total)):
ba= total[i]. index( min( total[i]))
belong area. append( ba)
cluster coordinate. columns=['x 坐标','y 坐标']
cluster coordinate['管辖范围小区个数']= village num. tolist()
cluster coordinate['管辖范围内人口数'] = peo num. tolist()
cluster coordinate['总服务距离']= dis sum. tolist()
cluster coordinate['平均距离']= dis mean. tolist()
cluster coordinate['所属区域']= belong area
cluster coordinate
area name= area x. index. tolist()
d area=8
for in range(9):
d area[i]= area name[i]
d area
area belong=[]
for i in range( len( cluster coordinate)):
for j in range( len( area name)):
if cluster coordinate['所属区域']. iloc[i]==j:
area belong. append( area name[j])
cluster coordinate['所属行政区']= area belong
cluster coordinate
plt. scatter( data["小区横坐标"], data["小区纵坐标"],c= colors[ data[" cluster"]])
plt. scatter( centers.小区横坐标, centers.小区纵坐标, linewidths=3, marker="*',s=30,c='r')
ax= plt. axes()
ax. spines[' top']. set visible( False)
ax. spines[' right']. set visible( False)
plt. xlabel("横坐标")
plt. ylabel("纵坐标")
plt. savefig("中心. jpg')
plt. scatter( data["小区横坐标"], data["小区纵坐标
"],c= colors[ data[" cluster"]],s=10, alpha=1)
ax = plt. axes()
ax. spines[' top']. set visible( False)
ax. spines[' right']. set visible( False)
plt. savefig("小区坐标. jpg')
scatter matrix( data[["小区横坐标","小区纵坐标"]],s=100, alpha=1,
c= colors[ data[" cluster"]], figsize=(10,10))
plt. suptitle(" With 2cmtroids initialized")