Логотип igrozor

Factorio: Гайд по ЖД дорогам

Некоторые из вещей, о которых я буду говорить, кажутся мне очевидными, но я регулярно встречаю вопросы вида «Как мне настроить железную дорогу?». Базовый туториал даёт все ответы — но на языке, понятном скорее инженерам, чем простым игрокам. Большинство мануалов в ютубе, к сожалению, просто пересказывают это руководство, и показывают простую схемку из пары станций, рельс и поезда или двух.

Несколько хороших мануалов с углублением в особенности ЖД в фактории есть в англоязычном ютубе, но они, опять же, недоступны тек, кто недостаточно знаком с разговорных английским. Я не умею снимать ролики для ютуба, поэтому решил написать небольшой мануал, и рассказать о некоторых особенностях, которые проявляются на больших размерах ЖД сетей, а так же постараться объяснить не «как надо делать» а «почему лучше делать так».

Итак, приступим!

Основы железнодорожной логистической сети

Как только у вас вместо одного поезда начинает ездить два, пять, десять… сто — начинают возникать проблемы с пропускной способностью. Опыт использования конвейеров говорит — «просто добавь ещё пару путей!». Это неверно.

Пропускная способность пути, как правило, крайне высока, и если у вас поезда не идут непрерывно один за другим — нет смысла делать 4-х или тем более 6-ти путевую линию. Как правило, проблемы находятся в других местах — это развязки, станции, и общая организация ЖД сети. И если развязки вы можете перестроить, а к станциям добавить буферы — общая органицация сети с трудом поддаётся переделыванию.

Чтобы минимизировать пробки на развязках, желательно с самого начала строить свою базу и ресурсные модули по цепочке зависимостей. Например, на юге, снизу от базы, у вас добывается руда. Эта руда поездами доставляется на переплавку чуть выше. Оттуда другие поезда везут её дальше вверх — к созданию базовых компонентов. Далее эти базовые компоненты отправляются ещё выше, к местам где они требуются на производствах. Это создаёт некую виртуальную цепочку из добычи — переплавки — производств — продвинутых производств.

Представим её как цепочку A-B-C-D. В этой цепочке поезда ходят по маршрутамA-B, B-C, и C-D. Конечно, производственные линии не такие простые, и будут добавляться маршруты, которым требуется идти по пути B-D, например, однако основная масса поездов уже перестанет мешать друг другу.

Просто для примера — если вы об этом не задумались в самом начале, то к середине игры у вас может возникнуть ситуация, когда поезда с рудой едут с южных месторождений, создавая пробки в самом центре базы — потомучто едут по маршруту E-A.

Старайтесь избегать таких маршрутов, и если зона добычи у вас на противоположной стороне от переплавки — лучше создайте отдельный обходной путь для поездов с рудой. Помимо разделения зон маршрутов, оптимизация такого рода даст уменьшение среднего времени, которое поезд проводит в пути — что опять же повышает эффективность тренспортного потока.

Сигналы — основы

Туториал в игре крайне невнятно объясняет разницу между обычными и проходными сигналами, а самые лучшие туториалы в инете, вместо объяснения логики сводятся к простой рекомендации — ставьте обычные сигналы за развязками, а проходные — во всех остальных местах.В принципе, этот совет работает. Но почему? Давайте сначала разберёмся, как работают сами сигналы.

В игровой механике, все рельсы разделены на виртуальные сегменты, своего рода куски пути. Разделены они как раз этими сигналами. В каждом сегменте одновременно может находится один поезд. Если у вас нет сигналов на путях — то в вашей сети сможет свободно кататься только один поезд, как только вы добавите второй, произойдёт ошибка и они не смогут рассчитать свой маршрут.

Когда в сегменте ЖД находится поезд, все сигналы которые стоят на пути в этот сегмент — т.е. отделяют его от других сегментов — показывают красный. Так же, красный показывают проходные сигналы, которые ведут к этому сегменту. Так же, красный можно включить логикой, что используют для создания безопасных ЖД переходов. Когда поезд едет по маршруту, он проверяет сигнал на въезд в следующий сегмент, и если он зелёный — едет дальше. Если красный — ждёт. Это может приводить к дедлокам, но про них чуть позже.

После такого базового объяснения становится понятно, что нужно нарезать свою ЖД на сегменты, но всё ещё непонятно — зачем использовать проходные сигналы. Я придумал конкретный пример, который показывает, какое преимущество они дают при правильном применении.

Проходные сигналы — практическая польза

