見出し画像

Factorioで宇宙を探検しよう(Space Exploration MOD紹介&攻略) Part.5 ※最終回

 いよいよ最終回です。今回はマジでめちゃくちゃ長く、そして何故か数式が容赦なく並んでいますが、どうか最後までお付き合いください。

 前回、宇宙船を使った自動運行システムの構築方法を解説し、新宇宙領域の研究を進めるために必要となるナクイウムの採掘が開始しました。これまでの4領域においては、新元素が安定供給出来るようにさえなれば、後は基本的に工場建築を頑張ればOKでした。そしてそれは、これまで数々の工場を設計してきたあなたにとっては最早造作もないことでしょう。
 「つまり、クリアってこと?」―――長かったSpace Explorationの旅もこれで終わりかと、あなたの頭の中でエンドロールが流れ始めたことでしょう。しかし、これまで散々無茶苦茶な難題を突きつけてきたSpace Explorationがこんなもんで終わりでしょうか?……はい、もちろんそんなことはありません。
 最後に待ち受けるは、アルコスフィアによる生産システム構築、および超巨大宇宙船による銀河系の脱出。思わず「加減しろ莫迦!」と、心の中の牛股権左衛門が叫んでしまいそうになるほどの、地獄の高難易度ミッションです。

前回記事はコチラです。



Space Exploration攻略 ~宇宙の謎の結晶、アルコスフィア

 アルコスフィア、この謎めいた物体が登場するのは総合深宇宙カタログ、つまり深宇宙領域のラストの2段階です。小惑星帯でアルコスフィア採取用の衛星を打ち上げることでゲット出来る銀の玉のようなものですが、一発打ち上げてみて驚くのは、その入手出来る数の少なさでしょう。他の衛星打ち上げでは大体アイテムが100個くらいは手に入るのに対し、アルコスフィアは初回打ち上げで入手出来るのが10個以下。しかもその後打ち上げを重ねるごとに入手出来る数はどんどん減っていき、100個入手するだけでも一苦労です。果たしてこんなモノで一体どうやって生産ラインを作るんだと思ってしまいますが、アルコスフィアには唯一無二のとても変わった特徴があります。
 そう、使っても無くならないのです。

Space Exploration攻略 ~アルコスフィア8変化

 アルコスフィアは使っても無くならず、代わりに状態の変化が起こります。アルコスフィアの状態は8つのギリシャ文字(λ、ξ、ζ、θ、ε、φ、γ、ω)で表され、例えば、λアルコスフィアと何かの素材を原料にアイテムを作ったら、そのアイテムに加えてξアルコスフィアが吐き出されることで、トータルのアルコスフィアの数は変わらない、といったイメージです(実際のレシピはそんな生優しいものでは無いですが)。
 実際のレシピには、必ず2種類以上のアルコスフィアが別の2種類以上のアルコスフィアに変換されるようなものしかなく、かつ、あるレシピで発生した変換の丁度逆の変換を行うようなレシピは存在しないようになっています。そのため、何かを作成してアルコスフィアの数の割合が変わってしまった場合に、元の個数に戻すのはとても大変です。

上記の例では、空間梱包データというアイテムを作るために、
λスフィアとξスフィアが、ζスフィアとθスフィアに変換されてしまっています。
アルコスフィア変換は10パターン用意されていますが、どれを何回やれば元の数に戻るかを求めようにも、組み合わせ爆発が起こってしまい容易ではありません。

 こんなの、どうやってラインを組めばいいんだ…?これまでとのあまりの勝手の違いに、きっとあなたは絶望したことでしょう。しかし安心してください。人類の英知は、この悪辣なアルコスフィアに対抗する術を持っているのです。
 それは、あなたが嘗て学校で学び、そして人によっては、今では埃を被った記憶の一つとなっているかもしれません。今こそ思い出す時です。その鍵の名前は、線形代数!

自分よりちょっと先行していた友人I氏から届いた恐るべきチャット
ゲームの話してて線形代数って単語が出てくるの、人生で二度と経験しないと思う


