网站功能模块设计,网站建设傲鸿,solaris.wordpress,如何做网页制作前言前一阵子看到有人制作了《疫情传播仿真程序》#xff0c;是用 Java做的。里面根据多种实际情况#xff0c;如居民移动意愿、医护能力、病毒传播能力#xff0c;来模拟疫情的发展。看完之后#xff0c;我暗暗称奇#xff0c;特别是结合一些视频和照片#xff0c;确实做… 前言前一阵子看到有人制作了《疫情传播仿真程序》是用 Java做的。里面根据多种实际情况如居民移动意愿、医护能力、病毒传播能力来模拟疫情的发展。看完之后我暗暗称奇特别是结合一些视频和照片确实做得非常好。后来过了几天这个视频还上了 人民日报的微信公众号这时我们 .NET社区就开始骚动了起来????????咱们 .NET能不能也做一个既然有需要 2月6号那天晚上我决定说干就干经过两个晚上的思考与编码已经有了初步效果……运行效果如下这个效果可以这样解读如果不加以任何控制疫情会很快蔓延到整个城市只有 8:1000床位的城市将很快失去控制一年后运行效果如下非常惨烈参数与使用代码中实际有很多参数可以操作static double MoveWilling 0.90f; // 移动意愿0-1
static bool WearMask false; // 是否戴口罩
static int HospitalBeds 40; // 床位数
const float InffectRate 0.8f; // 靠得够近时被携带者感染的机率
const float SecondsPerDay 0.3f; // 模拟器的秒数对应真实一天
const float MovingDistancePerDay 10.0f; // 每天移动距离
const int InitialInfectorCount 5; // 最初感染者数
const double DeathRate 0.021; // 死亡率
// 要靠多近才会触发感染验证
static float SafeDistance() WearMask ? 1.5f : 3.5f;
// 住院治愈时间最短5天最长12.75天平均约7天
static float GenerateCureDays() random.NextFloat(5, 12.75f);
// 潜伏期1-14天
static float GenerateShadowDays() random.Next(1, 14);
// 发病后就医时间0-3天
static float GenerateToHospitalDays() random.Next(0, 3);
由于参数太多很难在运行时全部都做调整我选取了是否戴口罩、移动意愿、医院床数作为参数代码如下protected override void OnKeyPress(KeyPressEventArgs e)
{switch (e.KeyChar){case 1: MoveWilling 0.10f; break;case 2: MoveWilling 0.50f; break;case 3: MoveWilling 0.90f; break;case M: WearMask !WearMask; break;case A: HospitalBeds 40; break;case D: HospitalBeds - 40; break;case R:{if (MessageBox.Show(要重来吗, 确认, MessageBoxButtons.YesNo) DialogResult.Yes){City City.Create();}break;}}
}
其中按数字键 1、 2、 3可以指定不同的移动意愿其中 1表示居民最不愿意出门 3表示最愿意按 M可以控制居民是否能戴上口罩按 A可以添加医院可接纳病人数。一些演示超多床位这里我将床位调成 240个比例为 48: 1000static int HospitalBeds 240; // 床位数
也可以运行时增加床位按键盘 A即可不用改代码运行效果如下 可见床位变多后死亡率会降低治愈人数大大提高但仍然无法控制住疫情的发展。“理想”情况1·没有潜伏期可以这样配置// 0潜伏期
static float GenerateShadowDays() 0;
运行效果如下 可见就算潜伏期为 0由于没有及时就医疫情仍会失去控制。“理想”情况2·没有潜伏期、且立刻隔离就医像那个 Java版中会先介绍一个“理想”情况即感染即发病发病即就就医。此种模型的参数可以这样配置// 0潜伏期
static float GenerateShadowDays() 0;
// 发病后立即就医。
static float GenerateToHospitalDays() 0;
在这种情况下运行效果如下 可见由最初的 5人最终只感染了 6人理想情况下局势很快就被控制。当然这种情况是不存在的。戴口罩出门假如居民都戴口罩出门可以用如下配置也可以运行时按下 M键static bool WearMask true; // 一定戴口罩
运行效果如下 坚持了 107天疫情发展速度大大降低但由于医疗资源的匮乏死亡率仍然居高不下最终仍会失去控制。居民呆在家中不出门且戴口罩配置如下static bool WearMask true; // 一定戴口罩
static double MoveWilling 0.10f; // 每天只有10%的人愿意出门
运行效果如下 病毒在最初的 5人身上只感染了 2人。效率可谓惊人。模拟现实模型我想贴近现实模拟一些现实情况然后看看效果如何我的脚本如下前 20天不作任何控制第 20天全民戴口罩移动意愿降低至 50%床位增加 40个模拟进入重大突发公共卫生事件Ⅰ级响应第 25天移动愿意降低至 10%床位增加 80个模拟火神山医院第 30天床位再增加 80个共 240个模拟雷神山医院为了尽可能短地截取 gif我将时间缩短了真实时间可能会和这个比例为 1:2也就是相当于前 40天不作任何控制脚本如下void StepDay()
{if (day 20){WearMask false;MoveWilling 0.9;HospitalBeds 40;}if (day 20){WearMask true;MoveWilling 0.5;HospitalBeds 80;}if (day 25){MoveWilling 0.1;HospitalBeds 160;}if (day 30){HospitalBeds 240;}// 其它代码
}
运行效果如下 可见这真是与病毒的一部史诗级斗争。前 20天没有任何控制病毒疯狂肆虐前期只花了 9天就把医院给挤满了第 20之后居民带上口罩传播进度迅速下降但由于潜伏期较长发病人数仍然持续上升第 30天之后由于 5天前床位医护资源的跟进发病人数增速降低第 35天后发病人数开始下降第 68天后除了医院中的病人城市中已经没有病人第 78天已经没有被病毒感染的人了。总结所有这些代码我都上传到了我的博客数据网站各们可以下载代码通过 LINQPad6直接模拟运行或者拷到 VisualStudio中亦可。各位也可以或者提出您的想法 Github链接如下https://github.com/sdcb/blog-data/tree/master/2020/20200207-2019-ncov-simulate写完这个东西给我最大的感受就是震撼模拟起来就是一些数据而已但背后是千千万万有血有肉的病人和医务工作者向那些伟大的“逆行者”们致敬从上面的数据也可以看出任何单项指标做好都是不能完全阻止疫情的。我们要相互信任做好自己。我们能做的有尽可能呆在家别出门就真是对国家最好的贡献出门一定要戴口罩这样可以明显降低感染率。喜欢的朋友请关注我的微信公众号【DotNet骚操作】最后在新的一年里祝大家阖家欢乐鼠年大吉