<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>МОДЕЛИ И АЛГОРИТМЫ ОПТИМИЗАЦИИ МАРШРУТОВ В ТРАНСПОРТНОЙ СЕТИ ГОРОДА*</article-title>
      </title-group>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>Moscow Technological University (MIREA)</institution>
          ,
          <addr-line>Moscow</addr-line>
          ,
          <country country="RU">Russia</country>
        </aff>
      </contrib-group>
      <fpage>438</fpage>
      <lpage>453</lpage>
      <abstract>
        <p>В представленной работе описаны модели и алгоритмы поиска и оптимизации маршрутов в транспортной сети города, включая вопросы увеличения их производительности. В статье рассматриваются реальные, привязанные к картографическим данным характеристики и атрибуты маршрутов движения транспорта и пешеходов, что позволяет осуществить практическую реализацию поиска оптимальных маршрутов. На основе разработанных моделей и алгоритмов авторами было создано мобильное приложение под ОС Android, позволяющее реализовывать различные сценарии пользовательского поведения. Авторы работы описывают архитектуру разработанного приложения (базу данных, модули, программные интерфейсы и т.д.), его функциональные возможности и модули. Кроме того, в работе представлены результаты реального тестирования моделей, алгоритмов и созданного на их основе программного обеспечения.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Lesko S.A., Alyoshkin A.S., Titov V.V.</title>
      <p>позволяющих автоматически
стороны пользователей. В о
таких приложений лежат алгоритмы, которые осуществляют поискьноогпотимпуатли между двумя
пунктами. С целью обеспечения работы таких алгоритмов необходимо всю карту разделить на
вершин и взвешенных дуг, иными словами, преобразовать карту во взвешенный ориентированный
Существующие приложения Google.Maps, Ясн.Кдаеркты, Яндекс.Метро, Rusavtobus и другие позволяют
прокладывать кратчайший или оптимальный путь от одного пункта в другой, но имеют сущес
недостаток. Основная проблема, с которой приходится сталкиваться в подобных программных сред
— это отсусттвие возможности внесения пользователем индивидуальных данных, с которыми работа
алгоритм карты. Пользовательские данные могут состоять из новых остановок (места работы,
магазины, общественные места и т.д.) и путей до них. Небольшоеуючщиислхо прсуощгреасмтвмных
средств позволяет вносить пользователям изменения, но, зачастую, это представляет со
нетривиальный процесс, требующий наличия у пользователя сторонних приложений. Именно по
причине, на рынке могут быть востребованы програмдмстнвыае, ксортеорые бы позволяли изменять
карты в самих программных средствах, имея при этом доступ только к минимальному
информации о структуре данных, согласно которой организовано хранение данных о маршрутах;
сторонние приложени,я которые бы звполяли изменять маршруты в конечном визуальном
представлении.</p>
      <p>
        Проблема поиска оптимальных путей может быть решена с помощью разных алгори
актуальность которых зависит от области применения и типа графа [
        <xref ref-type="bibr" rid="ref1 ref1 ref2 ref2 ref6 ref6 ref7 ref7">1,2</xref>
        ]. Для этого мог
использованы модифиицрованные алгоритмы Дейкстры [
        <xref ref-type="bibr" rid="ref3 ref3 ref8 ref8">3</xref>
        ], алгоритмы поиска вBreшaиthр-иFнirуst (
Search, BFS) [
        <xref ref-type="bibr" rid="ref4 ref9">4</xref>
        ], а также разновидности алгоритма поиска Dвeptгhл-уFбirиsнtуsea(rch, DFS) [
        <xref ref-type="bibr" rid="ref10 ref5">5</xref>
        ]. Все
вышеперечисленные алгоритмы можно отнести к разряду алгоритмов поиска о крпауттчиайшмеегжу
парой вершинSin(gle source shortest path, SSSP).
      </p>
      <p>Модифицированный алгоритм Дейкстры предназначен не только для поиска кратчайшего п
