Anylogic: сброс заданного количества с использованием параметров - PullRequest
0 голосов
/ 03 мая 2018

У меня есть поезд, работающий в моей модели с разными агентами. На одной из остановок я хотел бы вывести часть каждого агента.

Мои агенты в поезде: дети, подростки, взрослые и золотые старики. На данной остановке я бы хотел высадиться:

20% детей

40% подростков

В Drop-off agent я изменил следующие входные данные:

Dropoff : заданное количество (если доступно)

Количество : размер детей (0,2) + размер подростков (0,4)

нажмите ЗДЕСЬ , чтобы просмотреть раскрывающиеся свойства

1 Ответ

0 голосов
/ 04 мая 2018

Чтобы достичь этого, вы должны создать присвоить значение переменной, которая находится в агентах, прежде чем агенты будут подобраны вашим поездом. Создайте переменную с именем например willBeDropped в качестве логического значения со значением по умолчанию false. Эта переменная должна существовать в каждом из ваших 4 типов агентов.

Таким образом, когда агенты подобраны поездом, вам следует присвоить значение true или false для willBeDropped ... Поэтому, когда поезд доберется до данной остановки, у 20% детей будет willBeDropped=true, а у 80% willBeDropped=false.

В выпадающем списке вы должны использовать «пока условие истинно», где условие agent.willBeDropped==true

Я не знаю, как вы подбираете пассажиров, поэтому я не знаю, как вам там помочь ... Ваш вопрос не завершен, но вы сами можете понять это, зная, что я только что сказал.

Но если у вас есть следующая конфигурация, в которой все добавляются в поезд один раз:
enter image description here

Вы можете использовать следующий код:

int num1=count(queue,q->q instanceof Children);
int num2=count(queue,q->q instanceof Teenager);

int numToDropOff1=(int)round(num1*0.2);
int numToDropOff2=(int)round(num2*0.4);

int counter1=0;
int counter2=0;

for(int i=0;i<queue.size();i++){
    if(counter1<= numToDropOff1 && queue.get(i) instanceof Children){
        queue.get(i).willBeDropped=true;
        counter1++;
    }else if(counter2<= numToDropOff2 && queue.get(i) instanceof Teenager){
        queue.get(i).willBeDropped=true;
        counter2++;
    }
}
...