java - 在 AnyLogic 中模拟人口密度

标签 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 <=  0.0343995) /// province 1
//your code
else if(rand > 0.0343995 && rand <= 0.0725446) /// province 2
//your code
else //rand>0.0725446
//your code

首先检查这是否可以解决您的其他问题。

关于java - 在 AnyLogic 中模拟人口密度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53225633/

相关文章:

java - 无法将数据库条目映射到 java 枚举

anylogic - 如何在anylogic中阻止源到达率?

java - AnyLogic:计算集合中所有值的总和

AnyLogic 计算机处理器需要建议 - 单核速度与核心数量?

java - 有人在 AnyLogic 中使用过 set_center 方法吗?

java - 比较java中的utf-8字符串

java - 如何在不使用集合的情况下返回多个值?

java - 如何替换数组的单个元素

java - 从 JSONObject 转换多维数组

java - 连接到集合中最近的代理