Сложные светофорные алгоритмы

OpenTTD - современная игра, клон Transport Tycoon Deluxe с открытым исходным кодом, написанный на C и С++. Содержит ряд ключевых улучшений и возможность игры по сети. На данный момент это главное направление развития игры.

Модераторы: eraserkry, Mihamster, Smoky555, Группа модераторов

Сложные светофорные алгоритмы

Сообщение qwe2851 » Пт мар 01, 2013 17:33

Доброго времени суток уважаемые творцы!
Возникла проблемка которую никак не может решить мой моск :( прошу помощи ибо я в ступоре...

Ситуация: я в будущем, есть завод выпускающий очень много продукции и станция на 4 платформы, на маршруте летают "Химеры", они жутко быстрые но пока разгонятся между ними возникают огромные интервалы. В поиске решения наткнулся на тригеры (дозированый выпуск поездов со станции), решение интересное но неэстетичное(поезд пытающийся догнать свой хвост напоминает сбрендившего песика :) ), объемное по прощади и если их начать применять раньше чем в будущем (когда еще появляются новые поезда с новыми характеристиками) то их муторно перенастраивать.
В результате создал схему: 4платформы - 2отездных/разгоночних пути - на каждом точка начала движения - если по одному пути поезд прошел точку начала движения то на другом пути точка начала движения блокируется пока поезд с первого пути чуть-чуть уйдет вперед (чуть-чуть достаточно чтобы на слиянии разгоночных путей поезда не мешали друг другу).
Изображение
ИзображениеИзображение
И всё замечательно работает как задумывась, как тригер, занимает очень мало места, нет вспомогательных собак-поездов, но.... но.... но.... мой моск подумал: а что будет когда станция будет на 8 платформ... казалось бы добавил путей как сейчас и будь здоров, но первые прикидки по растановке семафором очень растроили....
Два разгоночных пути работают как часики ибо если по пути 1 "стартует" поезд то путь 2 блокируется. Когда добавляем третий путь: если по одному из путей стартует поезд то остальные должны блокироваться

Суть проблемы в том что как не извращался мне не удалось сделать "входной светофор" красным если ХОТЯ БЫ ОДИН из "выходных" красный (названия входной и выходной условны).
Прошу Вашей помощи как это сделать? Возможно ли это впринципе? Потому что если нет прийдется городить немеряно путей обратной связи и это будет еще хуже чем тригер...
qwe2851
Шпалоукладчик
Шпалоукладчик
 
Сообщения: 5
Зарегистрирован: Вт дек 25, 2012 21:05

Re: Сложные светофорные алгоритмы

Сообщение qwe2851 » Пт мар 01, 2013 18:24

Тут в пямяти всплыло понятие программируемые сигналы,(где-то на форуме встречалось), если кто знает подскажите помогут ли они в моем случае, и если да - в какой сборке их можна найти?
Заранее спасибо за ответы!
qwe2851
Шпалоукладчик
Шпалоукладчик
 
Сообщения: 5
Зарегистрирован: Вт дек 25, 2012 21:05

Re: Сложные светофорные алгоритмы

Сообщение qwe2851 » Пт мар 01, 2013 22:02

И еще вопросик. Где можно почитать про алгоритм поиска пути yapf?
Есть интересный момент уже на двух больших станциях: много платформ, на станцию по обычной двопутке залетают маглевы-химеры, с одной стороны вход, с другой выход, вход немного заранее разделяется на три подъездных пути, каждый из который идет на несколько платформ. На двухпутке перед разделением на три путя стоит маршрутный светофор, больше до станции нет светофоров, тоесть съезжая с магистрали на подъездной путь поезд уже выбирает себе платформу. интересный момент состоит в том что когда два подъездных пути к более близким платформам заняти, а третий свободен поезда его не хотят выбирать а ждут когда освободится один из первых двух, причем это не всегда происходит, иногда поезда таки заходят на третий подъездной путь к дальним платформам. Отследить причины такого поведения пока не удалось...
Схема станции:

Изображение

PS: подскажите куда лучше заливать скрины
qwe2851
Шпалоукладчик
Шпалоукладчик
 
Сообщения: 5
Зарегистрирован: Вт дек 25, 2012 21:05

Re: Сложные светофорные алгоритмы

