2026年7月1日水曜日

LOMの手持ちから可能範囲の上限攻撃力レシピをだす方法とか

LOMレシピ自動化してみようか?ってはなし

タイトル通りですが今回は制限強化の自動化をする場合どういう工程を考えるかなって話。 

条件とか

(武器鋭さx主原料鋭さ+武器重さx主原料重さ+武器腕力x主原料腕力+武器技巧x主原料技巧)÷128x {(成長抑制値+属性Lv合計) ÷ 成長抑制値}= 攻撃力

表記が長くなるので以降は基本武器側を大文字アルファベット・主原料側を小文字アルファベットで表します。

(Axa + Bxb + Cxc + Dxd)÷128x {(S+L) ÷ S}= 攻撃力

レジェンドオブマナにおける攻撃力計算は上記通り。

所持アイテムによって所持内で最も攻撃力が上がるパターンを提出する場合どういう処理をすれば良いか

組合せは主原料55種類・副原料120種類・各副原料は99個まで所持できる・投入順序性が必要・攻撃力最大時のレシピは保存しておく

なお、最大チャートは特定の副原料を100個以上使う場合もあるがあまりにも組み合わせが増えるので上限は99とする。

つまり所持数は「120x99=11880」

個の上限を99に制限しても組み合わせは「11880!/(99!)^120」。

更に、攻撃力が途中で伸びない場合「0~11880」の範囲で投入をやめるパターンがある。

既に肉の重複を抜いている状態かつ100以上アイテムを使うという想定を抜いて絞ってもこれなので総当たりは100%現実的じゃない。

なのでもう少し踏み込んでもっと上限を絞る必要がある。

どうすれば良いか

一旦思考停止するならBFを除くアルゴリズム

枝刈り、動的計画、分枝限定、貪欲→ビーム、山登り、焼きなまし、タブー(除外)、遺伝、粒子、蟻コロ


ただ、基本的に相性が悪い。

精霊を入れて抜けるまでレベルアップ判定があるので1回置きに切り取れず、積む検索なら数手先までをみてから枝を切り捨てる必要がある。

主原料特性もあってタブーの特定も大変だし、厳密性のある探査も厳しい。

例えば枝を切り落とすにしても鏡なしかつ材料が豊富というパターンもこのゲームの特性上多く

その場合に1レベル上げるのに下段ループの数十手が必要になり枝を切り落とすまでの範囲が広すぎる。

ビームにしても範囲が広すぎる。

じゃあ範囲を絞ろう

根本的に範囲を絞るべきであるのは確実でじゃあ範囲ってどれくらい絞るのか。

  • ベストパターンは共通化しても上限は600ステップ前後で強化上限に到達するのでそれより長いのは無駄
  • 鏡なしのパターンにしても最大でも1200ステップ前後なのでそれより長いのは無駄
  • 少なからず2000ステップを越えるようなパターンは全て打ち切るべき

上限探査を600~1500くらいまで絞ればまぁまぁアルゴリズムで絞れる気はします。

いやまぁ根本的に論理的に解けるパズルを総当たりするのが効率が悪いと言ったらそれはまぁそうですが。

なので更に上限を絞りましょう。

ベストパターンではそもそも100個を超えるパターンがあるのでアイテム豊富という状態を余り考慮しないで絞りましょう。

そもそもアイテムが充実してるという前提なら最適化した固定パターンを作ってあるのでそちらのほうが効率が良いです。

現実的条件は副原料の基礎エネルギーの範囲Lvを上限に処理を絞るくらいが丁度良いかと思います。

また、基本的に吸収の考慮もしません。

小ステップパターンにおいては吸収すると素材が減るわけで必要エネルギーも効率が悪いので。

上限は「9-9-9-9_9-9-9-9」が現実的です。

ここまで条件を絞ればかなり現実的になります。

エネルギーの上限は288と256です。

全てをアルゴリズムで解決させる前半の探査説明は将棋のルールを教えずに将棋として進めるパターンを探すみたいな無謀さでしたがやはりある程度はルールは流し込まないと良い結果が出ない。

副原料エネルギーを上限とするなら考慮ステップ範囲は8ステップ範囲です。

具体的には「輝きx4>補助SPx2>精霊>輝き」「輝きx4>補助SPx3>精霊金貨」これを最大パターンとします。

