一个基于java的模拟仿真程序,由于启动的时候时间仓促,数据不足,所以模型和推演过程过于简单,如果有好的想法或者能提供相关数据支持的朋友请提issues。 如果您也是一名java程序员,可以直接修改并给我提交pr,我之前已经启动每日疫情数据的每日抓取工作,希望在疫情结束后有机会通过这些精准的的数据做一个复盘。
2020.2.6: 病毒变异过程是一个不断适应的过程,可以尝试简单的DNN对病毒进行建模,已经开始着手实施。 2020.4.2: 数据量太小,模拟结果太过不靠谱。DNN暂时搁置了。
A java virus broadcast simulation
游戏中可以设置医院床位数量,人员控制程度,限制条件是时间,有限时间内控制了病毒传播就算游戏通关。让孩子形象的理解如何才能控制病毒,为孩子们的成长提供一些帮助。
这两个注释掉了程序还能运行
一看文件夹的-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
}
Bhaghdgwyhega
我试着用python复刻出来了一个,但是运行速度上有先天劣势🙄️,看着没那么流畅
Originally posted by @y1han in #5 (comment)
能不能分享一下?中小学需要用python的范例。
增加城市市民样本容量会逐渐拉长每次更新UI状态的单位时间,原因是每次更新时会循环所有person的update方法,update方法中继续嵌套更多的(隐藏)循环,时间复杂度高达 O(N^2) ,更新性能随着样本容量增加(person)性能以二次方速度的降低。
增加样本容量直达5万,每次的UI内部状态更新时长严重增长10倍以上,大样本容量导致UI更新卡顿
1、UI前端当前使用swing和awt,暂时没有到达性能瓶颈。因此可暂时无需更改前端。
当前要解决的是,UI更新时消耗大量的CPU时间,因此我们可以调整为异步通知的形式,分为至少两个线程。一个线程用于UI更新,另一个线程用于大量的person行为计算,分离UI更新操作和计算操作到两个线程,互不干涉。仅仅在需要更新UI状态数据时,工作线程通过生产者-消费者
模型向UI线程发送需要更新的数据消息更新UI,并且使用ConcurrentHashMap
等线程安全且高效的内存容器进行数据传递。
2、可以对update当中的一些耗时循环和无用循环步骤进行剪枝操作,优化成O(N)甚至更低时间复杂度,以减少CPU计算量。
建议方案的优化效果可以大幅提高样本容量以及UI更新频次,UI更新频次可以达到更高,在CPU承受范围内快速更新UI且不受到计算量增加的影响。
可以将右边的医院区域往上收一收,在下方放置一些根据时间实时变化的疫情动态趋势图,展示效果将会更直观。
家庭非复工人员在家隔离,复工人员如果被感染,那就是以家庭为单位了。
求解答!!
跑了gihub上的代码,但是有一点不懂,请问 :
ATALITY_RATE = 0.50f;//fatality_rate病死率,根据2月6日数据估算(病死数/确诊数)为0.02
这个f代表的是什么?0.5f=0.02么?
用什么平台运行这些程序?
@KikiLetGo 如题
Sla
源代码中急需病床减去了隔离人数,但发病人数中已并不包含隔离人数
建议将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 感染率吗?可能是我理解错了吧
不然一个确诊的病人如果一直不病死就一直就具有感染性,运行一把多天之后仍然是一片红色,这个很明显不合理
如题,萌新请教大佬们
增加一个口罩参数,口罩的使用可以降低传播率和感染率。
病死率应该没有0.02那么低,差不多1%多一点点吧
public static int ORIGINAL_COUNT = 50;//初始感染数量
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下标来一个个更新?
比如网站?
该bug出现在Person类的action方法中,原代码:udY==0&&udY!=0,应该为:udY==0&&dY!=0
改正为:
if(udY==0&&dY!=0){ if(dY>0){ udY=1; }else{ udY=-1; } }
如题
您好,前些日子查了些流行病学的传播模型自己跑了几组对比试验,您可以参考我的项目
https://github.com/Harrison-Ho/Analysis-of-2019-nCoV-propagation-based-on-Model
有人使用Python写过类似的模型数据可视化吗
例如像本代码中一样,对武汉肺炎的扩散进行模型
我对Java不熟,对Python比较感兴趣,请问有这样的项目吗?
谢谢
感谢大佬的源码,我这边尝试添加了以滑动条为主的调节方式,
另外可以随时暂停,重置或者恢复世界原来的样子~
最后打包成电脑直接运行的exe版本,希望能帮助到各位研究模型的小伙伴们
https://github.com/JackChius/NCP_Virtual
從Youtube視頻裡找到這個源碼 覺得這個專案很切身阿
我想請問有沒有考慮過各大城市復工後病毒擴散的情況
尤其是各點位真實空間分布狀況的
鐵路 公路 地鐵 腳踏車 等等
謝謝
打开一运行竟然报出找不到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?谢谢作者
错误: 找不到或无法加载主类 cucumber.api.cli.Main
原因: java.lang.ClassNotFoundException: cucumber.api.cli.Main
可否增加病死率
有疫情数据的可以分享一下嘛?我也是一名java爱好者,刚开始接触DNN,也想试试,。
同时十分赞同up主只有神经网络才能准确预测染病几率,ISSUES里面建议增加的变量都是玩概率的,感觉意义不大。
有了lombok就不需要写很多setter,getter啦
https://mvnrepository.com/artifact/org.projectlombok/lombok/1.18.12
您好!
感谢您对武汉和开源社区的贡献,您的项目已录入 OpenSourceWuhan 武汉开源,如有疑问请open an issue
武汉开源 OpenSourceWuhan
集齐了开源平台上支援武汉的项目,是一个连结各个开源项目的入口。
感谢
我试图将它截图分享,但每次都找不到合适的时机。
建议增加键盘检测,做出暂停键的效果。
或者增加一个boolean,控制程序在病毒被完全控制(潜伏,感染都为零)时冻结
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.