5 Обощенная схема моделирующего алгоритма
Обобщенная схема моделирующего алгоритма проведения одной имитации приведена на рисунке 3. При разработке схемы моделирующего алгоритма использован «принцип ∆t». Шаг моделирования∆t равен 1 секунде.
Рисунок 3 – Обобщенная схема моделирующего алгоритма проведения одной имитации
Обобщенная схема проведения k имитаций приведена на рисунке 4.
Рисунок 4 – Обобщенная схема проведения k имитаций
Детальная схема моделирующего алгоритма проведения одной имитации приведена в приложении 1. В приложении 1 также приведена детальная схема моделирующего алгоритма проведения k имитаций.
6 Особенности программирования
6.1 Среда разработка
Разработанный моделирующий алгоритм можно реализовать с помощью разных языков программирования, например, C++, Pascal, Delphi, MathCad.
Средой разработки для решения поставленной задачи был выбран пакет MathCad 2001 Pro от компании MathSoft Inc. Выбор данного пакета основан на большом количестве его достоинств, среди которых можно отметить следующие:
все вычисления ведутся в традиционных математических нотациях;
имеет большое количество встроенных функций;
все расчеты проводятся в режиме реального времени и не требуют от пользователя никаких дополнительных команд.
Реализацией разработанного моделирующего алгоритма проведения одной имитации является написанная в среде MathCad функция One_Imitation, которая моделирует процесс регулирования движения машин на перекрестке в течение получаса. Результатом вызова данной функции являются:
количество машин, проследовавших в направлении улицы A;
количество машин, проследовавших в направлении улицы B;
количество машин, проследовавших в направлении улицы C;
количество машин, проследовавших в направлении улицы D;
средняя длина очереди машин, движущихся по направлению A-D;
средняя длина очереди машин, движущихся по направлению A-C;
средняя длина очереди машин, движущихся по направлению A-B;
средняя длина очереди машин, движущихся по направлению C-A;
средняя длина очереди машин, движущихся по направлению C-B;
максимальная длина очереди машин, движущихся по направлению A-D;
максимальная длина очереди машин, движущихся по направлению A-C;
максимальная длина очереди машин, движущихся по направлению A-B;
максимальная длина очереди машин, движущихся по направлению C-A;
максимальная длина очереди машин, движущихся по направлению C-B.
Реализацией разработанного моделирующего алгоритма проведения k имитаций является написанная в среде MathCad функция IMITATION, которая моделирует процесс регулирования движения машин на перекрестке в течение получаса k раз. Результатом вызова данной функции являются осредненные значения вышеуказанных величин.
Листинг функций One_ImitationиIMITATIONприведен в приложении 2.
6.2 Переменные имитационной модели
При написании функций One_ImitationиIMITATIONбыли приняты следующие переменные:
time_A |
— |
момент времени появления машины со стороны улицы A; | |
time_C |
— |
момент времени появления машины со стороны улицы C; | |
time_off |
— |
момент переключения светофора на сигнал, запрещающий движение; | |
probability |
— |
переменная, служащая для вычисления вероятности движения автомобиля в определенном направлении; | |
buf_A_D |
— |
количество машин, движущихся со стороны улицы A в направлении улицы D; | |
buf_A_C |
— |
количество машин, движущихся со стороны улицы A в направлении улицы C; | |
buf_A_B |
— |
количество машин, движущихся со стороны улицы A в направлении улицы B; | |
buf_C_A |
— |
количество машин, движущихся со стороны улицы C в направлении улицы A; | |
buf_C_B |
— |
количество машин, движущихся со стороны улицы C в направлении улицы B; | |
car_A_D |
— |
состояние полосы движения A-D: | |
|
|
|
- 1 – полоса свободна, 0 – движение по полосе завершается, 1 – движение по полосе будет завершено через 1 секунду; |
car_A_C |
— |
состояние полосы движения A-C: | |
|
|
|
- 1 – полоса свободна, 0 – движение по полосе завершается, 1 – движение по полосе будет завершено через 1 секунду; |
car_A_B |
— |
состояние полосы движения A-B: | |
|
|
|
- 1 – полоса свободна, 0 – движение по полосе завершается, 1 – движение по полосе будет завершено через 1 секунду; |
car_C_A |
— |
состояние полосы движения C-A: | |
|
|
|
- 1 – полоса свободна, 0 – движение по полосе завершается, 1 – движение по полосе будет завершено через 1 секунду; |
car_C_B |
— |
состояние полосы движения C-B: | |
|
|
|
- 1 – полоса свободна, 0 – движение по полосе завершается, 1 – движение по полосе будет завершено через 1 секунду; |
time_on |
— |
момент переключения светофора на сигнал, разрешающий движение; | |
count_A |
— |
количество машин, преодолевших перекресток в сторону улицы A; | |
count_B |
— |
количество машин, преодолевших перекресток в сторону улицы B; | |
count_C |
— |
количество машин, преодолевших перекресток в сторону улицы C; | |
count_D |
— |
количество машин, преодолевших перекресток в сторону улицы D; | |
sred_A_D |
— |
средняя длина очереди машин, движущихся по направлению A-D; | |
sred_A_C |
— |
средняя длина очереди машин, движущихся по направлению A-C; | |
sred_A_B |
— |
средняя длина очереди машин, движущихся по направлению A-B; | |
sred_C_A |
— |
средняя длина очереди машин, движущихся по направлению C-A; | |
sred_C_B |
— |
средняя длина очереди машин, движущихся по направлению C-B; | |
count_switch |
— |
количество переключений светофора с запрещающего на разрешающий сигнал; | |
max_A_D |
— |
максимальная длина очереди машин, движущихся по направлению A-D; | |
max_A_C |
— |
максимальная длина очереди машин, движущихся по направлению A-C; | |
max_A_B |
— |
максимальная длина очереди машин, движущихся по направлению A-B; | |
max_C_A |
— |
максимальная длина очереди машин, движущихся по направлению C-A; | |
max_C_B |
— |
максимальная длина очереди машин, движущихся по направлению C-B; | |
time |
— |
текущее время моделирования; | |
k |
— |
количество проводимых имитаций; | |
COUNT_A |
— |
количество машин, проследовавших в сторону улицы A, полученное в результате проведения k имитаций; | |
COUNT_B |
— |
количество машин, проследовавших в сторону улицы B, полученное в результате проведения k имитаций; | |
COUNT_C |
— |
количество машин, проследовавших в сторону улицы C, полученное в результате проведения k имитаций; | |
COUNT_D |
— |
количество машин, проследовавших в сторону улицы D, полученное в результате проведения k имитаций; | |
SRED_A_D |
— |
средняя длина очереди машин, движущихся по направлению A-D, полученная в результате проведения k имитаций; | |
SRED_A_C |
— |
средняя длина очереди машин, движущихся по направлению A-C, полученная в результате проведения k имитаций; | |
SRED_A_B |
— |
средняя длина очереди машин, движущихся по направлению A-B, полученная в результате проведения k имитаций; | |
SRED_C_A |
— |
средняя длина очереди машин, движущихся по направлению C-A, полученная в результате проведения k имитаций; | |
SRED_C_B |
— |
средняя длина очереди машин, движущихся по направлению C-B, полученная в результате проведения k имитаций; | |
MAX_A_D |
— |
максимальная длина очереди машин, движущихся по направлению A-D, полученная в результате проведения k имитаций; | |
MAX_A_C |
— |
максимальная длина очереди машин, движущихся по направлению A-C, полученная в результате проведения k имитаций; | |
MAX_A_B |
— |
максимальная длина очереди машин, движущихся по направлению A-B, полученная в результате проведения k имитаций; | |
MAX_C_A |
— |
максимальная длина очереди машин, движущихся по направлению C-A, полученная в результате проведения k имитаций; | |
MAX_C_B |
— |
максимальная длина очереди машин, движущихся по направлению C-B, полученная в результате проведения k имитаций; | |
i |
— |
переменная, служащая для организации цикла; | |
Res_Of_One_Imitation |
— |
переменная, служащая для сохранения результатов моделирования процесса регулирования движения машин на перекрестке в течение получаса. |
Входными параметрами для функции One_Imitationявляются переменные time_A, time_C, time_off, а выходными – переменные count_A, count_B, count_C, count_D, max_A_D, max_A_C, max_A_B, max_C_A, max_C_B, а также значения средних длин очередей для каждого направления. ФункцияIMITATIONне имеет в явном виде входных параметров, однако, количество проводимых имитаций k задается в теле функции. Выходными параметрами функции IMITATION являются переменные COUNT_A, COUNT_B, COUNT_C, COUNT_D, SRED_A_D, SRED_A_C, SRED_A_B, SRED_C_A, SRED_C_B, MAX_A_D, MAX_A_C, MAX_A_B, MAX_C_A, MAX_C_B.