между парой вершин, но и для поиска набора оптимальных путей между ними. Поиск оптималь
достигается посредством итерационного поиска кратчайшего пути между парой вершин п
последовательном удалении вершин или дуг, через которые прошел впервые построенный кратча
путь. Данный алгоритм обладает высокой скоростью работы, но не позволяет возпмроежденлыиеть все
оптимальные пути в графе. В связи с этим модифицированный алгоритм Дейкстры не даст
результатов, а только кратчайший путь и множество возможно оптимальных путей. По этой
модифицированный алгоритм Дейкстры выполняет не всю нпоусютавзлаедначу по поиску оптимальных
путей в графе, а лишь её часть, и таким образом в прямом виде не может быть использова
мобильных устройствах.</p>
      <p>Модифицированный алгоритм поиска в глубBиFнSу) п(озволяет найти все оптимальные
маршруты между удмвя вершинами, но требует ограничений, которые не позволят алгоритму уйт
бесконечный цикл. Для того что бы модифицирBоFвSанинсыкйал оптимальные маршруты, нужно
перестать учитывать уже посещенные вершины и опираться на другие ограничения при
оптимальных путей, напри м,нера глубину поиска, достижение -лкиабкоих лимитов и т.д. В связи с тем,
что оригинальный алгориBтFмS, тажке, как и его модификация, потребляют большое количество памяти,
поиск оптимальных путей может потребовать в большоможегтрафпеотрмебовать слишком много
ресурсов, что может привести к неправильной или долгой работе алгоритма, что также де
малопригодным для работы непосредственно на мобильных устройствах.</p>
      <p>
        Разновидности алгоритма поиска в глубину, а именно алгосркиатмыс опгорианичением в
глубину D(epth Limited Search, DLS) [
        <xref ref-type="bibr" rid="ref10 ref5">5</xref>
        ] и поиска в глубину с итеративным углубленDиeеeмpen(Iintegrative
Depth-First Search, IDDFS) [
        <xref ref-type="bibr" rid="ref10 ref5">5</xref>
        ], позволяют найти кратчайший путь между парой вершин опираясь
глубину поиска в графе. АлгDорLиSтимIDDFS можно эффективно использовать при работе с большими
графами, так как они могут быть ограничены по глубине поиска в DнLёSм.огрВаниачлегноиреитме
задаётся при запуске алгоритма и алгоритм отрабатывает единожды,IDDаFSаилщгоертитмкратчайший
путь постепенно увеличивая границу глубины, что, в некоторых случаях, позволяет найти кратч
путь быстрее чем с помоDщLSь.ю Для выполнения задачи поиска оптимальных путей в данн
алгоритмы, так , жкеак и в случае с модифицированным алгBоFрSи,тмуонжмно внести изменения.
Например, убрать ограничения на посещение уже посещенных вершин, но запретить посещать од
же вершину на одном пути более двух раз. Так же алгоритм должен продолжать свою работ
был найден кратчайший путь. АлгорDиLтSмиыIDDFS, в отличииBFоS,т требует гораздо меньше памяти
устройства и работает быстрее на больших и сложных графах.
      </p>
      <p>
        Для решения задачи создания мобильного приложения, позволяющего строить оптимальн
маршруты, наиболее подходит алгорDиLтSм, так какльзпоователь должен получить все оптимальные
маршруты в графе, опираясь на заданную им глубину поиска. Однако и он требует сущ
изменений для использования в работе мобильных приложений поиска не оптимального маршр
имеющего максимальное удобоствдля пользоватеЧляел.овеку свойственно выбирать маршруты исходя
Описание алгоритма поиска оптимальных маршрутов движения общественного транспорта
В результате исследновиая проблемы поиска оптимальных маршрутов был разработан алгоритм,
который основывается на базе алгоритма поиска в глубLиimнуited(DSeaprtchh, DLS) [
        <xref ref-type="bibr" rid="ref10 ref5">5</xref>
        ]. Результатами
работы алгоритма является набор оптимальных R п=ут{е{й1,  1}, … , {  ,   }}, содержащих пуLтьи
критерии его оптимальносCт.и
      </p>
      <p>Граф транспортной сети можно представить в виGде= (Vг,рEа,фOа):, где G – граф транспортной
сети, V = { 1, … ,   } – множество вершинi, E – множество дугi,j)( с длин о й ≥ 0, O – множество не
оптимизированных вершин{ 1, … ,   }.</p>
      <p>Для нахождения оптимального пути нужно отсортировать полученный в результате раб
алгоритма набор оптимальных путей по нужному критерию.</p>
      <p>В качестве критериев оптимальности маршрута предсттарвиленвыеличины:
• Время, затрачиваемое на маршTр;ут,
• Стоимость маршрут,аS;
• Количество пересадок на маршрNу.те,</p>
      <p>Один из минусов данного алгоритма является его длительное время выполнения, та
происходит поиск абсолютно всех возможных путей из атволчекниия отвпр точку прибытия. По этой
причине граф нужно оптимизировать, а алгоритм ограничить максимально возможным количест
пересадок. Так же нужно ввести условие, предотвращающее петли (циклы).</p>
      <p>Для работы алгоритма требуется:
• Вершины отправления и прибяыiт,(j), а так же максимальное количество пNерmaеxс. адок,
• Вершины i и j помечены как неоптимизируемыOе=, {i, j}.
• Набор оптимальных путRей.,
• Оптимизированный графG.
• Начальные критерии оптимальносCти= {0,0,0}.
• Последняя посещенная вершиdна=, i.</p>
      <p>Работа алгоритма состоит из следующих шагов:
1. Если d = j, сохранить результатLы,C} в{ R и завершить итерацию или алгоритм поиска.
2. Проверить каждую дугу, соединяющую верdшииbн,ы если таковых нет, перейти на шаг 10.
3. Если вершинbа уже была посещена на аэртошмрутме L, перейти к шагу 2.
4. Если количество пересадок максималNьн=оN,max, а вершиbнпаринадлежит отличному от типа или
маршрута точки прибытjи,яперейти к шагу 2.
5. Если вершина имеет связи с уже посещенными вершинами, перейти к шагу 2.
6. Если вершинbа имеет отрицательную задержку до следующего транспорта, перейти к шагу 2.
7. Дублировать путLь и критерии оптимальносCт,и добавить в Lп2унтьовую вершинbу.
8. Обновить значения критериев оптимальнCо2стви соответствии с новым пdу,bт)ёми ( вершинbо.й
9. Запустить новую итерациюd= bс.
10. Завершить итерацию или алгоритм поиска.</p>
      <p>После завершения алгоритма, его результаты сортируются в соответствии с нужным крите
и передаются для отображения пользователю (см. рис. 1).
Рисунок 1 – Результат работы алгоритма
На рисунках 2 и 3 показаны схема последовательности выполнения разработанного алгорит
приложения нужно прибегнуть к оптимизации графа, а именно сокращению количества , вершин и
которые подходят под критерии оптимизации.</p>
      <p>Оптимизация графа начинается с создания копии всего графа. Далее в етцсияклепровцыедпуорланя
оптимизации с условием, что оптимизация возможна.</p>
      <p>Критериями оптимизации, под которые попадают вершины, являются:
• существуют две вершиiниыj, для которых выполняется ус(л о, в)и∈е,  ;
• каждая из верш{иi,нj} должна иметь не более дгв;ух ду
• вершины {i,j} принадлежат одному маршруту;
• все связанные{i,jс} вершины должны принадлежать одному маршруту.</p>
      <p>При выполнении данных критериев вершины и соединяющие их дуги могут быть объединены
вершину, которая будет сочетать все показатемлаильноопсттии объединенных вершин, такие как время,
затраченное на их преодоление и их стоимость.</p>
      <p>Если для работы алгоритма требуется вершина, которая находится в объединенной вер
объединенная вершина разбивается на вершины и дуги, которые былинеёвклпюриченоыптивмизации.
После разбиения, нужная для работы алгоритм вершина помечается как не оптимизируемая и пр
новый цикл оптимизации.</p>
      <p>Процедура оптимизации состоит из нахождения пары вершин, которые соответствуют критер
оптимизации. Если павреаршин, удовлетворяющих критерия,мне была найдена, процедура оптимизации
считается завершенной.</p>
      <p>Рисунок 4 – Схема маршрутов до (левая часть рисунка) и после (правая часть рисунка) оптимизации графа
Если пара верш, уидновлетворяющих критерия,мбыла найдена, осуществляется процедура изменения
графа:
• Новая вершинiаn+1, которая обладает суммой критериев оптимальности {i1в,iе2}р,шиан так же дуги
(i1,i2).
• Вершина in+1 добавляется в грGа,ф а вершиiниыj удаляются из не го+,1 ∈  , { 1,  2} ∉  .
• Дуги, соединяющие смежные вершины с верш{i1и,iн2}а,мименяются на дуги, соединяющие смежные
вершины с вершинiоn+й1.</p>
      <p>Если алгоритму требуется вершина, которая была сокращена при
процедура её восстановления:
• В графеG производится поиск оптимизированной вершiи, нвы которую при оптимизации попала
искомая вершинjа.
• В графG добавляются все вершины и дуги, включенные в оптимизированнуiю. вершину
• Все дуги, соединяющие вершiиину смежные с ней вершины, меняются на тсет,вовчатлои сувще
графе G до оптимизации.</p>
      <p>оптимизации, выполняе
•
•
•
Из графGа исключается оптимизированная вершиiниа её дуги.
Вершина j помечается как неоптимизированн ая∈,  .</p>
      <p>Выполняется процедура оптимизации г.рафа
На рисунке 4 представлен результат оптимизации графа транестпио,ртнгодйе
оптимизации, справа– граф после оптимизации. Вершины, что попадают под
были соединены в одну, а их критерии оптимальности были объединены.
сле–ваграф
критерии
до
оптимизаци
Программная реализация моделей и алгоритмов оптимизации маршрутов движения в
транспортной сети</p>
      <p>Для мобильной операционной системы A(nОdСr)oid была создана программная реализация
приложения, осуществляющего оптимизацию маршрутов движения в транспортной сети, обладающ
необходимой компактностью и удобством использования.</p>
      <p>Сценарии использования
При проектировании программного средства были выделены два основных сценария использова
программы: поиск оптимальных маршрутов и изменение путей и остановок.</p>
      <p>Поиск оптимальных маршрутов. Пользователь должен выбрать остановки олтепнриаяв и прибытия и
запустить поиск оптимальных путей (см. рис. 5).</p>
      <p>Рисунок 5 – Поиск оптимальных маршрутов
Рисунок 6 – Изменение станции и её путей
Изменение остановки или пути осуществляется
Если пользоваетль желает изменить параметры, он
из экрана изменения станции, если пользователь
«Удалить» и подтвердить свой выбор.</p>
      <p>пользователем через меню выбранной остано
меняет их в соответствующих полях формы и</p>
      <p>хочет удалить остановку, он должен выбрат
Для изменения или удаления пути поеллььзовдатолжен выбрать нужную ст,ансциюкоторой
соединён этот путь, перейти на экран изменения остановки и выбрать её из списка смежн
остановкой путей. Если пользователь желает изменить параметры, он меняет их в соответств
полях формы и выхоидзит экрана изменения пути, если пользователь хочет удалить путь, он до
выбрать поле «Удалить» и подтвердить свой выбор.</p>
      <p>Сценарий использования операций создания, изменения и удаления остановки или пути привед
рисунке 6.</p>
      <p>Модули программного комплекса
Программный комплекс состоит из трёх модулей и базы данных (см. рис. 7).</p>
      <p>Рисунок 7 – Модули программного комплекса и БД
Модуль пользовательского интерфейса выполняет функции по отображению интерфейса
пользователю, а также обеспечивает интерактивннотсетрьфеийса и вызов методов с других модулей.
• MapActivity – работа Gсoogle Maps API и отслеживание пользовательских событий передаваемых
в MapListener.
• MapListener – обработка пользовательских событGиoйogle Maps API.
• SettingsActivity – настройка приложени.я
• StationListActivity – список остановок.
• MarkerEditActivity – операции с остановками.
• PathEditActivity – операции с путями.</p>
      <p>Модуль работы с данными транспорта обеспечивает сериализацию и десериализаци
пользовательских данных об общественном транспоритхе иизменение, обновление информации
содержащейся на карте, хранение и управление настройками программного комплекса.
• MapMarkerManager – нанесение и изменение объектов общественного транспорта из
пользовательских данных.
• GraphManager – сериализацию и десеарлизацию пользовательских данных об общественном
транспорте и их изменение.
• SettingsManager – хранение и предоставление настроек приложение.
Модуль вычисления оптимальных маршрутов предоставляет поиск в графе транспортной сет
уменьшает граф общественноогтранспорта за счёт складывания нескольких вершин в одну:
• ShortPathManager – поиск и предоставление оптимальных маршрутов графа транспортной сети.
• GraphOptimization – оптимизация графа транспортной сети.</p>
      <p>База данных хранит информацию о транспортной фосретмиате вJSON файла. База данных
обрабатывается посредством сериализации или десериализации пользовательских данных в моду
работы с данными транспорта.</p>
      <p>Работа программного комплекса
Инициализация программного комплекса заключается в зAаcпtуiсvкitеy карты Google Maps,
десериализации объекта пользовательских данных о графе транспортной сети, расстановке марке
остановок общественного транспорта и пеших маршрутов и централизации карты на ну
координатах (см. рис. 8).
Рисунок 8 – Инициализация программного комплекса
Процесс поиска оптимальных маршрутов задействует 4 подмодуля. ПMодaмpLоiдsуteлnьer
предоставляет графический интерфейс для выбора остановок прибытия и отбытия, а также з
поиска оптимальных маршрутов и отображения его результтаыто.вShoрrtаPбaоthManager производит
поиск оптимальных маршрутов из графа транспортноGйrapсhетMиanaвger (см. рис. 9).</p>
      <p>Рисунок 9 – Поиск оптимальных маршрутов
Процедура поиска оптимальных маршрутов заключается в переборе всех возможных маршрутов
вершины отправления в вершину прибытия и подсчёта критериев оптимальности каждого найденн
маршрута. Для нахождения оптимального маршрута нужно отсортировать результаты алгоритма
критериям оптимальности маршрута в том порядке, в котором нужно пользователю.</p>
      <p>Так же для работы алгоритма требуется ограничить возможные маршруты следующ
ограничениями:
• Повторное посещение уже посещенных на текущем маршруте вершин невозможно.
• Если текущая исследуемая вершина связана с уже посещенными на этом маршруте верш
кроме предыдущей, путь считается недействительным.
• Если количество пересадок превысило максимум, путь считается недействительным.
• Если количество пересадок максимально, а текущая вершина находится на маршруте отличн
маршрута вершины прибытия или прижниатдле другому виду транспорта, путь считается
недействительным.</p>
      <p>Запуск алгоритма поиска оптимальных путей:
• Создать массив для хранения результатов работы алгоритма.
• Восстановить вершины отправления и прибытия, которые могли быть оптимизированы.
• Создать массви хранения текущего пути и добавить в него вершину отправления.
• Создать массив хранения критериев оптимальности текущего маршрута.
• Запустить алгоритм.
• Отсортировать результаты работы алгоритма по времени маршрута.
• Вернуть результаты работы алгоритма.
public ArrayList&lt;ShortestPathObj&gt; FindShortestPaths() {
_algorithmResult = new ArrayList&lt;&gt;();
RecoverOptimizedNodes(algorithmReadyGraph, fromNodeId, toNodeId);
GraphNode _fromNode = GraphManGaegteInr.stance().Nodes.get(Settings.FromStationId);
_toNode = GraphManaGgert.Instance().Nodes.get(Settings.ToStationId);</p>
      <p>ArrayList&lt;Integer&gt; path = new ArrayList&lt;&gt;();
}
path.add(_fromNode.Id);
int[] weight = new int[] {0, 0, 0};
DepthSearch(path, weight, _fromNode, null, true);
Collections.sort(_algorithmResult);
return _algorithmResult;</p>
      <p>Алгоритм поиска оптимальных путей:
1. Если текущая вершин–аэто вершина прибытия, сохранить текущий маршрут и его критер
оптимальности и перейти к шагу 10.
2. Для каждого пути из текущей исследеурешмионйы. в Если путей больше нет, перейти к шагу 10.
3. Если путь уже содержит вершину из нового пути или количество пересадок больше ма
перейти на шаг 2.
4. Если количество пересадок максимально, а вершина из нового пути принадлежит типу или м
отличному от вершины прибытия, перейти на шаг 2.
5. Если вершина из нового пути содержит дуги в уже посещенные вершины, перейти на шаг
6. Если сегодняшний поезд уже ушел, перейти на шаг 2, иначе на шаг 7.
7. Если вершина из нового пути является оптимизированинроойв,атьскомпаршрут и добавить в него
все вершины что были включены в неё при оптимизации, иначе добавить только вершину
пути.
8. Скопировать критерии оптимальности и добавить в них критерии оптимальности нового пути
вершины.
9. Запустить новую итцериаю поиска оптимальных маршрутов с новым маршрутом и его критери
оптимальности.
10. Завершить итерацию.
private void DepthSearch(ArrayList&lt;Integer&gt; path, int[] weight, GraphNode lastNode,</p>
      <p>GraphPath lastPath, boolean addDelay) {
boolean addDelayCopy = false;</p>
      <p>
        ShortestPathObj result = new ShortestPathObj(path, weight);
_algorithmResult.add(result);
return;
for(GraphPath gPath: lastNode.Paths) {
if (apth.contains(gPath.ToNode.Id) || weight[
        <xref ref-type="bibr" rid="ref1 ref1 ref6 ref6">1</xref>
        ] &gt; SeStetainrcghsD.epth)
      </p>
      <p>
        continue;
if (weight[
        <xref ref-type="bibr" rid="ref1 ref1 ref6 ref6">1</xref>
        ] == SetStienagrsc.hDepth &amp;&amp;
(gPath.ToNode.Type != _toNode.Type ||
gPath.ToNode.RouteId != _toNode.RouteId))
      </p>
      <p>continue;
if (ContainsTransferToVisitedNode(lastNode, path))</p>
      <p>continue;
if (gPath.Delay &lt; 0)</p>
      <p>continue;
ArrayList newPath = new ArrayList&lt;&gt;(path);
if (gPath.ToNode.OptimizedNodes.size() &gt; 0)</p>
      <p>newPath.addAll(gPath.ToNode.OptimizedNodes);
else</p>
      <p>
        newPath.add(gPath.ToNode.Id);
int[] newWeight = new int[]{weight[0], weight[
        <xref ref-type="bibr" rid="ref1 ref1 ref6 ref6">1</xref>
        ], weight[
        <xref ref-type="bibr" rid="ref2 ref2 ref7 ref7">2</xref>
        ]};
newWeight[0] += gPath.Time + ((addDelay) ? gPath.Delay : 0);
if (gPath.IsTransfer) {
addDelayCopy = true;
newWeight[
        <xref ref-type="bibr" rid="ref1 ref1 ref6 ref6">1</xref>
        ]++;
newWeight[
        <xref ref-type="bibr" rid="ref2 ref2 ref7 ref7">2</xref>
        ] += gPath.Cost;
}
DepthSearch(newPath, newWeight, gPath.ToNode, gPath, addDelayCopy);
Для увеличения производительности недоибмхо осуществить процедуру оптимизации графа.
Процедура оптимизации графа заключается в последовательной замене всех вершин и дуг графа,
подходят под критерии оптимизации, на оптимизированные вершины. Это позволяет значител
сократить количестввоершин и дуг графа, особенно если граф имеет мало пересечений между вет
В качестве критериев для оптимизации двух вершин используются следующие утверждения:
• Существуют две вершинNыo,de1 и Node2 которые соединены дугPоaйth.
• Каждая вершинNаoden не дложна иметь более двухPatдh.уг
• Обе вершиныNode1 и Node2 на дугPеath принадлежат одному маршруRтoуute.
• Все смежныеNoсde1 и Node2 вершины должны принадлежать одному пути.
private boolean CheckCriteria(GraphPath path) {
// Принадлежат ли вершины Node1 и Node2 одному маршруту
if (path.FromNode.RouteId == path.ToNode.RouteId)
{
      </p>
      <p>// Имеет ли вершиNнoаde1 и Node2 бульше двух дуг?
if (path.FromNode.Paths.size() 2 |&gt;| path.ToNode.Paths.size() 2)&gt;</p>
      <p>return false;
// Принадлежат ли все вершины нPаathпуотдиному маршруту?
int routeId = path.ToNode.RouteId;
for (GraphPath nPath: path.ToNode.Paths)
if (nPath.ToNode.RouteId != routeId)</p>
      <p>return false;
for (GraphPath nPathat:h.FpromNode.Paths)
if (nPath.ToNode.RouteId != routeId)</p>
      <p>return false;
return true;
из вершины
private boolean OptimizeCycle(int maxId) {
for (GraphNode node: OptimizedNodes.values())
{
if (!node.OIsptimizable)</p>
      <p>continue;
for (GraphPath path: node.Paths) {
if (CheckCriteria(path))
{
// Создание новои вершины
// Изменение смежных с оптимизированными вершинами дуг
// Подсче т новых критериев оптимальности вершины
// Исключение оптимизированных вершин и дуг из графа
// Включение новои вершины и дуг в граф
return true;
public boolean ContainsTransferToVisitedNode(GraphNode gNode, ArrayList&lt;Integer&gt; path) {
if (path.size() &gt; 2)
for (GraphPath gPath: gNode.Paths) {
if (gPath.ToNode.Id != path.get(path.s-2iz)e)()
if(path.contains(gPath.ToNode.Id))</p>
      <p>return true;
Структура хранения данных о пешеходных маршрутах и маршрутах движения транспорта
Вершины графа можно подразделить на два вида: пешие и остановки общественного транспор
вида несут в себе информацию о местоположении вершины, её названии. Так же вершины
общественного транспорта имеют задержку, которая определяет время, затрачиваемое на посадк
высадку пассажиров и принадлежность к маршруту. Структура хпроанзвиотльяетинформацию о двух
видах общественного транспорта, с расписанием и без него, а также пеших маршрутах.</p>
      <p>Дуги графа можно разделить на три вида: дуги на одном , мпаерршерсеуктаею,щидеусгяи с
маршрутами одного вида транс,паорти д,упгиересекающиеся мсаршрутами разного вида транспорта.
Данное разбиение связано с тем, что помимо прямого следования по одному маршруту сущ
пересадки, которые имеют свой вес и денежную стоимость.</p>
      <p>Дуги на одном маршруте общественного транспорта содержат ссылпкоузицниаю сввоюрасписании
для дальнейшего определения кратчайшего, запвуитсиящего от него.</p>
      <p>Структура хранения общественного транспорта без расписания содержит информацию о пу
станциях и переходах между ними:
1) Маршруты.</p>
      <p>а) Название маршрута.
б) Цвет маршрута.</p>
      <p>в) Задержка между транспортом в зависимости от времени суток.
2) Остановки.</p>
      <p>а) Название остановки.
б) Принадлежность остановки к маршруту.</p>
      <p>в) Векторный объект точка с геоинформационными координатами.
3) Пути.</p>
      <p>а) Векторный объект полилиния с двумя геоинформационными коордвиянзаатнанмыих сстанций.
б) Время, затрачиваемое на преодоление пути.</p>
      <p>в) Цена пути.</p>
      <p>Структура данных о движении общественного транспорта без расписания изображена в графиче
