私は現在、ゲームの最近導入された部分、つまりギャリソンミッションを最適化するために、LUAでWorld ofWarcraftのプラグインを開発しています。
ウォークラフト駐屯地(基本的にはプレイヤーの要塞)には、フォロワーを割り当ててミッションに参加させることができる場所があります。これらのミッションが成功すると、フォロワーはある程度の経験を積むことができ、少額のお金からあなたやあなたのフォロワーのための強力な装備まで、わずかな報酬が得られます。駐屯軍には20〜25人のフォロワーがおり、1日あたり約25〜30のミッションから選択できます。
ミッションには次の属性があります。
フォロワーには次の属性があります。
私がいくつかから理解していること Gamedev.SEとの簡単なチャット 、これは基本的に ビンパッキング問題 であり、ミッションはパッケージであり、フォロワーはビンです。ただし、この場合、ビンは組み合わせることができ、サイズが異なります。
私が探しているアルゴリズムは、最短時間で次のことを行うことを目的としています。
おそらくブルートフォース攻撃は可能ですが、もう少し洗練されたソリューションを望んでいます。
これにはどのアルゴリズムを使用する必要がありますか?
この種の問題についてのことは、解決策が完璧である必要はないということです。多くの場合、合理的なヒューリスティックと最適なソリューションの違いはごくわずかです。
したがって、欲張りアルゴリズムから始めてください。最初に最高のペイオフでミッションを並べ替え、最初のミッションに可能な限り最高のフォロワーのセットを割り当て、次に2番目のミッションに残りのフォロワーの可能な限り最高のセットを割り当てます。 「最高」とは、オーバーマッチでもアンダーマッチでもないことを意味します。これは基本的に、ほとんどのプレーヤーが手動で割り当てを行う方法です。
次に、バックトラックして2番目に良いセットを最初のミッションに割り当て、それが全体的なスコアを改善するかどうかを確認し、次に2番目に良いセットを2番目のミッションに割り当てます。次に、2つのミッション、次に3つのミッションなどのさまざまな組み合わせに設定された次善の策です。次に、3番目に良いセットで繰り返します。基本的に、可能な割り当ての幅優先探索。
あなたが見つけなければならないのは、検索ツリーのほんの数層の深さの後、改善がどんどん小さくなり始めるということです。絶対スコアの特定のしきい値を超えた後、反復間のスコアの差の特定のしきい値を下回った後、または特定の制限時間の後に、それを切り取ります。