Space Exploration攻略 ~Factorioで学ぶ線形代数

 注意:このセクションには、行列・Rank・階数因数分解等の数学用語がふんだんに含まれ、該当アレルギーの方にはたいへん危険な内容となっております。おれは結果が分かればそれでいいから……という方は、セクションの最後の方に出てくるスプレッドシートまでスキップすることをお勧めします。

 アルコスフィアの困ったところは、アイテムを作った際に発生したアルコスフィアの個数の変化を戻す方法が分からないという点でした。もし、線形代数を使って、アイテムを作ったときの変換の逆変換を行う方法が導き出せたら……アルコスフィアの個数のバランスが永続的に保たれ、必要なアイテムを作り続けることが可能となります。
  アルコスフィアの秩序を保つ鍵、それはアルコスフィアを変換するためだけに用意された10種類のレシピです。まずは、それぞれの変換レシピを実行した場合のアルコスフィアの個数の変化を、8×1の行列で表してみましょう(1行目から、λ・ξ・ζ・γ・θ・ω・ε・φの順で個数の変化を表す行列とします)。例えば、「アルコスフィアフォールディング:ωλからξθ」の場合、λアルコスフィアとωアルコスフィアが1つずつ減って、ξアルコスフィアとθアルコスフィアが1つずつ増えるため、個数の変化は下記で表されます。

$${a_{1}={\begin{pmatrix}-1\\ 1\\0\\0\\1\\-1\\0\\0 \end{pmatrix}}}$$

続いて、他の9種類の変換についても同様に行列で表し、それらを横に並べて、1つの行列Aとして表します。

$$
\begin{array}{}A&=&{\begin{pmatrix} a_1&a_2&a_3&a_4&a_5&a_6&a_7&a_8&a_9&a_{10} \end{pmatrix}}\\&=&{\begin{pmatrix}-1&1&0&-1&0&0&0&1&-1&1\\1&-1&-1&0&0&0&1&0&-1&1\\0&1&-1&1&0&-1&0&0&1&-1\\0&-1&0&0&0&1&-1&1&1&-1\\1&0&1&-1&-1&0&0&0&1&-1\\-1&0&0&0&1&0&1&-1&1&-1\\0&0&0&1&-1&1&0&-1&-1&1\\0&0&1&0&1&-1&-1&0&-1&1 \end{pmatrix}}\end{array}
$$

 この8×10の行列Aに、各変換の実行回数を表す10×1の行列(ここではxとします)を右から掛けることで、xの操作を実行した場合のアルコスフィアの変化数を表す行列(ここではbとします)が求められます。

$${Ax=b}$$

例えば、「アルコスフィアフォールディング:ωλからξθ」を1回、「アルコスフィアフォールディング:ξζからθφ」を1回実施する場合、$${x=\begin{pmatrix} 1\\0\\1\\0\\0\\0\\0\\0\\0\\0\end{pmatrix} }$$となるため、

$$
\begin{array}{}
b&=&Ax\\&=&{\begin{pmatrix}-1&1&0&-1&0&0&0&1&-1&1\\1&-1&-1&0&0&0&1&0&-1&1\\0&1&-1&1&0&-1&0&0&1&-1\\0&-1&0&0&0&1&-1&1&1&-1\\1&0&1&-1&-1&0&0&0&1&-1\\-1&0&0&0&1&0&1&-1&1&-1\\0&0&0&1&-1&1&0&-1&-1&1\\0&0&1&0&1&-1&-1&0&-1&1 \end{pmatrix}} \begin{pmatrix} 1\\0\\1\\0\\0\\0\\0\\0\\0\\0\end{pmatrix}\\
&=&\begin{pmatrix}-1\\0\\-1\\0\\2\\-1\\0\\1\end{pmatrix}
\end{array}
$$

となり、λ・ζ・ωが1つずつ減り、代わりにθが2つ、φが1つ増える変化が起こることが計算で求められます。


※2024/4/10追記:記事を見た方から、上記例のxが8行しかないとご指摘を頂き10列に修正しました。ご指摘ありがとうございました。何度も読み返していたのに半年以上気付かなかったなんて…!

ちなみに、Noteでデカい行列書こうとするとこのような地獄になります


 さて、ここからが本題となるのですが、今度は逆に、特定の変化を起こすための各変換の実行数を求めてみます。このような場合、普通は上記の式にAの逆行列$${A^{-1}}$$を両辺に掛けて、bの値からxが求められるようにします。

