java - 在 AnyLogic 中建模人口密度
问题描述
我正在尝试在 AnyLogic 中模拟人口密度。为此,我在 Main 中插入了一个国家/地区的图像,并使用折线绘制区域(在本例中称为 pl_[areaname],省份。然后在 Main 中使用函数(SetHomeLocation),我放置代理(患者在这种情况下)在这些区域中,如果满足条件。为简洁起见,部分代码如下所示。
double x;
double y;
if(uniform(1) <= 0.0343995) /// province 1
do {
x = uniform( image.getX(), image.getX() + image.getWidth() );
y = uniform( image.getY(), image.getY() + image.getHeight() );
} while( ! pl_Groningen.contains( x, y ) );
else if(uniform(1) > 0.0343995 && uniform(1) <= 0.0725446) /// province 2
do {
x = uniform( image.getX(), image.getX() + image.getWidth() );
y = uniform( image.getY(), image.getY() + image.getHeight() );
} while( ! pl_Friesland.contains( x, y ) );
else
do {
x = uniform( image.getX(), image.getX() + image.getWidth() );
y = uniform( image.getY(), image.getY() + image.getHeight() );
} while( ! countrybounds.contains( x, y ) );
agent.setXY( x, y );
在 Patient 中,我创建了两个变量 XHome 和 YHome,并在“启动时”字段中输入了:
//setup home location (within the country bounds that are defined in Main)
main.setHomeLocation( this );
XHome = getX();
YHome = getY();
现在看来 SetHomeLocation 函数中的代码没有按预期工作。在某些领域,我得到的代理数量比我预期的要少。
我也相信
if(uniform(1) > x && uniform(y) <= y)
是错误的,因为我相信该声明将评估均匀分布中的两种不同的抽奖,而不是一个。
如需全面披露,您可以通过以下链接下载完整的模型。https://www.mediafire.com/file/eaq65mgpqi9qlld/TestModelKaart.zip/file
需要明确的是,这篇文章包含两个问题。首先,模型显示出意外行为的原因可能是什么,即在某些区域放置的代理太少?其次,如果我想要 x > uniform(1) <= y,我如何让 AnyLogic 评估均匀分布中的一个平局?
任何其他与人口密度建模相关的技巧当然都非常受欢迎!
解决方案
首先,关于您的第二个问题,通常是您的代码,您最好将生成的随机数保存在局部变量中,例如double rand = uniform();
然后在代码的以下部分中使用局部变量。这样您就可以if(rand > x && rand <= y)
正确评估。它也可以解决您的第一个问题,因为您以前形式的第二个 if 语句(如您所提到的)将无法正常运行。
其次,如果您将省份绘制为折线,则无需使用 ado while
在折线内查找点。您可以使用pl_[areaname].randomPointInside()
在 `pl_[areaname]' 中找到一个随机点。
推荐阅读
- python - 如何检测边缘、边缘的方向并分离每个不同的边缘以进行进一步的单独处理
- sonarqube - SonarQube Scanner 执行失败:java 不能被索引两次
- django - Django Queryset .save() 很慢
- javascript - 在 React/redux 中通过 debounce 看到第一次输入事件被触发到事件处理程序的显着延迟
- python - 将 df.apply() 与 datetime.strptime 一起使用的语法
- sql - 获取正确字段的 SQL 查询
- docker - 如何访问在 docker 容器中运行的 spring 应用程序?
- eucalyptus - euserv-register-service 错误/错误?CentOS 7.5 上的 Euca 4.4.4
- sql - SQL 子查询单独运行非常快,但在 select 中使用时非常慢
- git - 如何修复已经在开发中的功能(git-flow)