Библиотека дорожного движения - блок MoveTo - во время цикла? - PullRequest
0 голосов
/ 20 февраля 2019

Я хочу внедрить подключенный автономный автопарк в AnyLogic.Из-за этого агент транспортного средства имеет возможность изменить свой маршрут.Насколько я понимаю, использование стандартного блока " MoveTo " позволяет перемещать агента транспортного средства только один раз , сообщая ему, по какой дороге перемещать агента.

Например,:

enter image description here

Любое транспортное средство, следующее за вышеуказанным блоком, может быть создано на любой дороге, указанной в road4Source , а затем перейти к другомуДорога указана в блоке moveToRoad2 , а затем будет уничтожена / удалена / отброшена при достижении блока endOfRoute .

Однако, поскольку транспортное средство может выбрать маршрут для себяЯ знаю только Источник и Пункт назначения автомобиля и не уверен, по какому маршруту он пойдет.Таким образом, количество блоков MoveTo в идеале должно быть динамическим.

Учитывая это, можно ли повторно использовать блоки MoveTo (рассмотрим это как цикл while)чтобы транспортное средство оставалось в блоке MoveTo до тех пор, пока не достигнет Пункт назначения (определенная дорога в моем случае)?

Примерно так:

enter image description here

Так что в аргументе Road moveToRoad2 я могу указать что-то вроде (может быть неправильно только для иллюстрации):

car.getRoad() == car.destination ? endOfRoute : car.getRoad()

, где car.getRoad() будет возвращать дорогу, по которой автомобиль хочет ехать, и если она будет равна месту назначения автомобиля, то будет идти блок endOfRoute .

РЕДАКТИРОВАТЬ 1

Теперь я понимаю, что при наличии двух подключений к одному порту AnyLogic выдаст ошибку:

Выходной порт можетНе подключайтесь к нескольким входным портам.

Так есть ли другой способ добиться того, чего я хочуделать здесь?

1 Ответ

0 голосов
/ 21 февраля 2019

Во-первых, вам нужна эта конфигурация: structure model

Затем вам нужно сгенерировать коллекцию дорог, по которой автомобиль будет двигаться ... Эта коллекция генерируется вcarSource ... или вы можете обновить его по мере прохождения "цикла".

агент автомобиля должен иметь переменную, которая будет начинаться с 0 и будет увеличиваться на +1 каждый раз при выходе из carMoveTo ...

Таким образом, новая дорога, по которой будет двигаться автомобиль:

collection.get(car.variable)

И при выходе из carMoveTo:

car.variable++;

В selectOutput условие для true будет:

agent.variable==collection.size()

Надеюсь, это поможет ... Тем не менее,Если у вас слишком большой трафик, вы увидите большие проблемы в вашей модели, потому что автомобиль не обязательно распознает движение после пункта назначения в carMoveTo, поэтому у вас могут быть проблемы ... или, возможно, нет ... зависит от разных факторов.

...