その他
Factorioの品質問題を解決する
Solving Factorio Quality (exyr.org)
要約
Factorioの拡張パック「Space Age」で導入された品質システムは、アイテムの品質ティアを向上させるために品質モジュールとリサイクラーを組み合わせる複雑な計算を必要とします。この記事では、この品質向上プロセスを確率論と線形代数(特に行列演算)を用いてモデル化し、多段階の生産チェーンにおける最終製品の品質分布を予測する方法を解説しています。これにより、プレイヤーはより効率的な工場設計のための計画ツールを開発できるようになります。
全文翻訳
私はFactorioを普通のやり方でプレイしています。工場を計画するために線形代数のコードを書くのです。しかし、それは後で説明します。あるいは、TL;DR(長すぎるので要約すると)、私の新しいオンライン計算ツールをご覧ください。
Factorioの紹介と品質
Factorioは、リソースを採取し、それらを組み合わせてますます複雑なアイテムをクラフトすることで、より洗練されたクラフトを可能にするという、ファクトリーゲームのジャンルをほぼ確立しました。ここまではMinecraftや他の多くのサバイバルゲームと似ていますが、ファクトリーゲームを特徴づけるのは自動化への焦点です。やがて、クラフトのほとんどはキャラクターが「手作業」で行うのではなく、ますます多くの機械によって行われるようになり、コンベアベルトのような様々な形態のロジスティクスが、機械間や必要な場所へアイテムを移動させます。一部のファクトリーゲームはさらに進んで、プレイヤーキャラクターを完全に排除します。
ゲーム内で「テクノロジー」がアンロックされるにつれて、Factorioは生産を改善するための多くのメカニズムを提供します。その一つがモジュールです。クラフトマシンには、そのステータスに影響を与える様々なモジュールを受け入れるための(限られた数の)スロットがあります。スピードモジュールは、より多くのエネルギー消費を犠牲にしてマシンを高速化します。プロダクティビティモジュールは、スピードとエネルギーの消費を犠牲にして、同じ材料からの収率を向上させます。
2024年にリリースされたSpace Age拡張パックは、品質を含む新しいゲームメカニクスを追加しました。すべてのアイテムとレシピには、⚀ノーマル、⚁アンコモン、⚂レア、⚃エピック、⚄レジェンダリーの5つの品質ティアがあります。アイテムによっては、各ティアがクラフトマシンの速度を向上させたり、プロダクティビティモジュールの生産性を高めたりするなど、ステータスを向上させます。高品質のアイテムは同じ品質の材料から直接クラフトできますが、品質を向上させる唯一の方法は、新しい品質モジュールを使用することです。品質モジュール自体にも品質があります。
Factorio wikiより
モジュールは、品質が上昇する確率QQに影響します。特定のクラフトにおいて、最初のティア以降の各品質ティアの上昇は、さらに10%の確率で発生します。入力品質に応じて出力品質の確率の表を作成できます。
Factorio wikiより
例えば、4つのモジュールスロットを持つマシンで可能な最大品質上昇確率は24.8%です。ノーマルからレジェンダリーへの一回のジャンプは、わずか0.0248%の確率です。
Source: Factorio wiki
一部のプレイヤーは、ほとんど決定的だったゲームにランダム性が導入されたことを嫌っていますが、十分な繰り返しがあれば、確率は比率になります。確率はバランスが取れており、複数のクラフトステップ(それぞれが品質ジャンプの可能性を秘めている)があっても、高品質のアイテムを得るには、必然的に多くの望まない低品質のアイテムもクラフトすることになります。
ストレージがいっぱいになって工場が停止するのを避けるために、Space Ageはリサイクラーも導入しました。これは、任意のアイテムを破壊し、(通常は)その材料の25%を返却する新しいマシンです。これにより、プレイヤーは、より多くの材料を消費するコストで、アイテムが望ましい品質に達するまで、品質モジュールを使用してループでクラフトとリサイクルを行う「アップサイクリング」装置を設計できるようになります。
Source: Factorio blog
工場計画ツール
一部のビデオゲームは、ゲーム外でプレイされることがあります。Blue Prince はプレイヤーに見たものすべてについて詳細なメモを保持することを期待していますが、ゲーム内メモ帳や同様のツールは提供していません。ファクトリーゲームは、リソース会計のための大規模なスプレッドシートの構築に適していますが、少数のプレイヤーは、スプレッドシートでは工場計画には十分ではないと判断し、ゲームの数学の多くを再現して生産チェーンを正確にモデル化する専用ツールを何時間もかけてプログラミングしています。
Factoriolabでの生産チェーンの例
ファクトリーゲームでは、これらはすべてオプションであり、耳で聞いて、何かが不足しているのを見て、より多くを構築するだけでプレイすることは完全に可能です。しかし、私は事前に計画するのが好きです。各種類のマシンがいくつ必要か?どれくらいの収率が期待できるか?ボトルネックはどこか?品質アップサイクリングのループ構造は、これを推測したり、既存のツールで計算したりすることを特に困難にしています。
線形代数
想像してみましょう。任意の生産チェーン(品質モジュールが含まれる可能性がある)から得られるいくつかの材料(例えば鉄板)。各材料は、⚀ノーマル、⚁アンコモン、⚂レア、⚃エピック、⚄レジェンダリーの各品質ティアにある確率を持っています。
すべての材料を(例えばパイプのような)ある製品にクラフトするために、各レシピティアのアセンブリマシンが十分にあります。これらのマシンには品質モジュールがあり、品質上昇確率は10%になります。一つのアイテムの可能な運命を追跡してみましょう。
あるティアの製品は、同じティアまたはそれ以下の材料から得られます。この結果の総確率は、特定の品質ジャンプのパーセンテージ確率と、そもそも対応する材料ティアを持つ確率の(独立した)確率の合計です。
p⚀ = i⚀ ⋅ 90%
p⚁ = i⚀ ⋅ 9% + i⚁ ⋅ 90%
p⚂ = i⚀ ⋅ 0.9% + i⚁ ⋅ 9% + i⚂ ⋅ 90%
p⚃ = i⚀ ⋅ 0.09% + i⚁ ⋅ 0.9% + i⚂ ⋅ 9% + i⚃ ⋅ 90%
p⚄ = i⚀ ⋅ 0.01% + i⚁ ⋅ 0.1% + i⚂ ⋅ 1% + i⚃ ⋅ 10% + i⚄
(パーセント記号は100で割ることを暗黙的に意味すると考えることができます。したがって、「〜のパーセント」は乗算と同じです。)
ここでは、パーセンテージ係数は、ウィキの品質ジャンプ確率表と比較して対角線上で転置されているように見えますが、それは製品ティアを垂直に配置したためだけです。代わりに、同じアイテムの異なるティアの確率を、行ベクトルにグループ化しましょう。
product = (p⚀ p⚁ p⚂ p⚃ p⚄)
ingredient = (i⚀ i⚁ i⚂ i⚃ i⚄)
これで、線形方程式のシステムを、ウィキの表に一致する遷移行列を掛けたベクトルとして表すことができます。
products = ingredients ⋅ Tquality(10%)
Tquality(q) = (
1-q, 9q/10, 9q/100, 9q/1000, q/10000
0, 1-q, 9q/10, 9q/100, q/100
0, 0, 1-q, 9q/10, q/10
0, 0, 0, 1-q, q
0, 0, 0, 0, 1
)
エッジケースとして、品質上昇確率がゼロの場合は、ティアの変換はありません。対応する遷移行列は単位行列です。
Tquality(0%) = I5
これは大きな進歩には見えないかもしれませんが、多段階プロセスは successive matrix multiplication を通じて計算できるようになりました。例えば、7.5%の品質確率で鉄鉱石を採掘し、5%の品質確率でそれを製錬して鉄板にし、10%の確率でパイプをクラフトします。プロダクティビティボーナスなしで、最終製品のこれらの確率は次のようになります。
pipe = (1 0 0 0 0) ⋅ Tquality(7.5%) ⋅ Tquality(5%) ⋅ Tquality(10%)
≈ (0.790875 0.174263 0.029678 0.004467 0.000719)
品質戦略
品質モジュールを可能な限り使用し、「Every tier Everywhere All at Once」に対処することは可能ですが、ここでは小さく自己完結したシステムに焦点を当てます。「ギャンブル」:リサイクルなしの機会的な品質
最も簡単ですが、最も効果の低い方法は、ノーマル品質の材料からクラフトすることです。