Factorio @ 2020-08-27

Factorio @ 2020-08-27


以下蛇足

全国八百萬人のファクトリオファンの皆様こんにちわ。

さてどこぞからパクってきたイントロはともかくとして、本日はPyModsの話題から少しだけ離れて鉄道の話をしたいと思う。決して予定していた鋼鉄ラインの製造に手間取っているとかそういうわけじゃないぞ。計画は順調で遅れは一切ないし、工場の生産性は5年で5倍だぞ、本当だぞ。

閑話休題、さて皆様、Factorioで鉄道を使うときに困っていることはないだろうか?鉄道というのは完全な初心者から数千時間をプレイしたFactorio仙人に至るまで常に頭痛の種だ。誰かしら、きっと一つは課題を抱えているはずだ。


全くの初心者の貴方、鉄道の使い方がわからない?信号の意味がわからない?大丈夫、私にもそういう時代があった。チュートリアルをユーチューブで見て勉強してほしい。私はよく知らないが、きっと最近流行りのブイチューバーとかいう可愛いおねーちゃんがわかりやすく手取り足取り教えてくれる動画があるはずだ。


鉄道の使い方は分かっているけど鉄道を引くのが面倒くさい貴方、大丈夫、FARLというModを使えば幸せになれる。


鉄道を引くのに飽きた貴方、次は巨大な貨物船が行き来する運河なんてどうだろうか?きっと新鮮なゲームプレイが楽しめるはずだ。


3-8-0 RHDに対応した平均スループット最大かつ転回可能でデッドロック癖のない複々線用の十字路を探し求めている貴方はただちに帰れ。私から貴方にお伝えできることは何もない。


では最後に、鉄道網を敷いたのはいいけどダイヤの設定をするのがかったるい、メガベースを運営しているんだけど列車が効率よく動いてくれないで困っている、という貴方はいかがだろうか?そう、貴方こそが今回の記事の対象読者だ。まぁ私自身なのだが。

もちろん標準のFactorioの鉄道にもかなり強力なダイヤ編集機能があるのだが、例えば複数の駅をまたがって効率化したい場合などはこれだけでは物足りない。鉄鉱石を鉱山A・B・Cから精錬炉D・Eの足りない場所に足りないぶんだけ最適に配分したい、といった場合にはうまく解決ができなくなる。

そこで登場するのが論理回路を使って自動的に需要に従い鉄道ダイヤを更新するModだ。この分野で最もよく知られているのはLTN - Logistic Train Networkという名前で知られているModである。

私も実際にLTNを使って、メガベースとまではいかないがキロベース程度の工場を運営したことがある。LTNは最初のとっつきにくさが最大の問題点で、専用の駅設備を用意したり、よくわからない論理回路のシグナル設定を行ったりととにかく挫折要因が多い。だが一度LTNの概念と使用方法を身に着けてしまえば二度と自分でダイヤを組みたいなんて思わなくなるはずだ。単に「この駅は鉄鉱石を供給する駅」「この駅は石油の需要がある駅」と設定していくだけで後はすべて自動に、魔法のように、何も考えなくても鉄道ダイヤが組まれるのだから。

そんな便利極まりないLTNなのだが、実はこの分野の先駆者ゆえに弱点も多い。もっともよく知られている問題点が操車場問題である。LTNにおいては仕事がない列車はDepot(操車場)と呼ばれる駅にプールされる用にダイヤが組まれるのだが、いざ需要が発生すると操車場から列車が飛び出して行って荷物を拾い、それから荷物を供給先に下ろすという仕組みになっている。そのため様々な問題が発生する。

・広大な操車場が必要。
・需要があってから移動して貨物を積み込むため、貨物の積み込みが遅い駅だと配送遅延が大きくなったり、実効スループットが低下する。
・操車場から一度に大量の列車が出ていったり、操車場に多数の列車が入り込んでくるため、操車場のスループットが激しいボトルネックになりやすい。
・複数の操車場を用意しても、もっとも近い列車をもっとも近い場所に向かわせるという機能がないため、もっとも遠い操車場の列車が選ばれることがあったりする。これはFactorioのMod APIに列車の経路探索と経路長計算をするためのものが用意されていないためと言われている。