Сообщение Lewapard » Сб мар 02, 2013 12:14

qwe2851 писал(а): а что будет когда станция будет на 8 платформ...

А если не извращаться, ничего кардинального не изменится. На каждый из двух разгонных путей будет подаваться не 2, а 4 поезда. Если у тебя по 2 пути для движения в одном направлении, то задача сводится к двум независимым станциям по 4 платформы.
Все равно 4 отъездных пути не будут работать эффективнее двух.
qwe2851 писал(а):На двухпутке перед разделением на три путя стоит маршрутный светофор, больше до станции нет светофоров, тоесть съезжая с магистрали на подъездной путь поезд уже выбирает себе платформу.

Вот это зря сделано: поезд, подъезжая к сигналу, рассчитывает, что ему по времени быстрее подождать, пока проедет предыдущий поезд, чем заехать на станцию по третьему пути. Если хочешь использовать всю станцию, придется тебе заводить сигнализацию через входной-промежуточные-выходные светофоры.
Промежуточные ставятся на всех разветвлениях пути.
И еще: замени маршрутные светофоры на обычные там, где нет развилок.
Lewapard
Шпалоукладчик
Шпалоукладчик
 
Сообщения: 21
Зарегистрирован: Ср дек 14, 2011 14:09

Re: Сложные светофорные алгоритмы

Сообщение qwe2851 » Сб мар 02, 2013 12:49

Lewapard, спасибо за идеи!

Lewapard писал(а):Если хочешь использовать всю станцию, придется тебе заводить сигнализацию через входной-промежуточные-выходные светофоры.
Промежуточные ставятся на всех разветвлениях пути.
И еще: замени маршрутные светофоры на обычные там, где нет развилок.

Понял. Сейчас буду менять.

Lewapard писал(а):Все равно 4 отъездных пути не будут работать эффективнее двух.

Почему не будут? Мне казалось наоборот. На 2-м, 3-м скринах из первого поста выдно что поезду для "отрыва от следующего" в момент старта нужна совсем небольшая фора. Когда два одновременно подходят к точке старта, стартует первый, вслед второй, а потом остается солидная пауза пока следующая пара потихоньку подтянется к точке старта. Визуально наблюдая этот процес очень хочется заполнить эту паузу составами еще с двух разгоночных путей.
qwe2851
Шпалоукладчик
Шпалоукладчик
 
Сообщения: 5
Зарегистрирован: Вт дек 25, 2012 21:05

Re: Сложные светофорные алгоритмы

Сообщение Lewapard » Вс мар 03, 2013 12:00

qwe2851 писал(а):
Lewapard писал(а):Все равно 4 отъездных пути не будут работать эффективнее двух.

Почему не будут? Мне казалось наоборот. На 2-м, 3-м скринах из первого поста выдно что поезду для "отрыва от следующего" в момент старта нужна совсем небольшая фора. Когда два одновременно подходят к точке старта, стартует первый, вслед второй, а потом остается солидная пауза пока следующая пара потихоньку подтянется к точке старта. Визуально наблюдая этот процес очень хочется заполнить эту паузу составами еще с двух разгоночных путей.

Во-первых, для эффективной работы 4-х путного выезда на 8-миплатформенной станции необходимо равномерное распределение поездов по платформам, чтобы не получалось ситуаций, когда 2 поезда одновременно отъезжают на одном выезде. Во-вторых, для обслуживания траффика станции на 8 платформ одноколейной магистрали, явно, будет мало. У тебя и 4 платформы обслуживает 2-хколейный подъезд. Имхо, в таком случае будет лучше продумать пристанционную развязку так, чтобы поезда со всех платформ могли уйти на все отъездные пути: у тебя на первом скрине как раз такая ситуация показана.
Lewapard
Шпалоукладчик
Шпалоукладчик
 
Сообщения: 21
Зарегистрирован: Ср дек 14, 2011 14:09

Re: Сложные светофорные алгоритмы

Сообщение Странник » Пн мар 04, 2013 00:52

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

