В этой фазе мы добавим парковку на обочине Menninkaisentie (парковка хорошо видна на спутниковом снимке).
Но вначале давайте немного улучшим нашу текущую модель. Как вы могли заметить, въезды на главную дорогу с Menninkaisentie не совсем точно соответствуют реальным дорогам на местности. Давайте изменим перекресток в модели, чтобы добиться более точного соответствия.
Измените внешний вид перекрестка
- Чтобы вам было легче редактировать графические элементы перекрестка, увеличьте масштаб графической диаграммы (воспользуйтесь для этого кнопкой панели инструментов Приблизить ).
- Чтобы увеличить форму и длину въездов на перекрестке, нужно увеличить площадь самого перекрестка. Это можно сделать, отдалив конечные точки примыкающих к перекрестку дорог. Для этого выделите в графическом редакторе дорогу roadEast. Вы увидите, что конечная точка дороги у перекрестка выделена зеленым цветом. Аккуратно перетащите примыкающую к перекрестку точку в сторону от перекрестка. При этом отпустить кнопку мыши нужно только в том случае, если точка все еще подсвечивается зеленым цветом - это означает наличие соединения с перекрестком. Если же точка станет белой, то это значит, что вы перетащили конец дороги слишком далеко от перекрестка. В таком случае отмените последнее действие, нажав на кнопку панели инструментов Отменить, и затем повторите действие.
- Если необходимо, повторите перетаскивание несколько раз. В итоге, перемещая конечную точку дороги по чуть-чуть, нужно, чтобы точка оказалась примерно на том же расстоянии, которое показано на следующем рисунке.
- Аналогичным образом перетащите и конечные точки других двух дорог. В результате въезды на главную дорогу должны будут принять ту же форму, что и дороги на спутниковом снимке.
Запустите модель. Теперь движение машин в нашей модели будет абсолютно таким же, как и на моделируемом нами перекрестке.
Покончив с перфекционизмом, можем продолжить дальше, и промоделировать, как время от времени машины заезжают на парковку.
Нарисуйте парковку
- Перетащите элемент Парковка из секции Разметка пространства палитры Библиотека дорожного движения на графическую диаграмму. Перетаскивая парковку по диаграмме, вы увидите, что все фигуры, кроме дорог, будут временно скрыты.
- Поместите курсор у дороги в том месте улицы Menninkaisentie, где на спутниковом снимке видны припаркованные машины. Парковка прикрепится к дороге. Если нужно переместить парковку, то это можно сделать, перетащив ее с помощью мыши.
- Перейдите в панель Свойства и измените Тип парковки с параллельной на перпендикулярную. В итоге парковка должна выглядеть следующим образом:
- По умолчанию парковка создается с пятью парковочными местами. Количество парковочных мест можно изменить в свойствах элемента, но в нашем случае нам нужна парковка именно на пять машин.
- Если нужно, то длину парковочного места можно задать, изменив значение свойства Длина парковочного места. Ширина же определяется свойством Ширина полосы дорожной сети (которое влияет на все элементы этой сети: дороги, перекрестки, и т.д.).
Теперь нужно добавить в нашу диаграмму процесса блоки, которые будут моделировать заезд автомобилей на парковку и пребывание там в течение определенного времени. Чтобы не перегружать диаграмму процесса множеством аналогичных блоков, мы промоделируем заезд на парковку только для части тех машин, которые движутся по улице Tapiolavagen с севера, и затем поворачивают на Menninkaisentie.
Измените диаграмму процесса
- Мы хотим, чтобы теперь часть машин, едущих с севера и поворачивающих на Menninkaisentie, заезжала на парковку, расположенную на обочине этой дороги. Первым делом нужно удалить соединитель, ведущий из блока selectNE в блок carMoveToE, поскольку в этом месте диаграммы нам нужно будет произвести еще одно деление потока машин - часть машин поедет на парковку, в то время, как остальные - до конца дороги Menninkaisentie.
- Для того, чтобы произвести это деление потока машин, добавьте еще один блок Библиотеки моделирования процессов SelectOutput. Назовите этот блок selectParking и соедините его порты с портами других блоков, как это показано на рисунке ниже.
- Мы хотим направлять на парковку только небольшую часть потока машин (скажем, 10 процентов), поэтому введите в поле Вероятность: 0.1. Таким образом мы задаем долю автомобилей, направляемую блоком в свой верхний выходной порт.
- Добавьте еще один блок CarMoveTo (в ветвь процесса, ведущую из верхнего порта блока selectParking, см. рисунок ниже). Назовите его carMoveToParking. Этот блок будет моделировать движение автомобилей к парковке.
- В свойствах блока выберите Цель движения: парковка и затем выберите в поле Парковка имя созданной нами ранее парковки: parkingLot.
- Теперь нам нужно промоделировать, как приехавшие на парковку автомобили пребывают на ней в течение определенного времени. Для этого добавьте блок Библиотеки моделирования процессов Delay. Назовите этот блок parking и соедините его так, как это показано на рисунке ниже.
- Данный блок моделирует задержку, связанную с выполнением агентом определенной операции (в нашем случае - ожидание на парковке). Откройте свойства этого блока. Измените Время задержки на triangular(5, 15, 45) минут.
- Поскольку на парковке могут одновременно находиться до 5 машин, введите в поле Вместимость: 5. Этот параметр задает максимальное количество агентов (в нашем случае - автомобилей), которое может одновременно находиться в данном блоке.
Запустите модель. Вы увидите, как время от времени автомобили будут заезжать на парковку. Но попробуйте проиграть выполнение модели в режиме максимально возможной скорости, щелкнув по кнопке в панели управления окна модели Реальное/виртуальное время. Тогда вы, скорее всего, увидите сообщение об ошибке. Причина этого в том, что в какой-то момент автомобиль будет направлен на парковку, а свободных мест на ней не окажется.
Давайте учтем и этот случай, внеся минимальные изменения в нашу диаграмму процесса.
Измените диаграмму процесса
Как вы могли заметить, у блока CarMoveTo помимо двух стандартных портов на левой и на правой границе блока есть и еще один, помещенный на нижнюю границу значка. К нему ведет красная стрелочка. Этот порт называется outWayNotFound и представляет собой выходной порт, в который перенаправляются те автомобили, для которых не удалось построить маршрут к заданной в этом блоке цели движения.
- Соедините нижний выходной порт блока carMoveToParking с входным портом блока carMoveToE. В нашем случае автомобили будут направляться в этот порт, если на момент поступления автомобиля в блок carMoveToParking на парковке не окажется свободных мест. Таким образом, если парковка будет полностью занята, то автомобили будут просто продолжать движение дальше по дороге.
Запустите модель и убедитесь в том, что модель работает корректно, и ошибок больше не возникает.
Демо-модель: Road Traffic Tutorial - Phase 4 Открыть страницу модели в AnyLogic Cloud. Там можно запустить модель или скачать ее по ссылке Исходные файлы модели.-
Как мы можем улучшить эту статью?
-