またもう一つよく言われるLTNの問題点が車両のダイヤ再計算にかかる計算コストだ。メガベース程度なら問題にならないかもしれないが、ギガベースが近づいてくるとModによる遅延が無視できないほど遅くなるらしいのだ。

そこでLTNの対抗馬として比較的新しく登場したのがTrain Supply Manager、略してTSMというModである。決してプロゲーミングチームの名前ではない。

TSMは後発だけあってLTNの問題点を解消することに主眼が置かれている。すなわち、専用の駅設備を作らなくても後付のアドオンを既存の駅にくっつけるだけで機能するようにしたり、ギガベース規模の巨大な工場で使用してもパフォーマンスに悪影響が出ないよう配慮している。だがもっともLTNに対して優れている点を1つ選べと言われたら「LTNは空の列車を操車場に待機させるが、TSMは貨物を満載した列車を供給駅に待機させる」点だろう。この方式は実際非常に効率がよく、需要が発生した瞬間にすぐにデリバリーが開始されるし、列車が操車場の一箇所に固まらないためボトルネックの分散にも役立つ。逆にTSMはLTNのような立派なUIは持たず、駅名によって設定を行う必要があったりして、駅の拡張が煩雑だと言われている。


さて、2つの異なる解決方法が存在すると、ここに1つの問いが生まれる。人類を有史以前より苦しめ続けてきた問いである。

どちらのほうが優れているのか?

と。

しかし実はこの問いに答えられるものはあまり多くない。Modダウンロードページを見ていただければわかるのだが、LTNのダウンロード総数66万に対してTSMはわずか6万なのである。ユーザー数が1/11しかいない。幸いにして、このスレにはどちらも経験した鉄道仙人が降臨してその経験を語ってくださった。

曰く、数千文字に渡って両者の良いところ悪いところを語った結果、LTNは学習が難しいがよりパワフルだ。どっちもいいところがある。もう一度使えと言われたらLTNを選ぶ、とのことらしい。

They both kinda do what you want. IMO, LTN is more powerful but it's harder to learn. Both are good but personally, if I had to choose which one I would likely pick LTN again now.

なるほど、大変参考になった。先人の教えと経験を活かすのが我々今を生きる人間の責務だ。さっそくこのご意見を元に、今の私のPyModsの工場にどちらを採用するかを決めさせていただいた。

もちろん、TSMだ。

安心してほしい、タイプミスでもなければ、メクラになったわけでも、天邪鬼になったわけでもない。ちょっと気は狂っているかもしれないが。

理由は3点ある。

ひとつ、TSMはLTNと同様に優れていると語られているからだ。LTNがあまりにも問題一つなく完璧に動作していた経験から、TSMも同じぐらいちゃんと使えるのか疑問視していたのだが、両方を経験している彼が言うのであれば間違いはないだろう。それであれば安心してまだ使ったことがないTSMにチャレンジできる。

ふたつ、TSMのほうが機能は弱いが簡単に使えると述べられている点だ。複雑な機能は必要ない、簡単に使えるほうが私としては嬉しい。ただでさえPyModsは面倒が多いのだ、少しでも楽にしたい。

そしてみっつ、コレは私が実は発見したことなのだが、LTNに比べてTSMのほうが最近の更新頻度が圧倒的に多いのである。Changelogを眺めているとわかるのだが、すでにメンテモードに入っているLTNに対してTSMは未だに活発であるし、何よりLTNは未だに1.0に対応していないように見える(実際には0.18と1.0には互換性があるのでそのまま動くはずだ)。であればTSMを試してみる価値はあるかもしれないと思ったのだ。


そういうわけで、早速TSMを今のPyModsのセーブに追加して様子を見てみようと思う。そもそもちゃんと動作するか不安ではあるが、続報を期待して欲しい。