Задержки для определенного количества агентов - PullRequest
0 голосов
/ 12 сентября 2018

Я работал над AnyLogic в течение последних нескольких недель, и я не могу найти способ для события вызвать stopDelay () для определенного количества агентов. Например, я просто хочу закончить задержку только для 15 операторов, которые в настоящее время находятся в блоке задержки. Есть ли способ сделать это?

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Это код, который случайным образом останавливает агентов в блоке задержки вместо того, чтобы делать это по порядку прибытия:

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++;
}
0 голосов
/ 12 сентября 2018

В событии (или любой функции) вы можете выполнить итерацию по блоку задержки, чтобы остановить первых 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;
   }
}
...