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>的话,我如何让AnyLogic计算一个从均匀分布中得出的结果;统一(1)<=Y
当然,任何其他与人口密度建模相关的技巧都是非常受欢迎的!