$${x=A^{-1}b}$$

しかしここで問題があります。上記で求めたAは正方行列でなく、かつRankが行の数より少ない(計算は後述)ため、通常のやり方(我々が逆行列の求め方として最初に習うやり方)ではAの逆行列を求めることができません。
 そこで、正方行列でなかったり、Rankが足りてなかったりする場合でも使える、一般逆行列$${A^{+}}$$というものを用います。

というわけで、Aの一般逆行列を求めてみましょう。

  • 行列を既約行階段形に変形します。Aの既約行階段形をBとすると、Bは下記となります。

$${B={\begin{pmatrix} 1&0&0&0&0&-1&0&0&0&0\\0&1&0&0&0&-1&0&0&0&0\\0&0&1&0&0&0&0&-1&0&0\\0&0&0&1&0&0&0&-1&0&0\\0&0&0&0&1&-1&0&0&0&0\\0&0&0&0&0&0&1&-1&0&0\\0&0&0&0&0&0&0&0&1&-1\\0&0&0&0&0&0&0&0&0&0\end{pmatrix}}}$$

  • Bの中の非ピボット列と同じ位置の列を元のAから除いた行列C、Bの中のゼロ行をBから除いた行列Fを求めます。このとき、$${A=CF}$$となります。これを階数因数分解というそうです。

$${C={\begin{pmatrix}-1&1&0&-1&0&0&-1\\1&-1&-1&0&0&1&-1\\0&1&-1&1&0&0&1\\0&-1&0&0&0&-1&1\\1&0&1&-1&-1&0&1\\-1&0&0&0&1&1&1\\0&0&0&1&-1&0&-1\\0&0&1&0&1&-1&-1\end{pmatrix}}}$$,

$${F={\begin{pmatrix}1&0&0&0&0&-1&0&0&0&0\\0&1&0&0&0&-1&0&0&0&0\\0&0&1&0&0&0&0&-1&0&0\\0&0&0&1&0&0&0&-1&0&0\\0&0&0&0&1&-1&0&0&0&0\\0&0&0&0&0&0&1&-1&0&0\\0&0&0&0&0&0&0&0&1&-1\end{pmatrix}}}$$

  • Aの一般逆行列$${A^{+}}$$が、$${F^T(FF^T)^(C^TC)C^T}$$という超めんどくさい計算で算出できます。$${C^T, F^{T}}$$はC・Fの転置行列です。なんでこれで出せるのかは分かりません(Wikipediaさんが言ってた)。

$$
\begin{array}{}
A^+&=&{F^T(FF^T)^(C^TC)C^T}\\
&=&\frac{1}{16}\times{\begin{pmatrix}-3&3&1&-1&3&-3&-1&1\\3&-3&3&-3&1&-1&1&-1\\-1&-3&-3&-1&3&1&1&3\\-3&-1&3&1&-3&-1&3&1\\-1&1&-1&1&-3&3&-3&3\\1&-1&-3&3&-1&1&3&-3\\1&3&-1&-3&1&3&-1&-3\\3&1&1&3&-1&-3&-3&-1\\-1&-1&1&1&1&1&-1&-1\\1&1&-1&-1&-1&-1&1&1\end{pmatrix}}
\end{array}
$$

 このページだけ見た方、これがゲーム攻略記事だって信じてくれますかね?ともあれ、ここまで求めたらあと一歩です。無事、Aの一般逆行列が求められたので、任意の個数変化$${b}$$を実現するために、どのような変換$${x}$$を実行すれば良いかが、$${x=A^+b}$$にて求められるようになりました。
 あとはアルコスフィアを使う各レシピに対して、逆の変換を行う回数を求めていくのですが、正直、レシピの数が多くて大変ですよね(データカードに至ってはランダムで出力が切り替わるので実質レシピ2つ分だし)。
 ……と言うわけで、出来上がったものがこちらになります。上記の仕組みをスプレッドシートに実装しました(※)。ここまで頑張って読んでいただいた方には大変恐縮なのですが、ぶっちゃけこいつさえ使えればこのセクションは合格です。

 ~使い方~

  1. 上記のリンクは読み込み専用なので、まずは自分のグーグルドライブにコピーします。

  2. Q12~AC12のセルに、レシピの実行数を入力します(例えば、ワームホールデータの逆変換を求めたい場合は、AC12セルに1を入力します)

  3. C13~L13のセルに、2.で入力したレシピの逆変換を行うための、各変換処理の必要実行回数が出力されます。ただし、実行回数が整数でなかった場合、M13セルに入力全体の実行回数が出力されます(例えば、計算の結果、いずれかの変換処理の実行回数が1/4回だった場合、2.のレシピ全体を4回実施することで帳尻を合わせる必要があるため、M13には4と出力されます)。

