博客

超级管理员

47981

帖子

11

回复

206

积分

楼主
发表于 2020-02-10 09:59:46 | 查看: 42 | 回复: 0

硬核的程序员告诉你,为什么现在还不能出门

最近天气开始转暖,上海也是一改之前的阴雨天气,开始放晴,看着外面明媚的阳光,好想出去散个步放放风啊。

硬核的程序员告诉你,为什么现在还不能出门

可惜疫情依然严重,还不到出门的时候。

很多公司已经安排开始上班了,小编对此表示理解,毕竟大家都是要恰饭的,只能请各位出门上班的同学一定要保护好自己,把装备都穿戴起来。

对于还没上班,可以远程办公的同学,尽量还是减少外出,为打赢这一场防疫战做出贡献。

最近慢慢养成了看新闻的习惯(从毕业以后已经很多年都没看过了),希望能够得到一些乐观的讯息,但很遗憾,专家们都很谨慎。

谨慎是好事情,至少现在没人敢小觑这次疫情。

「三体」中大刘有句话小编至今都觉得很有道理:

无知和弱小不是生存的最大障碍,傲慢才是。

在上周日 2 月 8 日那一天,国家卫健委对本次的新型冠状病毒进行了暂时的命名,命名为 「NCP」,同一天,上海卫健委也开了发布会,本次的「NCP」传播方式主要为直接传播、气溶胶传播和接触传播。

那么气溶胶传播和飞沫传播有啥区别,好像看起来很像的样子,下面找了两个游戏中的人物来解释一下:

飞沫传播就类似于大嘴这种生物,吐出来才会传播(tui~~):

硬核的程序员告诉你,为什么现在还不能出门

而气溶胶传播就比较 NB 了,走到哪病毒带到哪,即使人走了,病毒也依然存在,防不胜防:

硬核的程序员告诉你,为什么现在还不能出门

当然,防控的最好方法就是躲在家里继续做贡献,定期出门做好补给就行。

另外,看到 B 站上的大佬(Ele 实验室),用 Java 写了一个疫情传播的仿真程序,主要模拟了人员流动时和人员不流动时传播的情况,结论当然是最好的防控方式就是断绝人员流动。

视频在这里,推荐各位想出去溜达的同学好好看:

博客网站就不放视频了,直接给出 B 站视频地址:https://www.bilibili.com/video/av86478875

这个视频里面的数学模型还比较简单,并不够拟真,真实的情况远比视频中要复杂的多,这个视频主要是为了说明人传人的传播速度以及减少人员流动的必要性。

小编还特意把视频中用到的源码 clone 到本地跑了几次,模拟的还算是有点道理,一些主要的常量都考虑进来了。

本地有安装过 git 的同学可以使用这个命令来 clone 代码: git clone git@github.com:KikiLetGo/VirusBroadcast.git

代码量整体不大,大概就这么多:

硬核的程序员告诉你,为什么现在还不能出门

其中比较关键的参数设置类是 Person ,设定了一个城市中市民的状态,如下代码:

/**
    * 市民的状态
    * <p>
    * 市民状态应该需要细分,虽然有的状态暂未纳入模拟,但是细分状态应该保留
    */
public interface State {
    int NORMAL = 0;//正常人,未感染的健康人
    int SUSPECTED = NORMAL + 1;//有暴露感染风险
    int SHADOW = SUSPECTED + 1;//潜伏期
    int CONFIRMED = SHADOW + 1;//发病且已确诊为感染病人
    int FREEZE = CONFIRMED + 1;//隔离治疗,禁止位移

    //已治愈出院的人转为NORMAL即可,否则会与作者通过数值大小判断状态的代码冲突
    int DEATH = FREEZE + 1;//病死者
    //int CURED = DEATH + 1;//治愈数量用于计算治愈出院后归还床位数量,该状态是否存续待定
}

还有一个是模拟的参数 Constants ,如下:

/**
 * 模拟参数
 *
 * @ClassName: Constants
 * @Description: 模拟参数
 * @author: Bruce Young
 * @date: 2020年02月02日 21:40
 */
public class Constants {

    public static int ORIGINAL_COUNT = 50;//初始感染数量
    public static float BROAD_RATE = 0.8f;//传播率
    public static float SHADOW_TIME = 140;//潜伏时间,14天为140
    public static int HOSPITAL_RECEIVE_TIME = 10;//医院收治响应时间
    public static int BED_COUNT = 1000;//医院床位
    /**
     * 流动意向平均值,建议调整范围:[-0.99,0.99]
     * <p>
     * -0.99 人群流动最慢速率,甚至完全控制疫情传播
     * 0.99为人群流动最快速率, 可导致全城感染
     */
    public static float u = 0.99f;
    public static int CITY_PERSON_SIZE = 5000;//城市总人口数量
    public static float FATALITY_RATE = 0.50f;//fatality_rate病死率,根据2月6日数据估算(病死数/确诊数)为0.02
    public static int DIE_TIME = 100;//死亡时间均值,30天,从发病(确诊)时开始计时
    public static double DIE_VARIANCE = 1;//死亡时间方差
    /**
     * 城市大小即窗口边界,限制不允许出城
     */
    public static final int CITY_WIDTH = 700;
    public static final int CITY_HEIGHT = 800;

}

有兴趣学习源码的同学可以把代码 down 下来好好看下,并不算多,虽然一些设定还是比较理想化,但是学习的价值还是非常大的。

总之,既然在家里宅着没事做,不如把时间浪费在学习上,这样每天也会过得比较充实,别老想着去外面浪,虽然外面开始变得阳光明媚,万里无云,病毒说不定在哪条你经常走过的路上等着你。


本帖子中包含资源

您需要 登录 才可以下载,没有帐号?立即注册

您需要登录后才可以回帖 登录 | 立即注册

2018-2020 ©v2.1 冀ICP备19027484号

点击这里给我发消息