Итак, давайте представим что у нас есть две станции — «Отправление» и «Прибытие». Между ними есть два пути, путь А и путь Б, причём путь А — короче, поэтому поезда всегда выбирают его. Но у пути А есть одна проблема — на нём есть станция «Бологое», и когда на ней стоит поезд — проезд по этому пути заблокирован. Перед станцией есть несколько сегментов, отделённых обычными сигналами — от развилки путей 3 сегмента.

Поезд отправляется из «Отправление» в «Прибытие», подъезжает к развилке, от которой ведут пути А и Б, и выбирает путь А, как более короткий. Он подъезжает к «Бологое», и видит что станция, по чъему-то недосмотру установленная прямо на путях, занята поездом, и проехать дальше нельзя. Поезд занимает первый свободный сегмент перед «Бологое» и ждёт, пока путь освободится.

Та же история повторяется ещё с двумя поездами — пока не заполняются все сегменты от развилки до «Бологое». Четвёртый поезд, подъезжая к развилке, видит что путь А(точнее, первый сегмент этого пути) занят, и принимает решение ехать по маршруту Б. Первые три поезда всё ещё стоят....

А теперь представим, что в сегментах между развилкой и «Бологое» установлены проходные сигналы. Что изменится? Обычный сигнал перед «Бологое» показывает красный, проходной сигнал в предыдущем сегменте считывает его и тоже показывает красный, и так — до развилки. Первый поезд подъедет к развилке, увидит что путь А в данный момент заблокирован, и поедет по пути Б. Мы избежали пробки, материалы оперативно доставлены на станцию назначения, профит).

Отдельный вопрос — кикие сигналы ставить на протяжении пути. Если везде будут стоять обычные — поезда будут набиваться даже там, где проезд в данный момент заблокирован. Если проходные — поезда не будут заезжать на длинный перегон пока другой поезд его не освободит. Тут нужно придерживаться баланса.

Если в сети много путей, и нужно чтобы поезда выбирали свободную дорогу — ставьте проходные сигналы, а если у вас длинный перегон (например, между месторождением руды и базой) без вариантов — то на этом перегоне должны стоять обычные сигналы, с промежутком чуть больше длины поезда.

Сигналы — размер сегментов и длина поезда

Это неинтуитивно, но при планировании важно учитывать этот момент. Если вкратце — сегмент пути должен быть длиннее чем ваш состав. Более того — не только виртуальный сегмент — но и реальный, между развязками! Если вы используете составы из поезда и двух вагонов — сегменты должны вмещать в себя такой состав. Если вы используете длинные поезда — сегменты должны быть длиннее, если вы используете очень большие поезда — планируйте свою ЖД сеть очень тщательно! Почему?

Когда поезд въезжает в сегмент ЖД, он может остановиться на его выезде. Возможно, впереди занята станция, на которую ему нужно свернуть, возможно на развязке прямо перед ним сейчас красный. Что произойдёт если поезд длиннее чем сегмент? Его хвост останется торчать в предыдущем сегменте. Это не вызовет особых проблем в случае если предыдущий сегмент линейный, но что если это развязка? Она будет заблокирована до тех пор пока этот поезд не уедет.

Более того, если у нас, например, квадратная сетка ЖД путей, мы можем теоретически получить дедлок — поезд не может выехать на развязку потому что она заблокирована, другой поезд подъезжает к хвосту первого, и тоже стоит перед развязкой, блокируя уже третий перекрёсток, и это продолжается, пока не замкнётся квадрат. 4 поезда стоят, блокируя друг друга. Вы можете подумать, что это гипотетическая ситуация, для этого должно идеально совпасть время, в которое эти поезда подъедут в место X, но даже если вероятность этого крайне маленькая — однажды это случится. Поездов в вашей системе будет становится всё больше, движение всё насыщеней, и в определённый момент где-то поезда совпадут.

Поэтому просто запомните правило — расстояние между развязками должно быть больше, чем самый длинный поезд который будет ездить по этой ветке!

Развязки — расстановка сигналов

В целом, при проектировании развязок можно руководствоваться тем же правилом — на въезде проходные сигналы, на выезде обычные. Но я хочу разобрать это немного подробней.

Когда поезд въезжает на развязку, он её блокирует для других поездов, частично или полностью. Поскольку это может создать пробки, важно чтобы поезд въезжая на перекрёсток имел возможность выехать с него. Ставим на каждом выезде обычный сигнал, а по всей развязке, и перед въездом — проходные. Если поезду нужно после развязки налево, а тот путь сейчас занят — поезд, при правильной конфигурации сигналов, будет ждать перед развязкой, пока путь не освободится.

Любая развязка, особенно сложная, как правило, предполагает возможность поворота любого поезда в любом направлении. Иногда даже разворот. Это выгодно с точки зрения построения кратчайшего маршрута, но превращает развязку, особенно если она четырёхполосная, в мешанину из рельс.