(※) 実装したのは、記事で度々出てくる友人I氏です。公開の許可も快く頂けてマジで感謝です。
 さらには、この記事の執筆のために、全然理屈を知らなかった自分のために、Discordで約2時間の線形代数講座もやってくれました。多分聖人なんだと思います。


Space Exploration攻略 ~アルコスフィア実装編

 前セクションによって、アルコスフィアを使ったレシピを実行した際に変化してしまったアルコスフィアの数を元に戻すことが出来るようになりました。しかし、アルコスフィアの厄介ポイントはまだまだ終わりではありません。元に戻す方法が分かったとしても、工場ラインへの実装もまた中々大変なのです。
 というのも、通常の工場では基本的に、それぞれのアイテムの製造ラインは各々が勝手に動作しており、ライン間で正確に動作を同期させなければならないシチュエーションはあまりないでしょう。
 しかし、アルコスフィアを用いる場合、あるアイテムをN個作ったら、元に戻すための処理をM回実施するといったように、製造ライン間で製造する順序や回数を細かく制御しなければなりません。ここの実装方法は色々やり方があるかと思いますが、私の場合は以下のように、回路をゴリゴリに使ってライン間の動作の同期をとるシステムを構築しました。

アルコスフィアを使うラインの場合、受注生産が必要になります

 私の設計がスマートで無かったのかもしれませんが、いざ実装してみると余裕で条件回路の数が三桁いきました。これまで培ったノウハウと、これまでとは全く違ったアイデアが同時に求められる難題ですが、上手く動いたときの感動もひとしおなので挫けずに頑張ってください。

Space Exploration攻略 ~ラストミッション:スペースシップで突き抜けろ

 プレイヤーに数学知識を要求してくる異次元の難敵、アルコスフィアを乗り越えたあなたは、ついに最終ミッションに挑むこととなります。長い長い研究ツリーの集大成たるラスト1ピース、ネクサスを搭載した宇宙船で、速度250以上の走行を10分間キープしなければなりません。
 宇宙船の速度を250以上に保つこと、それ自体はそれほど難しいことではありません。最低限の機能を備えた工場長輸送用の宇宙船程度であれば、反物質エンジンを17, 8台くらい取り付ければ達成できるでしょう。しかし、この銀河系脱出ミッションの最も狂っているポイントはただ1点、ネクサスの要求してくる消費電力が、星を丸々工場化した規模にも匹敵する、6GW/sに及ぶことです。
 6GW/s。この出力を得るには、まず高温タービン発電機が最低6台必要となります。そして、それだけのタービンに蒸気を供給しようとすると、高温熱交換器がその倍程度、タービンから出た蒸気を水に戻すのにも大量の復水タービンを接続しなければなりません。さらになによりも、熱交換器に莫大な熱を供給するための手段が必要となります。普段、熱の供給に於いてはエネルギービームが圧倒的な使い勝手の良さを発揮しますが、複数台並べないと、とてもじゃないですが熱を賄いきれず、さりとてエネルギービーム受信機のデカさは複数台並べるためには致命的となります。この場面に於いては、エネルギービームと同等の出力を遥かに省スペースで実現する、反物質反応炉を用いるのが良いでしょう。
 さて、一旦ここまでの設備を並べてみましょう……タービン6台に熱交換器が12台、復水タービンはさらに倍の24台くらいか。。で、熱交換器と接続する反物質反応炉も6台くらいっと……いやいや、これ、デカ過ぎんだろ……!

