如何解决将预定数量的业务代表放置在AnyLogic的折线中的随机位置
我有一个模型,其中将代理放置在不同折线形状内的随机位置。这很好。我使用以下函数,该函数在代理的“启动时”字段中调用:
double rand = uniform(1);
double x;
double y;
if(rand <= 0.5) ///
do {
x = 0,100 );
y = 0,100 );
} while( ! pl_FirstShape.contains( x,y ) );
else if(rand > 0.5) ///
do {
x = uniform( 0,100 );
y = uniform( 0,100 );
} while( ! pl_SecondShape.contains( x,y ) );
以上代码将针对不同的运行在每个折线中放置不同数量的代理。这当然是预期的。但是,我想在每个折线的随机位置放置特定数量的代理。我对do-while循环不是很熟悉,所以我自己也找不到解决方案。我尝试过添加这样的计数器:
int counter = 0;
if(counter < 100) ///
do {
x = uniform(0,100 );
y = uniform(0,100 );
counter++;
} while( ! pl_FirstShape.contains( x,y ) );
尽管代码编译没有错误,但是我看不到任何代理都显示在这些折线形状中。谁可以帮助我?
解决方法
我写了一段代码,可以完成我想要的。 v_counter
是全球性的
Main中的变量,用于跟踪生成的代理数量。参数p_CountAgentsFirstShape
和p_CountAgentsSecondShape
也在Main中,并且包含每个形状中所需的座席数量。
double x = 0;
double y = 0;
if(v_counter <= p_CountAgentsFirstShape) {
do {
x = uniform( 0,100 );
y = uniform(0,100);
if(pl_FirstShape.contains(x,y)) {
v_counter = v_counter + 1;
}
} while( ! pl_FirstShape.contains( x,y ) );
}
else if(v_counter >= p_CountAgentsFirstShape & v_counter <= p_CountAgentsSecondShape){
do {
x = uniform(0,100);
y = uniform(0,100);
if(pl_SecondShape.contains(x,y)) {
v_counter= v_counter+ 1;
}
} while( ! pl_SecondShape.contains( x,y ) );
}
else
do {
x = uniform(0,100);
} while( ! countrybounds.contains( x,y ) );
agent.setXY( x,y );
当然,优选使用do-while循环的内容来减少重新填充。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。