Хочу сказать сразу. Расстояние, в 8 – 9 клеток которое встречается в тексте, оно может меняться и зависит от максимальной длины состава используемого в игре. Расстояние выставляется таким образом, чтобы концевой вагон поезда, который уже покинул платформу и остановился перед следующим сигналом, скажем комбинированным, находился на клетке, следующей за клеткой с выходным сигналом. В противном случае, если расстояние будет меньше чем длина состава, входной сигнал на свободную платформу будет закрыт. Если же поставить хотя бы один не тот сигнал, то схемы использования входных \ выходных \ комбинированных \ маршрутных сигналов сразу начинает работать не правильно. Так что приходиться ставить сигналы без ошибок. Должен заметить так же что соотношение входных \ выходных платформ на станции может быть четным, а может и не четным.

Для начала приведу отдельный пример для двух путевой станции, стоящей на двух путной ветки. Она изображена на рисунке А1. На нем красной стрелкой обозначен входной путь, а синей стрелкой выходной путь. Для начала разберем входной путь. Перед станцией на расстоянии 8 – 9 клеток стоит маршрутный сигнал. На соседнем пути ведущим в обратном направлении мы ставим комбинированный сигнал. Перед въездом на платформу мы ставим комбинированный сигнал. Комбинированные сигналы мы ставим перед выездом \ въездом на платформы станции в обеих направлениях. При такой схеме построения сигналов, поезд стоящий на станции не будет закрывать вход на платформу станции в противоположном направлении.

Рисунок А1
Изображение

Итак, первый пример, изображен на рисунке А2. Ветка двух путевая. На ней есть 4-х путевая станция (если станция двух путевая, то входные \ выходные сигналы не будут работать). Условно, разделим пути: Два подряд туда (направление «Выездной»), Два подряд в обратном направлении (путь «Подъездной»). Итак, посмотрим на рисунок А2. На нем перед станцией путь «Подъездной» разделяется на два пути ведущих к платформам. Перед развилкой мы ставим не проходной ПСМ сигнал, что позволяет поезду, не задерживаясь выбрать свободный путь. Перед каждой платформой стоит входной сигнал. А на выходе – выходной. После выходного сигнала на расстоянии 8 – 9 клеток мы соединяем пути в одну ветку и перед стрелкой, на каждом из двух соединяемых путей ставим выходной (можно комбинированный) сигнал. Если вместо этих сигналов поставить маршрутные сигналы, то входные сигналы будут закрытыми до тех пор, пока поезд не выйдет за пределы стрелки соединяющей выходные пути от двух платформ и уйдет за пределы следующего за станцией маршрутного сигнала. Для того чтобы входные сигналы на путях были открыты, если платформы не заняты, поезд должен выйти за пределы выходного сигнала. Расстояние в 8 – 9 клеток оставлено специально, с тем, чтобы поезд, выйдя за пределы выходного сигнала, открыл входной сигнал на ту платформу, с которой он только что вышел. Такую схему построения мы делаем с обеих сторон станции. Даже если на одной из платформ уже стоит поезд, то входящий состав, если есть свободная платформа, спокойно зайдет на эту платформу.

Рисунок А2
Изображение

Второй пример. Если у нас есть 4-х путевая ветка, то в зависимости от того разделяется ли пути на два отдельных направления (как на рисунке А3) или 4-х путевая ветка переходит в 2-путевую (как на рисунке А4), построение входных и выходных путей будет разным. Сначала разберем построение входных \ выходных путей на рисунке А4. На рисунке видно, что к станции подходят две, двух путевые ветки. Работая туда – сюда. Перед входом на станцию сделана развязка. За развязкой на расстоянии 8 – 9 клеток находятся входные \ выходные пути ведущие к платформам станции. Нам нужно чтобы платформы на нашей станции были четко распределены на входные \ выходные, то есть, образно говоря туда – обратно, то мы не ставим перед развязкой со стороны станции проходные ПСМ сигналы. А ставим перед развязкой на расстоянии 8 – 9 клеток, на тех путях, которые работают на выход со станции не проходные ПСМ сигналы. А на платформах станции мы ставим входные \ выходные сигналы.

Рисунок А3
Изображение

Рисунок А4
Изображение

Если мы хотим чтобы входящие \ выходящие поезда использовали для погрузки \ разгрузки любую свободную платформу, то перед развязкой со стороны станции мы ставим проходные ПСМ сигналы повернутые лицом к платформам. С тех веток, с которых поезд входит на станцию, но перед развязкой мы ставим не проходные ПСМ сигналы. Тоже самое делаем и с другой стороны станции. Таким образом входящие, выходящие, сквозные поезда проходят на станцию не задерживаясь перед сигналами. Смотри рисунок А5. За исключением тех случаев когда либо все платформы заняты, либо поезда идут в одном направлении.