ウチの船(抜粋)
Shield Projectorの電力分も入れたら結局タービン7台くらいになった

 この時点で既に引くほどデカいですが、船がデカいということは、その分大量のエンジンも必要となります。そして、速度250で大量にぶつかってくるであろう隕石から船を守るために、巨大な船体をShield Projectorで3重くらいでカバーしなければなりません。
 最終的には、私の設計した船は以下の構成となりました。

  • 高温タービン発電機:7台

  • 高温熱交換器:12台

  • 復水タービン:24台

  • パイプ:大量(タービンからの排水が滞り無いように、タービンの間隔を十分に開けてパイプを太く通し、全力で排水)

  • 反物質エンジン:41基

  • Shield Projector:24台

  • ネクサスや制御盤、ブースタータンクなど諸々

  • 上記を全て搭載するために必要な船体応力:4457

 船体応力4500弱…つまり、宇宙工船7まで研究をしなければなりません。本ミッションの一番の肝は、まさにこの事前のレベル上げ作業になります。
 数十k消費するレベルの深宇宙研究をこなすには大規模なナクイウム処理をこなす必要があり、その過程であらゆる物資が足りなくなることでしょう。しかし、必要な物資を求めて星々をリサーチし、拠点を拡大し、それらを繋ぐネットワークを形成する。今やそのすべてのプロフェッショナルとなったあなたならば、きっと成し遂げられることでしょう。

最終的には、15以上の拠点をロケットやデリバリーキャノン、
そして10台以上の宇宙船でつなぐ巨大ネットワークとなりました


 ……必要な研究を終え宇宙船製造も完了。全ての準備が整い、いよいよ打ち上げの時がきました。

3… 2…1…
Booster ignition, and lift off!

あなたの銀河系脱出が大成功することを祈っています!

Space Exploration攻略 ~おまけ : アルコリンク貯蔵庫について

 前節にて本編攻略は以上となりますが、苦戦ポイントがまだあったことを思い出したので、最後に一つだけ補足します。スキルツリーのマジの果ての果てにある、アルコリンク貯蔵庫の使い方についてです。
 まず、こいつは表記ミスを疑ったレベルなのですが、本来消費されないはずのλアルコスフィアを1個作るのに10個も消費します。後述により、最低2個は作らないと意味が無いので、それだけで20個の消費となります。
 ただ、その分効果はチート級と言っても差し支えなく、同じ番号でリンクされた貯蔵庫間の距離がどれだけ離れていようと、それこそ銀河の端と端ほど離れていようと、貯蔵庫に入れたアイテムが、瞬時に貯蔵庫間で共有されます。しかし置き方には少々コツが必要で、置いた瞬間に置いた場所の天体によってリンクIDが自動で割り当てられてしまうので、例えば天体AとBの間でアイテムを共有したい場合、天体Aに1つ目の貯蔵庫を、天体Aにドッキング中の宇宙船上に2つめの貯蔵庫を置き(この瞬間、2つの貯蔵庫のリンクIDが同じになる)、宇宙船を天体Bまで飛ばし、天体Bに着いたら宇宙船を解体する、といった手順が必要となります。このとき、天体B上で貯蔵庫を置きなおしてしまうと、せっかく同じにしたリンクIDがまた変わってしまうので、くれぐれも注意してください。
 このように、アルコリンク貯蔵庫そのものが非常に貴重であるだけでなく、設置も超面倒なので、ここぞという場面に使うようにしましょう。

Space Exploration攻略 ~最後に

 さて、どうしてもアルコリンク貯蔵庫について言及したかったので差し込みましたが、今度こそ最後です。

 Space Explorationによる宇宙の旅、いかがだったでしょうか。正直とんでもない沼にみなさんを引き込んだ自覚はあるのですが、この沼の恐ろしいほどの奥深さ、危険な魅力の一端でも伝えることが出来たなら本望です。
 ゲームはこれにてクリアとなりますが、アイデアと想像力のある限り、工場の可能性は無限大です。皆さんの心の中の理想の工場が、SpaceExprolarionで実現できることを心から願っています!


Factorioで宇宙を探検しよう 〜完〜






:
:
:
:
:
……いや、待てよ。まだ何か、やり残した事があったような……?

第二部 : Factorioで宇宙の謎を解き明かそう
に続く……!


この記事が気に入ったらサポートをしてみませんか?