виде на рисунке 10.</p>
      <p>Рисунок 10 – Структура движения общественного транспорта без расписания
Структура хранения общественного транспорта с расписанием содержит информацию о маршрут
остановках:
1) Маршруты.</p>
      <p>а) Название маршрута.
2) Календарь.</p>
      <p>а) Дни недели, по которым работает маршрут.</p>
      <p>б) Начальная и конечная даты функционирования маршрута.
3) Поездки.</p>
      <p>а) Маршрут, к которому принадлежит поездка.</p>
      <p>б) Расписание дней недели, по которому работает поездка.
4) Станции.</p>
      <p>а) Название станции.</p>
      <p>б) Векторный объект точка с геоинформационными координатами.
5) Время остановок.</p>
      <p>а) Остановка, к которой принадлежит время остановки.
б) Поездка, к котоойр принадлежит время остановки.
в) Порядковый номер станции в маршруте.</p>
      <p>г) Время прибытия и отбытия со станции.</p>
      <p>Структура данных о движении общественного транспорта с расписанием изображена в графиче
виде на рисунке 11.</p>
      <p>Рисунок 11 – Структура движения общественного транспорта с расписанием</p>
      <p>Рисунок 12 – Структура хранения данных пеших маршрутов
Структура хранения пеших маршрутов содержит информацию о пеших остановках и связях
ними:
1) Пешие остановки.</p>
      <p>а) Название остановки.</p>
      <p>б) Векторный объект точка с фгоеромианционными координатами.
