在AnyLogic中建模人口密度

时间:2018-11-09 12:21:21

标签: 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 );

在“患者”中,我创建了两个变量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>均匀(1)<= y,如何让AnyLogic从均匀分布中评估一幅?

与人口密度建模有关的任何其他提示当然也很受欢迎!

2 个答案:

答案 0 :(得分:1)

要回答至少一个问题,您必须在开头创建一个变量,然后在其余函数中使用它:

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

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

答案 1 :(得分:1)

首先,关于第二个问题(通常是代码),最好将生成的随机数保存在局部变量(例如double rand = uniform();)中,然后在代码的以下部分中使用局部变量。这样,您可以正确评估if(rand > x && rand <= y)。同样,它也可以解决您的第一个问题,因为您先前提到的第二种if语句(如您所提到的)无法正常运行。

第二,如果您将省份绘制为多段线,则无需使用do while在多段线内查找点。您可以使用pl_[areaname].randomPointInside()在“ pl_ [areaname]”中找到随机点。