Tutorial:Train signals
信号はFactorioの鉄道システムを機能させる上で必要不可欠だ。このチュートリアルでは、どのようなときになぜ信号が用いられるか、デッドロックとは何でどういう場合に起こるのかを説明する。目標は、読者がスムースな鉄道システムを運用できるようになり、よくある問題も解決できるようになることである。よくある利用例もいくつか示す。
まさに信号の使い方を学び始めたばかりの初心者諸君におかれては、全ての交差点付近にレーダーを配備し、問題をすばやく特定できるようにしておくことをおすすめする。また、新たな列車や駅がシステムに追加された際は、燃料補給の自動化を可能な限り早く行っておくことも推奨される。補給は、列車が持つ時刻表上のどこかの駅でついでに行ってもいいし(このとき燃料を駅に輸送することもある)、独立した燃料補給駅を時刻表に書き加えても良い。
通常信号(Regular signal)とブロック(block)
いつだって、線路に1編成より多くの列車が存在するなら衝突事故が発生しうる。これを防ぐため、道中と交差点に信号を設置しよう。通常の列車用信号 はその後ろの線路ブロックを、次の信号か線路の終端かまで保護する。信号は、どのブロックにも1編成までしか存在できないことを保証してくれる。すでに列車が存在するブロックに2編成目の列車が侵入しようとすると、そのブロックへと続く(直前の)信号で止められて待たされる。
線路ブロックは、プレイヤーが信号を持っている間、色付きで表示される。画像はブロック可視化(の様子)で、ここでは全部で11のブロックが見て取れる。列車用信号(そして連動式信号)はブロックを画すが、駅(train stops)はなにもしない。
通常信号は、続くブロックに列車が存在しない場合に緑となる。列車がブロックに侵入すると、そのブロックへと続くすべての信号は赤になる。列車がブロックに進入する予定の場合、信号は赤になる前、しばらくの間黄色になる。
信号は線路の右側に設置される。列車は進行方向から見て右側にある信号しか通過できない。自動運行の列車は、右側にも信号がない限り左側の信号を通過できない。このせいで、一見線路がつながって見えるのに実は一方通行になっている部分が生じ、「到達経路なし」エラーを発生させてしまうことがある。
この画像では、線路は上から順に:
- 左から右、
- 右から左、
- 双方通行、
- 双方通行、
- 左半分は双方通行で、分岐した上の線路は右から左、下の線路は左から右。
連動式信号(Chain signal)
信号を用いれば列車同士が衝突することを防止できるが、別の潜在的問題が生じてしまう。すべての列車は前方のブロックが開放されるまで待たなければならないので、列車は他の列車(群)を待つことになる。では、ある列車が交差点内部で待たされている場合を考えよう。この場合、たとえ別方向に向かっている他の列車がいても待たされることになる。そうした列車はさらに他の列車を待たせることとなり、システム全体が遅くなってしまう。輸送システムは列車が交差点上で待たされることを避けねばならない。Factorioにおいては、連動式信号がこうした事態を防いでくれる。
最も重要なルールは、列車が連動式信号の直後のブロックで長期間待機することはできないということだ(逆に通常信号の場合、直後のブロックで待つことができる)。列車は交差点で待つべきではないので、以下のよく言われるルールが導かれる:「交差点とその直前では連鎖式信号を用い、交差点を出たところに通常信号を置け」。一般に、待機中の列車が別路線の列車の邪魔になる位置では、そこで待たせないように連鎖式信号を使うべきだ。
連鎖式信号はどのように動いているのだろうか?列車が連鎖式信号を通過できるかどうかを決めるには、その信号から、次の通常信号か駅か(早い方)までにその列車が辿るだろう経路を考える。その経路上の全てのブロックが空いているときのみ、その列車は連動式信号を通過できる。列車が通り過ぎると、その経路上の全ブロックは予約(reserve)され、実際に通過するまで他の列車は侵入できない。出口信号が1つのみのブロックへと続く連動式信号は、つねにその出口信号と同じ色になる。路線が分岐する場合は、ある出口信号が赤で別の出口信号は緑といったことがありえる。その場合、そのブロックへと続く連動式信号は青になり、いくつかのパスは空いているが他のパスはそうでないことを示す。
鉄道ネットワークが多くの連動式信号を含む場合、ある列車が連動式信号1つを通り過ぎただけで大量のブロックが予約される事態が起こりうる。こうなると他の列車の動きも制約され、総体としてスループットが落ちる。なので、可能な限り通常信号を使い、連動式信号は必要なときだけ使うようにすることがよくおすすめされる。
デッドロック(Deadlock)
信号を用いると、列車は他の列車を待たされる場合がある。その帰結として、列車が連鎖してしまい、どの列車も次の列車を待機していて、しかも最後の列車は最初の列車を待機している…といった事態が発生しうる。この状況はデッドロックと呼ばれ、実際、手動で解消しない限りすべての列車が永久に待機し続けることとなる。これが起こったエリアを通過する列車全てが詰まってしまうことになるので、これを避け、また可能な限り早く解決すべきである。デッドロックが生じる最もよくある原因としては
- 交差点で列車が待機していて
- 鉄道ネットワークが列車に対し十分なスペースを備えていない
上に示すイメージは、通常信号のみが用いられ、連動式信号が欠如していることによって生じたデッドロックである。結果として、列車は交差点上で待つことができてしまい、デッドロックを引き起こす。この交差点の修正版もすでに上掲した。交差点とその直前の8つの信号が、交差点で待機することを許してしまっているので、これを連動式信号に置き換えねばならない。上述のように、一般に交差点とその直前では連動式信号が用いられるべきだ。
この画像に見られるデッドロックは、列車ネットワーク内に存在する円環が、そこに収まる量よりも多くの列車によって利用されることで発生している。信号は正しい配置なので、これを解消するには円環を排除するか、このエリアを通らなければならない列車を減らす。
このデッドロックもまた、小さすぎる円環に多すぎる列車が殺到したことで発生している。デッドロックはたった2編成でも起こりうることがわかる。このケースでは、デッドロックは図に示した信号を連動式信号に置き換えることでも解消できる。問題の円環に1編成しか進入できないことを保証してくれるからだ。しかしながら、こうすると主線で列車が待たされることになるので、駅付近に列車待避所を作る必要がある。
信号間隔
この画像は、2つのT字路(訳注:鉄道でもT字路っていうの?)間で起こったデッドロックを示している。これは、ある列車が交差点上で待機しているとき、その最後尾はまだ直前の交差点にいるせいで発生している。このT字路2つは、それぞれを見れば正しく信号配置されているが、お互いに近すぎる。2つで1つの巨大交差点を作っているとも言えるだろう。これを修正するには2つの方法がある。1つはT字路間の通常信号を連動式信号に変える方法。もう一つはT字路をお互いもっと離して設置する方法。
T字路の出口信号を超えたら、次の信号は十分遠く、鉄道ネットワーク上に存在する最も長い列車が収まるくらいの間隔をおいて配置しなければならない。概して、すべての通常信号の後にもその程度のスペースは空けておくべきだろう。
線路ブロックの分割
以下での目的は、どこに信号が置かれるべきかを説明することである。長く邪魔の入らないような路線には一定間隔で信号を配置することで、より多くの列車がその路線を同時に使えるようになりスループットが向上する。交差箇所は、そうした邪魔の入らない部分から信号によって隔離されていなければならない。交差においては信号を用い、複数の列車がスピードを落とすことなく通り抜けられるようにすべきだ。例えば、お互い逆向きに走っている列車はお互いのために減速する必要がないので、交差点内部の別のブロックを通過できてほしい。以下の例はすべてこれらのルールを守っている。
例
鉄道システムを作る最も一般的な方法は、2本の並行した路線上で、それぞれを一方通行にすることだ。これから示す例も、だいたいこのアーキテクチャを採用している。単一の双方向路線は、大概の状況において'主要'路線であるべきではない。
T字路(T-Junction)
この画像では基本的な3方向交差を示した。列車用信号が交差内部に設置され、場合によっては2編成以上が交差点内部に入れるようになっている。たとえば、1編成が左から右へ、別の編成が右から左へ向かっている時、それぞれの列車は異なるブロックを通る。前者は左側の黄色、青、右下の黄色と走り抜ける。後者は上の黄色、上の赤を利用することになる。これらは別のブロックを利用するので、この交差点を同時に利用できる。これは交差点が機能する上での必須条件ではないが、労せずによいスループットを出せる方法だ。
待避所(Waiting areas)
複数の列車が同じ駅を利用する場合、列車は主線上で待機することとなり、ネットワーク上の交通渋滞やデッドロックを引き起こしかねない。これを避ける方法の一つとして、それぞれの駅に列車用の待避所を設ける事が考えられる。
画像では、2つの駅に共用の待避所がみられる。待避所へと続く信号は通常信号で、入った列車が長時間停車できるようになっている。待避所から出る信号は連動式信号で、待避所と駅との間の線路が妨害されないようになっている。駅もまた(それぞれ)別のブロックになっていて、これによりすべての駅が同時に利用可能であることが保証されている。
待避所を設計する上では2つのやり方がある。並列(parallel)(上に示したように)と直列(sequential)である。並列版は拡張性がよく、スペースも取らないし複数の駅が待避所を共用できる。直列版は以下に示すようなもので、簡単に作れるが複数の駅で共用することはできない(し、ごくわずかなUPS向上しかもたらさない)。待避所は「スタッカー(stackers)」とも呼ばれる。