Проектируя развязку, и расставляя на ней сигналы, попробуте установить на неё поезд, и посмотреть, какие направления при этом будут заблокировны (красный сигнал). Идеально спроектированная развязка не должна мешать проезду других поездов. Например, если при правостороннем движении поезд идущий снизу поворачивает направо — он использует развязку, но оставляет свободными все пути кроме пути слева направо. Поезда идущие сверху вниз, справа налево, справа вверх или сверху налево — не должны останавливаться из за первого поезда.

Станции — настройка

Один из эффективных способов экономить топливо и не перегружать ЖД сеть — не гонять поезда порожняком. Я предпочитаю использовать LTN мод для более гибкой настройки, но сейчас расскажу о возможностях ванильной версии — их тоже вполне достаточно, чтобы организовать правильные транспортные потоки.

Как правило, первые эксперименты по настройке сводятся к условям «Ждать полной загрузки» и «Ждать полной разгрузки», но они не дают достаточной гибкости. Поезд может стоять на станции по добыче руды, и ждать пока в него загрузят руду — а добыча истощилась. Поезд в результате бездействует, непрактично. Или ждёт пока его разгрузят — а на переплавке перепроизводство, продукция никуда не идёт и сундуки с рудой тоже забиты. В это же время, возможно, на другой станции руда требуется.

Для полноценного использования станций нам во первых потребуется хак, о котором многие не знают — если станции названы одинаково, то поезд едет на любую из них — во вторых — логические цепи. Начнём с организации доставки угля, например. Добывается он у нас в одном месте, но планируем добавить ещё добычу. Потребляется в топливном блоке, на переплавке железа\меди\стали, и на производстве гранат. Итого у нас две станции поставки и пять станций потребления.

Для начала, именование. Назовём обе станции на которых мы загружаем уголь — «Добыча угля», а все станции на которых мы хотим выгружать уголь — «Выгрузка угля». Названия можете придумывать свои, главное чтобы они повторялись) Теперь, если мы поставим поезду маршрут «Добыча угля» (Ждать полной погрузки) — «Выгрузка угля (Ждать полной разгрузки), поезд будет ездить к любой из этих станций. Но есть проблема — сначала он поедет к ближайшей добыче а от неё — к ближайшей выгрузке. Давайте это исправим.

Если мы присоединим провод к станции и к сундукам — мы можем настроить условие, по которому станция будет работать. Для станции добычи нам нужно условие, что в сундуках достаточное количество угля для полной загрузки поезда. Я обычно использую двухвагонные поезда, поэтому ставлю условие включения — больше 4000 угля. Сундуки передают по проводам, сколько в них угля, и как только его накопится достаточно — станция заработает. Для станции выгрузки нам нужно условие, что в сундуках осталось мало угля. Например, мы хотим чтобы в них поддерживалось не менее 2000 угля — ставим условие: если угля меньше 2000, включаем станцию.

Что теперь происходит? Поезд едет к ближайшей включённой станции. Сначала он забрал уголь на ближайшей добыче, и отвёз его на ближайшую выгрузку. Например, это оказалась плавка меди. Он вернулся к добыче, загрузился, и едет к ближайшей станции, но на переплавку меди только что выгрузили 4к угля, и она их не успела потребить, поэтому поезд отвёз уголь на другую станцию выгрузки. Далее он опять едет за углём, но первая станция ещё не успела добыть 4к угля, поэтому он едет на дальнюю. Если все станции отключены — поезд стоит на той, на которую приехал последней, и ждёт.

Эту схему можно легко расширять — если первый поезд не справляется, мы добавляем второй с теми же настройками, и он тоже будет курсировать между двумя добычами и пятью выгрузками. Когда у нас появятся новые места добычи\потребления, мы просто называем их тем же именем, ставим логику, и они автоматом включаются в сеть. Так же можно добавить в маршрут станцию буфер — всегда включённую, на которой поезда заправляются топливом.

Самый сложный момент в данном разделе — это логические условия. Объяснение того, как они работают, выходит за рамки этого туториала, но внизу я оставлю ссылки на интересные ресурсы.

Станции — буферы

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

Выглядит это достаточно просто — от путей выходит отнорок в сторону, разделяется на нужное количество линий, каждая из которых в длину позволяет вместить один или два поезда (опять же, учитывайте, какие поезда у вас будут заезжать в этот буфер!), а в конце эти линии опять сходятся и ведут на станцию.

Кажется, это самый короткий раздел, и достаточно простой — но он тоже поможет вам избежать лишних пробок).

Послесловие

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

Автор: Wlady

Нет комментариев