Фаза 4. Добавление парковки

В этой фазе мы добавим парковку на обочине Menninkaisentie (парковка хорошо видна на спутниковом снимке). 

Но вначале давайте немного улучшим нашу текущую модель. Как вы могли заметить, въезды на главную дорогу с Menninkaisentie не совсем точно соответствуют реальным дорогам на местности. Давайте изменим перекресток в модели, чтобы добиться более точного соответствия. 

 Измените внешний вид перекрестка

  1. Чтобы вам было легче редактировать графические элементы перекрестка, увеличьте масштаб графической диаграммы (воспользуйтесь для этого кнопкой панели инструментов Приблизить ).
  1. Чтобы увеличить форму и длину въездов на перекрестке, нужно увеличить площадь самого перекрестка. Это можно сделать, отдалив конечные точки примыкающих к перекрестку дорог. Для этого выделите в графическом редакторе дорогу roadEast. Вы увидите, что конечная точка дороги у перекрестка выделена зеленым цветом. Аккуратно перетащите примыкающую к перекрестку точку в сторону от перекрестка. При этом отпустить кнопку мыши нужно только в том случае, если точка все еще подсвчечиваеся зеленым цветом - это означает наличие соединения с перекрестком. Если же точка станет белой, то это значит, что вы перетащили конец дороги слишком далеко от перекрестка. В таком случае отмените последнее действие, нажав на кнопку панели инструментов  Отменить, и затем повторите действие.  
  1. Если необходимо, повторите перетаскивание несколько раз. В итоге, перемещая конечную точку дороги по чуть-чуть, нужно, чтобы точка оказалась примерно на том же расстоянии, которое показано на следующем рисунке.
  1. Аналогичным образом перетащите и конечные точки других двух дорог. В результате въезды на главную дорогу должны будут принять ту же форму, что и дороги на спутниковом снимке.

Запустите модель. Теперь движение машин в нашей модели будет абсолютно таким же, как и на моделируемом нами перекрестке.

Покончив с перфекционизмом, можем продолжить дальше, и промоделировать, как время от времени машины заезжают на парковку.

 Нарисуйте парковку

  1. Перетащите элемент Парковка  из секции Разметка пространства палитры Библиотека дорожного движения на графическую диаграмму. Перетаскивая парковку по диаграмме, вы увидите, что все фигуры, кроме дорог, будут временно скрыты. 
  1. Поместите курсор у дороги в том месте улицы Menninkaisentie, где на спутниковом снимке видны припаркованные машины. Парковка прикрепится к дороге. Если нужно переместить парковку, то это можно сделать, перетащив ее с помощью мыши.
  2. Перейдите в панель Свойства, и измените Тип парковки с параллельной на перпендикулярную. В итоге парковка должна выглядеть следующим образом:
  1. По умолчанию парковка создается с пятью парковочными местами. Количество парковочных мест можно изменить в свойствах элемента, но в нашем случае нам нужна парковка именно на пять машин.
  2. Если нужно, то длину парковочного места можно задать, изменив значение свойства Длина парковочного места. Ширина же определяется свойством Ширина полосы дорожной сети (которое влияет на все элементы этой сети: дороги, перекрестки, и т.д.). 

Теперь нужно добавить в нашу диаграмму процесса блоки, которые будут моделировать заезд автомобилей на парковку и пребывание там в течение определенного времени. Чтобы не перегружать диаграмму процесса множеством аналогичных блоков, мы промоделируем заезд на парковку только для части тех машин, которые движутся по улице Tapiolavagen с севера, и затем поворачивают на Menninkaisentie.

 Измените диаграмму процесса

  1. Мы хотим, чтобы теперь часть машин, едущих с севера и поворачивающих на Menninkaisentie, заезжала на парковку, расположенную на обочине этой дороги. Первым делом нужно удалить соединитель, ведущий из блока selectNE в блок carMoveToE, поскольку в этом месте диаграммы нам нужно будет произвести еще одно деление потока машин - часть машин поедет на парковку, в то время, как остальные - до конца дороги Menninkaisentie.
  2. Для того, чтобы произвести это деление потока машин, добавьте еще один блок Библиотеки моделирования процессов  SelectOutput. Назовите этот блок selectParking и соедините его порты с портами других блоков, как это показано на рисунке ниже.
  1. Мы хотим направлять на парковку только небольшую часть потока машин (скажем, 10 процентов), поэтому введите в поле Вероятность0.1.  Таким образом мы задаем долю автомобилей, направляемую блоком в свой верхний выходной порт.
  2. Добавьте еще один блок  CarMoveTo (в ветвь процесса, ведущую из верхнего порта блока selectParking, см. рисунок ниже). Назовите его carMoveToParking. Этот блок будет моделировать движение автомобилей к парковке. 
  1. В свойствах блока выберите Цель движения: парковка, и затем выберите в поле Парковка имя созданной нами ранее парковки: parkingLot
  2. Теперь нам нужно промоделировать, как приехавшие на парковку автомобили пребывают на ней в течение определенного времени. Для этого добавьте блок Библиотеки моделирования процессов  Delay. Назовите этот блок parking и соедините его так, как это показано на рисунке ниже.
  1. Данный блок моделирует задержку, связанную с выполнением агентом определенной операции (в нашем случае - ожидание на парковке). Откройте свойства этого блока. Измените Время задержки на triangular( 5, 15, 45 ) минут.
  2. Поскольку на парковке могут одновременно находиться до 5 машин, введите в поле Вместимость: 5. Этот параметр задает максимальное количество агентов (в нашем случае - автомобилей), которое может одновременно находиться в данном блоке.

Запустите модель. Вы увидите, как время от времени автомобили будут заезжать на парковку. Но попробуйте проиграть выполнение модели в режиме максимально возможной скорости, щелкнув по кнопке панели инструментов окна модели  Реальное/виртуальное время. Тогда вы, скорее всего, увидите сообщение об ошибке. Причина этого в том, что в какой-то момент автомобиль будет направлен на парковку, а свободных мест на ней не окажется.

Давайте учтем и этот случай, внеся минимальные изменения в нашу диаграмму процесса.  

 Измените диаграмму процесса

Как вы могли заметить, у блока CarMoveTo помимо двух стандартных портов на левой и на правой границе блока есть и еще один, помещенный на нижнюю границу значка. К нему ведет красная стрелочка. Этот порт называется outWayNotFound и представляет собой выходной порт, в который перенаправляются те автомобили, для которых не удалось построить маршрут к заданной в этом блоке цели движения.

  1. Соедините нижний выходной порт блока carMoveToParking с входным портом блока carMoveToE. В нашем случае автомобили будут направляться в этот порт, если на момент поступления автомобиля в блок carMoveToParking на парковке не окажется свободных мест. Таким образом, если парковка будет полностью занята, то автомобили будут просто продолжать движение дальше по дороге.

Запустите модель и убедитесь в том, что модель работает корректно, и ошибок больше не возникает.

Контрольная модель: Road Traffic Tutorial - Phase 4


          Фаза 3. Добавление перекрёстка

          Фаза 5. Добавление автобусов