2) Связи между пешими остановками.</p>
      <p>а) Названия пути.
б) Время, затрачиваемое на преодоление пути.</p>
      <p>в) Векторный объект полилиния с двумя геоинформационными координатами связанных станц
Структура данных пеших маршрутов изображена чвескгормафивиде на рисунке 12.</p>
      <p>Структура хранения пересадок содержит информацию о пересадках между разным видом трансп
1) Пересадка.</p>
      <p>а) Затрачиваемое на пересадку время.</p>
      <p>б) Векторный объект полилиния с двумя геоинформационными координатами связанных станц
Структура данных пересадок изображена в графическом виде на рисунке 13.</p>
      <p>Рисунок 13 – Структура пересадок
Заключение
1. Разработаны усовершенствованные модели и алгоритмы поиска и оптимизации маршрутов в
транспортной сети города и решены некоторые вопроесныияувиелхичпроизводительности.
2. На основе разработанных моделей и алгоритмов создано мобильное приложение под
Android, позволяющее реализовывать различные сценарии пользовательского поведения.
Описана архитектура разработанного приложения (база даннгрыахм, мнпырое интерфейсы и
т.д.), его функциональные возможности и модули.
3. Результаты тестирования моделей, алгоритмов и созданного на их основе программного
обеспечения показывают, что они являются более оптимальными и быстродействующими по
сравнению с сущвеусютщими.
ОС
Благодарности</p>
      <p>Работа выполнена при финансовой поддержке Российского фонда фундаментальных исследован
