amarao (amarao_san) wrote,
amarao
amarao_san

Category:

TTD

Снова подсел на OpenTTD. Ощущаю, что ещё сколько-то итераций, и я смогу продумать схему идеальной станции.

В настоящий момент схема гибридного узла выглядит следующим образом: вход - 2 линии, выход - две линии, странция - три линии.

Фокус пока на "входе" (проблему выходной развязки я решу чуть позже). Основная идея: каждая входящая линия имеет эксклюзивный разгрузочный порт, плюс один 'shared', который может обслуживать обе линии. Классическая схема "тройная развязка на три линии" плоха тем, что её может проходить только один поезд в один момент времени. Вместо этого мы строим такое дерево состояний:

1ая линия: либо эксклюзивный порт, либо общий.
2ая линия: либо эксклюзивный порт, либо общий.
Общий порт: (1 выход 2 входа): оба выхода открыты, если свободен вход (выход закрыт, оба входа закрыты).

Итого:

1ая линия: открыто = (ЛИЧНЫЙ_ПОРТ_1 ИЛИ ОБЩИЙ)
2ая линия: открыто = (ЛИЧНЫЙ_ПОРТ_2 ИЛИ ОБЩИЙ)

Основной проблемой является проблема ожидания. Потому важной категорией будет понятие "train length", или TL. TL должен быть таким, чтобы поезд мог заехать в перегон и ждать следующего семафора. Если перегон будет меньше TL, то поезд перегородит два сегмента, включив довольно неприятные блокировки.




Обратите внимание - в этой схеме перед станцией, фактически, отстойник в 4 поезда. Это гарантирует, что на станцию будет гарантированно кто-то заезжать как только открывается свободный порт. Часть поездов будет простаивать в два раза дольше других (кто заехал в общий порт, тому ждать с 50% вероятностью не одного поезда, а два). Однако, задача схемы не fail schedule, а максимальный payout со станции - для этого она должна быть занята практически всегда.

Подробнее: Для порта 1:

Если есть позед в 1ом отстойнике, он заезжает. Если поезда нет в отстойнике, а есть на подъезде ранее - он проезжает прямо. Нет ни там, ни там, порт стоит.

Порт 2:

Если есть поезд в 1ом или 2 отстойнике, он заезжает. (Никакие другие условия не требуются).

Порт 3: аналогично 1.

Отстойник 1: поезд заезжает, если отстойник свободен и свободны рельсы на развязке О1-О2.

Отстойник 2: поезд заезжает, если отстойник 1 занят и развязка О1-О2 свободна.

Отстойник 3: аналогично 2, но О3-О4.

Остройник 4: аналогично 1, но О3-О4.

Развязка О1-О2. Открыта, если пуст хотя бы 1 отстойник. Может быть блокирована сломанным поездом (блокируются О1 и О2).

Развязка О3-О4. Аналогично.

Вот как выглядит это в игре:



Следующая задача: аналогичный вызед.

Основной проблемой является коммутация - каждая развилка, которую проходит поезд, блокирует все пути, в которых зазвилка участвует. Таким образом, развилка на 5 линий будет блокировать все пять линий. Целью скоростной коммутации является сведение схемы к максимальному числу развилок для минимального числа дорог. Минимальное число для существования развилки - 3 (2 входных, 1 выходной или наоборот).
Tags: ttd
Subscribe

  • Rust soundness

    Каждый раз, когда я сталкиваюсь с маленькими "но" в Rust'е, это ощущение тщательной продуманности. Например, простейшие fold-функции для итераторов:…

  • still_ntp

    В ходе локального мозгового штурма у меня родилась суперидея. Надо написать ntp сервер, который может отдавать указанную дату. Т.е. сказали при…

  • arping'а не достаточно

    Я обнаружил, что arping не умеет делать целый запрос полностью (т.е. source mac, dest mac, source ip, dest ip). Dest либо IP, либо mac, и это немного…

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 3 comments