Это интересный вопрос, потому что это одна из общих концептуальных проблем, связанных с библиотекой дорожного движения, когда вы с ней не знакомы.
Разделение вашей модели на ошибку почти всегда является ошибкойнесколько «carMoveTo» для определения траектории движения автомобиля в дорожной сети.
Если возможно, вам всегда следует избегать этого.Есть 2 причины, по которым это является проблемой:
- Поскольку созданное вами пересечение считается частью дороги, по которой оно пойдет первым.carMoveTo3 начинает думать, что начальная точка - это начало малой дороги, но, поскольку она находится в полосе, которая не позволяет движение, она даже не может начать движение.
- Потому что, когда вы запускаете новый автомобильMoveTo, если там слишком много трафика, автомобили не могут правильно рассчитать, где находятся другие автомобили, пока они находятся на перекрестке.Это приводит к тому, что автомобили сталкиваются и ведут себя хаотично, если есть движение.
Обе точки можно считать ошибкой AnyLogic, если хотите, но эта дорожная библиотека была создана, думая, что ее следует использовать в полностьюдругой путь.(По крайней мере, я так думаю)
Итак, как правильно это сделать?
Хорошо ... вам нужно иметь только 1 carMoveTo, удаляя selectOutputи определение того, по какому маршруту должен следовать автомобиль до carMoveTo или в самом carMoveTo.
И в carMoveTo вы можете определить стратегию действий, когда маршрут невозможен.
Здеськак бы я сделал вашу модель: ![new Model](https://i.stack.imgur.com/ypRyq.png)
В carMoveTo я бы выбрал road1 или road2 с вероятностью 50% (что является правильным способом выполнения выбора selectOutput, который вы используете).Я не знаю, как вы выбираете дорогу, но вы можете определить в этом месте.
![carMoveTo](https://i.stack.imgur.com/cHOKk.png)