(РФФИ), грант № -371-060373 мол_а,«Разработка перколяционных и стохастических моделей
балансировки потоков и управления высоконагруженнымсипорттрнаынми сетям»и.</p>
      <sec id="sec-1-1">
        <title>Acknowledge</title>
        <p>The work was supported by the Russian Foundation for Basic Research (RFBR), Grant No. 16-37-00373 mole_a,
"Development of percolation and stochastic models of flow balancing and management of highly loaded transport
networks".</p>
      </sec>
    </sec>
    <sec id="sec-2">
      <title>References</title>
      <p>Об авторах:
Алёшкин Антон Сергеевич кандидат технических наук, доцент, доцент кафедры автоматизированных
систем управления института комплексной безопасности и специального прибо,ростроения
Московский технологичексий университе(тМИРЭА), antony@testor.ru
Лесько Сергей Александрович кандидат технических наук, доцент, доцент кафедры моделирования и
управления систем института комплексной безопасности и специального прниибяо,рострое
Московский технологический университ(еМтИРЭА), sergey@testor.ru
Титов Вячеслав Витальевич студент кафедры моделирования и управления систем института
комплексной безопасности и специального приборост р,оМеноискяовский технологический
университет (МИРЭА), titov@testor.ru</p>
      <sec id="sec-2-1">
        <title>Note on the authors:</title>
        <p>Alyoshkin Anton S., Candidate of Technical Sciences, Associate Professor of the Department of Automated Control