これくらいになればビームサーチなどの枝の切り落としがかなり効果的に機能するかと思います。

未来8ステップ以内にレベルアップしないパターンは全て枝を切り落としてOKとなります。

何故かというと本来デメリットの切り落とした枝の先にある更に良い未来の可能性は存在しない為です。

探査範囲についてもう少し言えば、8ステップxLv9x8属性=576ぐらいが上限としてベターかなと思います。
まぁ、低Lvは直ぐ上がるので実際には更に少ないステップで打ち切って良い。

Lv9が上限の基礎強化は150ステップ前後で強化上限になるのでなんなら200ステップくらいで打ち切っても良いと思っています。

評価方法を考えよう

さて、ここまで上限切りの話で、次に評価方法です。

最初に示した通り式は「(Axa + Bxb + Cxc + Dxd)÷128x {(S+L) ÷ S}」です。

これをはつまり「性能積和x倍率」という式です。


この2つのうち最善仕上げも公開済み通り補正最大パターンは固定です。

そして性能積和補正は属性Lv上昇より上昇率が高い。


基本システムでも説明していますが、属性Lvを少し上げるくらいなら僅か5ステップで終わるこれだけで良いです。

なので先に持ってる副原料で最も情報補正が高いアイテムを先に確保します。


次に1レベル毎上昇率を確定。端数は消えるので出来れば55程度の平均を生成。

攻撃力は初期値と係数Kで決まるので単純に伸びが良いだけだけではダメ。

例えば初期値はアダマンタイトが大きいがディオールなどは初期値が低くても係数で最終攻撃力が上回る。

逆に言えば比較時にABで初期値が低く係数も低ければその時点で除外出来ます。


Kの基本値が決まればあとは何レベル上げられるだけが問題になる

アイテムが充実なら基礎パターンを当てれば良いが抵抗値の必要Eは2倍になる関係上「ただ攻撃力を上げる」だけならばどれか属性1つを上げるより平均的にレベルを分配した方が良い。

更に言えば、未来性=再強化を可能にするかという視点もある。

基本システムで説明している通り、属性ロックがある為、もし未来性を残すなら平均分配よりも対抗属性は強化しない方が良い。


ただ、今回の目的はただ手持ちのアイテムでどれくらい強くできるかなのでそれは無視。

使い捨て前提で持ってる副原料で極力最大になる様にするのが恐らくベスト。


属性Lvに関係するのは素材一覧にまとめてある通りだけど、単なるスライドとエネルギーとしある程度は総当たりしてよい。

まとめ

  • ステップ上限は600で打ち切り
  • 上限を256・288までにして吸収を考慮しない
  • 仕上げの上昇率・1Lv毎上昇率と初期値が評価値になる
  • 属性レベルは平均的に上がるパターンを優先する
  • 攻撃力を直接比較するのではなく係数とLv合計

評価でなんで攻撃力をみないかというと性能基準値が一時的に低下して攻撃力が下がっている可能性がある。なので初期値と上昇率での評価が必要。

補足

・「今あるものだけで強化する需要」限定とする

・基礎強化パターンを目的に副原料を少し集めた方が最終的にたぶん効率が良いが目を瞑る。

・強化結果の補足としては仕上げ最適解の副原料をすすめる。各強化パターンの上限攻撃力を補足。

・シミュレーターに実装してある、無属性・補助なしALL5・基礎E・クイック999の手順のアイテム集める方が最終効率は良くなる

何で今まで作らなかったの・・・?

構想自体はまぁあるにはあったのですがそもそも今まで作ってなかったのはまず手持ち全アイテムを入力が面倒くさいという所。
次に本文でも書いてますが効率が悪いからで、普通に作成済みの手順のアイテムを集めた方が作る時ものちのプレイ効率も良いから。
根本的な話をすれば仕組みはパズルみたいなものなので総当たりなんて事をせずとも仕組みさえ理解してれば手持ちから普通に順序だてて最良パターン作れるから。
そしてそれらの理由から需要は低そうだなって思っていたから。

じゃあなんで纏めたのかと言えばどうやら需要があるかもしれないみたいなのを感じたので自分ならどんな感じに仕様を落とし込むかなって一旦メモ書きみたいな?