【问题标题】:Delays for certain amount of agents一定数量的代理延迟
【发布时间】:2019-02-16 13:54:42
【问题描述】:

过去几周我一直在研究 AnyLogic,但我似乎无法找到一种方法让事件触发一定数量的代理的 stopDelay()。例如,我只想结束当前处于延迟块中的 15 个代理的延迟。有没有办法做到这一点?

【问题讨论】:

  • 我尝试运行代码,但在 for 参数“delayBlock”部分出现错误... int iAgentsStopped = 0; int iAgentsToStop = min(delay.size(), 15 ); // 如果我们有任何停止 if( iAgentsToStop > 0 ){ for( Productos productoses : delayBlock ) / delay.stopDelay( productoses ); iAgentsStopped++; /* se // 如果我们已经停止得够多了,就停止循环 if( iAgentsStopped == iAgentsToStop ) break; }

标签: java anylogic


【解决方案1】:

这是一个随机停止延迟块中的代理而不是按到达顺序执行的代码:

int iAgentsStopped = 0;
int iAgentsToStop = min( delay.size(), 15 ); 
List <Agent> agents=findAll(delay,d->true);
Collections.shuffle(agents);
while(iAgentsStopped < iAgentsToStop){
     delay.stopDelay( agents.get(iAgentsStopped) );
     iAgentsStopped++;
}

【讨论】:

  • 你有没有在 delay.get(i) 方法的智能感知中注意到这一点? “按索引返回代理。请注意,这种方法非常慢,而且代理的顺序及其索引不会被保留,并且在下一个时刻可能会有所不同”我很惊讶地看到这个并回到 AnyLogic 6.9 -它明确表示由最旧的命令。您是否曾经有过没有订购或看到它只是为您洗牌的时候?
  • ups no...我犯了一个错误...这是agents.get,而不是delay.get :)
【解决方案2】:

在事件(或任何函数)中,您可以遍历延迟块以停止您找到的前 15 个代理。代码可能如下所示:

// assume delayBlock is the name of your delay block
int iAgentsStopped = 0;
int iAgentsToStop = min( delayBlock.size(), 15 ); // can't stop more than you have
// if we have any to stop
if( iAgentsToStop > 0 ){
   for( Agent agent : delayBlock ){
      delayBlock.stopDelay( agent );
      iAgentsStopped++;
      // if we have stopped enough, just stop looping
      if( iAgentsStopped == iAgentsToStop )
         break;
   }
}

【讨论】:

  • 在你的第二行更正:min(delayBlock.size(),15);
  • 我尝试运行代码,但在 for 参数“delayBlock”部分出现错误... int iAgentsStopped = 0; int iAgentsToStop = min(delay.size(), 15); // 如果我们有任何停止 if( iAgentsToStop > 0 ){ for( Productos productoses : delayBlock ) / delay.stopDelay( productoses ); iAgentsStopped++; /* se // 如果我们已经停止得够多了,就停止循环 if( iAgentsStopped == iAgentsToStop ) break; }
  • “延迟”或“延迟块”是指您为延迟块命名的任何内容。我将在原帖中添加评论
  • 我仍然遇到问题,因为我收到以下错误:当我进行更正时,break 不能在循环或开关之外...
  • 在 for 循环的末尾添加一个括号。我在原帖中的错字,但如果你要在 AnyLogic 中编程,你会真正受益于一些基本的编码实践——如何编写 for 循环等
猜你喜欢
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-16
  • 1970-01-01
  • 2019-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多