Systems, the Institute of Complex Security and Special Instrumentation, Moscow Technological
University (MIREA), antony@testor.ru
Lesko Sergey A., Candidate of Technical Sciences, Associate Professor of Department of Modeling and Control
Systems, Institute of Complex Security and Special Instrumentation, Moscow Technological University
(MIREA), sergey@testor.ru
Titov Vyacheslav V., the student of the Department of Modeling and Control Systems of the Institute of
Comprehensive Security and Special Instrumentation, Moscow Technological University (MIREA),
titov@testor.ru</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Liu</surname>
            <given-names>L.</given-names>
          </string-name>
          , (
          <year>2011</year>
          ),
          <article-title>"Data Model and Algorithms for Multimodal Route Planningwith Transportation Networks"</article-title>
          , Technische U München, pp.-
          <volume>139</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Cargal</surname>
            <given-names>J. M.</given-names>
          </string-name>
          , (
          <year>1988</year>
          ),
          <article-title>"Discrete Mathematics for Neophytes: Number Theory</article-title>
          , Probability, Algorithms, and Other Stuff”, chapter 9.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Dijkstra's Shortest</surname>
          </string-name>
          Path Algorithm [Электронный ресурс]. - https://brilliant.org/wiki/dijkstras-short
          <string-name>
            <surname>-</surname>
          </string-name>
          path-finder/ - (дата обращения :
          <volume>14</volume>
          .
          <fpage>04</fpage>
          .
          <year>2017</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Depth-First</surname>
          </string-name>
          and
          <article-title>Breadth-First Search [Электронный ресур-с]</article-title>
          .https://jeremykun.com/
          <year>2013</year>
          /01/22/depth-and
          <string-name>
            <surname>-</surname>
          </string-name>
          breadth-firstsearch/ - (дата обращения :
          <volume>20</volume>
          .
          <fpage>04</fpage>
          .
          <year>2017</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <article-title>Алгоритмы на графах: Поиск в глубину (DFS, DLS</article-title>
          , IDDFS) [
          <article-title>Электронны-й httрpе</article-title>
          :с/у/рhсa]r.uatari.com/ru/blog/17/algorithms-on
          <article-title>-graphs-deep-first-search-dfs-dls-iddfs -</article-title>
          (
          <source>дата боращения : 23.05</source>
          .
          <year>2017</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          1.
          <string-name>
            <surname>Liu</surname>
            <given-names>L.</given-names>
          </string-name>
          , (
          <year>2011</year>
          ),
          <article-title>"Data Model and Algorithms for Multimodal Route Planningwith Transportation Networks"</article-title>
          , Technische U München, pp.-
          <volume>139</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          2.
          <string-name>
            <surname>Cargal</surname>
            <given-names>J. M.</given-names>
          </string-name>
          , (
          <year>1988</year>
          ),
          <article-title>"Discrete Mathematics for Neophytes: Number Theory</article-title>
          , Probability, Algorithms, and Other Stuff”, chapter 9.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          3.
          <string-name>
            <surname>Dijkstra's Shortest</surname>
          </string-name>
          Path Algorithm [Электронный ресурс]. - https://brilliant.org/wiki/dijkstras-short
          <string-name>
            <surname>-</surname>
          </string-name>
          path-finder/ - (дата обращения :
          <volume>14</volume>
          .
          <fpage>04</fpage>
          .
          <year>2017</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          4.
          <string-name>
            <surname>Depth-First</surname>
          </string-name>
          and
          <article-title>Breadth-First Search [Электронный рес</article-title>
          .у-рсh]ttps://jeremykun.com/
          <year>2013</year>
          /01/22/depth-and
          <string-name>
            <surname>-</surname>
          </string-name>
          breadth-firstsearch/ - (дата обращения :
          <volume>20</volume>
          .
          <fpage>04</fpage>
          .
          <year>2017</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          5.
          <article-title>Algoritmy na grafah. Poisk v glubiny (DFS, DLS</article-title>
          , IDDFS) [Electronic resource]. - http://haru-atari.com/ru/blog/17/algorithms-ongraphs
          <article-title>-deep-first-search-dfs-dls-iddfs -</article-title>
          (
          <source>дата обращения: 23.05</source>
          .
          <year>2017</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>