Giter VIP home page Giter VIP logo

virusbroadcast's Introduction

VirusBroadcast

一个基于java的模拟仿真程序,由于启动的时候时间仓促,数据不足,所以模型和推演过程过于简单,如果有好的想法或者能提供相关数据支持的朋友请提issues。 如果您也是一名java程序员,可以直接修改并给我提交pr,我之前已经启动每日疫情数据的每日抓取工作,希望在疫情结束后有机会通过这些精准的的数据做一个复盘。

2020.2.6: 病毒变异过程是一个不断适应的过程,可以尝试简单的DNN对病毒进行建模,已经开始着手实施。 2020.4.2: 数据量太小,模拟结果太过不靠谱。DNN暂时搁置了。

virusbroadcast's People

Contributors

bruceyong avatar changingself avatar dubhebroken avatar enaium avatar ginryan avatar grjohn avatar kikiletgo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

virusbroadcast's Issues

建议改编成一个游戏,用于对孩子的教育

游戏中可以设置医院床位数量,人员控制程度,限制条件是时间,有限时间内控制了病毒传播就算游戏通关。让孩子形象的理解如何才能控制病毒,为孩子们的成长提供一些帮助。

厉害

一看文件夹的-master就猜到九成是git上的,两枚硬币不够诚意awa

空余病床为负数的问题

将MyPanel.java文件中84行:
g.drawString("空余病床:" + (Constants.BED_COUNT - PersonPool.getInstance().getPeopleSize(Person.State.FREEZE)), 16, 160);
修改为:
g.drawString("空余病床:" + Math.max(Constants.BED_COUNT - PersonPool.getInstance().getPeopleSize(Person.State.FREEZE), 0), 16, 160);

关于潜伏期时间的模拟

固定时间似乎不是一个好的方案,这次疫情的潜伏期一般为 3 到 7 天,最长不过 14 天。

Java 我不熟,就自己移植了一个 Javascript 版本,修改了一下潜伏期的模拟方法,可以参考一下:

const SHADOW_TIME_GEN = (function* () { while(1) { yield getShadowTime() } })();
// 潜伏期主要为 3-7 天
function getShadowTime () {
    let day = 5 + randomGaussion() * 2;
    day = day < 0 ? 0 : day;
    return Math.floor(day);
}

模拟结果还蛮不错的:

// 4993 例模拟结果
{
0: 169
1: 339
2: 702
3: 1118
4: 1492
5: 1453
6: 1109
7: 734
8: 324
9: 115
10: 36
11: 13
12: 1
13: 1
}

一个现存的可以明显提升性能的建议

1、问题描述:

增加城市市民样本容量会逐渐拉长每次更新UI状态的单位时间,原因是每次更新时会循环所有person的update方法,update方法中继续嵌套更多的(隐藏)循环,时间复杂度高达 O(N^2) ,更新性能随着样本容量增加(person)性能以二次方速度的降低。

2、问题现象

增加样本容量直达5万,每次的UI内部状态更新时长严重增长10倍以上,大样本容量导致UI更新卡顿

3、建议方案

1、UI前端当前使用swing和awt,暂时没有到达性能瓶颈。因此可暂时无需更改前端。
当前要解决的是,UI更新时消耗大量的CPU时间,因此我们可以调整为异步通知的形式,分为至少两个线程。一个线程用于UI更新,另一个线程用于大量的person行为计算,分离UI更新操作和计算操作到两个线程,互不干涉。仅仅在需要更新UI状态数据时,工作线程通过生产者-消费者模型向UI线程发送需要更新的数据消息更新UI,并且使用ConcurrentHashMap等线程安全且高效的内存容器进行数据传递。

2、可以对update当中的一些耗时循环和无用循环步骤进行剪枝操作,优化成O(N)甚至更低时间复杂度,以减少CPU计算量。

4、优化效果

建议方案的优化效果可以大幅提高样本容量以及UI更新频次,UI更新频次可以达到更高,在CPU承受范围内快速更新UI且不受到计算量增加的影响。

f代表什么

求解答!!
跑了gihub上的代码,但是有一点不懂,请问 :
ATALITY_RATE = 0.50f;//fatality_rate病死率,根据2月6日数据估算(病死数/确诊数)为0.02
这个f代表的是什么?0.5f=0.02么?

急需病床数字有误的Bug

源代码中急需病床减去了隔离人数,但发病人数中已并不包含隔离人数
建议将MyPanel.java中line:94行的修改为
int needBeds = Math.max(Constants.BED_COUNT - PersonPool.getInstance().getPeopleSize(Person.State.FREEZE), 0)==0 ?PersonPool.getInstance().getPeopleSize(Person.State.CONFIRMED) :0;
也可以到我的分支https://github.com/EricTianC/VirusBroadcast下查看。
另外,我增加了图形控制台(尽管还很简陋)

关于人员被感染,代码问题

 float random = new Random().nextFloat();
 if (random < Constants.BROAD_RATE && distance(person) < SAFE_DIST) {
        this.beInfected();
        break;
 }

这个地方 random不应该是大于 Constants.BROAD_RATE 感染率吗?可能是我理解错了吧

关于MyPanel的pIndex设计的一些疑问

people.get(pIndex).update();

        for (Person person : people) {
            switch (person.getState()) {
                case Person.State.NORMAL: {
                    g.setColor(new Color(0xdddddd));
                    break;
                }
                case Person.State.SHADOW: {
                    g.setColor(new Color(0xffee00));
                    break;
                }
                case Person.State.CONFIRMED:
                    g.setColor(new Color(0xff0000));
                    break;
                case Person.State.FREEZE: {
                    g.setColor(new Color(0x48FFFC));
                    break;
                }
            }
            person.update();  // 更新人员状态
            // 绘制当前人员的坐标以及感染状态
            g.fillOval(person.getX(), person.getY(), 3, 3);
        }

        pIndex++;
        if (pIndex >= people.size()) {
            pIndex = 0;
        }

在for循环中已经更新了每个人员的状态,为什么还要设置一个pIndex下标来一个个更新?

復工模擬: 考慮通勤因素

從Youtube視頻裡找到這個源碼 覺得這個專案很切身阿
我想請問有沒有考慮過各大城市復工後病毒擴散的情況
尤其是各點位真實空間分布狀況的
鐵路 公路 地鐵 腳踏車 等等
謝謝

新增maven项目结构

打开一运行竟然报出找不到main方法 如果有一个可以一键启动的就更帅了

关于代码的问题点

作者能否解释一下:

targetXU = 100 * new Random().nextGaussian() + x; 
targetYU = 100 * new Random().nextGaussian() + y;

double targetX = targetSig * new Random().nextGaussian() + targetXU;
double targetY = targetSig * new Random().nextGaussian() + targetYU;

这些代码的含义?另外 targetSig 的值为什么设计成50?谢谢作者

是缺jar包吗?

错误: 找不到或无法加载主类 cucumber.api.cli.Main
原因: java.lang.ClassNotFoundException: cucumber.api.cli.Main

看到README的更新,求疫情数据,萌新也想试试DNN

有疫情数据的可以分享一下嘛?我也是一名java爱好者,刚开始接触DNN,也想试试,。
同时十分赞同up主只有神经网络才能准确预测染病几率,ISSUES里面建议增加的变量都是玩概率的,感觉意义不大。

关于展示的一点问题

我试图将它截图分享,但每次都找不到合适的时机。
建议增加键盘检测,做出暂停键的效果。
或者增加一个boolean,控制程序在病毒被完全控制(潜伏,感染都为零)时冻结

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.