
Factorio Space Age UPSとの付き合い方
1,641時間経過、Research prod 72。この一週間はSPIRAL級プラットフォームの動作確認およびベルト倉庫(Promethium格納用)の拡張をしました。Promethium SP生産速度上昇に合わせて各所生産量を拡大しました。
現在のspmは、Promethium SP生産速度ベースで10kspmです。

SPIRAL級プラットフォーム
ベルト倉庫をプラットフォームいっぱいに広げました。現在は一回の航行でPromethiumを1.8M個程度(=Promethium SP 2.16M個に相当)持って帰ることができます。もう一週間くらいは様子を見ながら微調整しますが、最終形に近いイメージです。一本のベルトが非常に長い作りになっています。計算負荷はそれほどかかっていないようです。300,000kmを超えたあたりからUPSが下がりだし、折り返し地点600,000km前後ではUPSが40程度まで下がります。アステロイド関連の処理がそこそこ重い。
動いているプラットフォームを見に行くと、描画負荷で更にUPSが下がります。



UPSとは
Factorioにおいて、処理速度の低下はしばしばUPSが60からどれくらい低下したかで語られます(たまに勘違いしている人がいますが、FPSは誤りです)。
工場を大きくしていくと、いつかはPC性能の限界に突き当たります。それはUPSが60を満たせなくなることでわかります。工場の拡大は、最終的に無駄な処理の削減、つまりUPS低下との戦いでもあります。

各処理にかかる時間の調べ方
まず、F4でメニューを出します。単にUPSを見たい場合はshow-fpsを(これは常に表示しておくとよいです)、各処理にかかる時間についてより詳しく調べたい場合はshow-time-usage,show-entity-time-usageを有効にします。必要に応じて選択、片方でも構いません。各項目が何を意味するかはFactorioに慣れてくれば理解できるようになります。
これらの数字は1tick=1/60 sec=16.667msecでかかった時間です。各処理の合計が16.667msecを上回るとUPSは60(60tick/1sec)を維持できなくなります。


UPS低下を抑制する
UPSが低下すると、全体の処理が緩慢になります。操作はしづらくなってQoLは下がり、現実時間に対する研究の進みも遅くなります。そもそも論として、高負荷で非効率な実装のまま1+1+1+…と自明な拡張をした結果UPSがどんどん下がっていくゲームプレイが果たして有意義(楽しい)か?という疑問もあります。
では、UPS低下を抑制するにはどうすればよいでしょうか?
エンティティの動作量を減らす
UPS改善のためにエンティティ(組立機、インサータなどあらゆる物)を減らせとはよく言われますが、より正確にはエンティティの動作量(時間*台数)を減らす、ということになります。動作していないエンティティは(ほとんど)負荷をかけません。
2.0でビーコンスパムはナーフされましたが、それでもビーコンをたくさん置けば組立機の処理速度が上がることでエンティティの動作量が減ります。これはUPS改善に有効です。

Direct Insertion
これは以前の記事でも書きましたが、インサータ等によるアイテムのリレーを少なくする考え方です。インサータが一つ動けば組立機一つが動く程度の負荷がかかります。動くインサータの数は少ないに越したことがありません。
2.0ではベルトが強化され、アイテムスタックができるようになり、またベルトブロック全体を簡単に回路で読み取りできるようになりました。中身が流れる、形を調節できるチェストだと思って有効活用しましょう。

流体
2.0で流体の扱いは大きく変わりました。1.1ではパイプやタンク一つ一つが1つのエンティティとして個別に処理されていましたが、2.0では連結したパイプやタンクは合わせて1つのエンティティとして処理され、流体関連の負荷は格段に下がりました。1.1では地下パイプで飛び飛びとするのがエンティティを減らしUPS低下を抑制するセオリーでしたが、2.0ではUPS低下を気にせずダーッとパイプを伸ばすことができます。こっちのほうが見た目が良い。
なお、2.0でも流体の速度は無限ではありません。公式wikiの内容が更新されていませんが、6k/sが上限の目安になると思われます。出口が複数あればその数だけ掛け算で増えます。

列車
UPSの観点では、列車は、最終的な工場サイズに対して適切な長さの編成であることが望ましいです。1+1など短い編成では、工場の拡張により大量の本数が必要になると経路探索等の計算量が増えます。逆に長過ぎる編成は処理が離散的になり、管理がしづらくなるでしょう。
2.0では列車周りの改善がされたこと、特にInterruptsが使用可能になったことで、Modを使用することなしに待機中列車の経路探索の負荷がなくなりました。処理負荷は普段走っている列車の本数に依存します。特に列車の本数が多い場合、線路を網目状にするなどむやみに経路を増やすことをしないよう気をつけましょう。