Рисунок А5
Изображение

Третий пример. Посмотрим на рисунок А3. Здесь к станции подходят две отдельные двух путные ветки, а выходит одна, двух путная. С той стороны станции, где к ней подходят две, двух путные ветки мы перед станцией опять таки делаем развязку. Перед развязкой, на путях ведущих к станции мы ставим не проходные ПСМ сигналы. Со стороны станции, перед развязкой мы ставим не проходные ПСМ сигналы, сразу после выходных сигналов. С другой стороны станции мы делаем, точно так же как рассказано в первом примере.
Аватара пользователя
Странник
Начальник станции
Начальник станции
 
Сообщения: 113
Зарегистрирован: Чт янв 06, 2011 21:08
Откуда: Москва

Re: Сложные светофорные алгоритмы

Сообщение qwe2851 » Ср мар 06, 2013 13:57

Странник, Большое спасибо за такой развернутый пост, очень интересно, теперь буду эсксперементировать с предложеными вариантами.
qwe2851
Шпалоукладчик
Шпалоукладчик
 
Сообщения: 5
Зарегистрирован: Вт дек 25, 2012 21:05

Re: Сложные светофорные алгоритмы

Сообщение alex-montero » Чт мар 14, 2013 21:06

qwe2851 писал(а):И еще вопросик. Где можно почитать про алгоритм поиска пути yapf?
Есть интересный момент уже на двух больших станциях: много платформ, на станцию по обычной двопутке залетают маглевы-химеры, с одной стороны вход, с другой выход, вход немного заранее разделяется на три подъездных пути, каждый из который идет на несколько платформ. На двухпутке перед разделением на три путя стоит маршрутный светофор, больше до станции нет светофоров, тоесть съезжая с магистрали на подъездной путь поезд уже выбирает себе платформу. интересный момент состоит в том что когда два подъездных пути к более близким платформам заняти, а третий свободен поезда его не хотят выбирать а ждут когда освободится один из первых двух, причем это не всегда происходит, иногда поезда таки заходят на третий подъездной путь к дальним платформам. Отследить причины такого поведения пока не удалось...
Схема станции:

Изображение

PS: подскажите куда лучше заливать скрины


Изначально сделано не правильно. Но это и все дальнейшее, мной написанное, моё ИМХО.
Я бы сделал, примерно, так.
От перекрестка (еще до станции), развернул бы путь на юго-восток с поворотом на станцию. То есть, петлю с заходом на станцию. Сохраняется скорость движения. Делать разветвления на несколько отдельных платформ, в данной ситуации (на данной картинке) - бессмысленно. Один путь с ответвлениями на платформы - это правильнее. Если хотите сделать пути, типа буферных - делайте соответствующие дистанции от основного пути до разветвления на платформы. Как минимум, длинной в состав.

Тем более, что на выходе поезда все равно уходят в одну колею, какой смысл тогда, делить их на входе? На выходе, для разгона, согласен. Но, вход? Да еще с такой кучей светофоров, контролирующих несколько путей на одном перегоне?! Которых (нескольких путей) нет на прегонах!

Сам не силен в светофорах, но понял их примерно так. 1-й слева (по меню в игре) разрешает проезд при соответствующем сигнале (если за ним путь не занят), обратно -нет (то есть, односторонний). 6-й - такой же, но после себя разрешает, например, на перекрестке (или как у Вас, перед платформами) нахождение нескольких составов, если их пути не пересекаются (по началу повергало в шок, особенно на маглевах; с такой скоростью разминуться на встречных курсах в пределах одной клетки - это что-то! Круче?, только отключение видимости мостов, в соответствующем меню, когда составы "in visible" несутся в бочину друг другу). 5-й работает как 6-й, но двусторонний, то есть, допускает и обратное движение через него.
alex-montero
Шпалоукладчик
Шпалоукладчик
 
Сообщения: 6
Зарегистрирован: Вт июл 24, 2012 18:41


Вернуться в Общие вопросы по OpenTTD

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9