微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将预定数量的业务代表放置在AnyLogic的折线中的随机位置

如何解决将预定数量的业务代表放置在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_CountAgentsFirstShapep_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 举报,一经查实,本站将立刻删除。