web-dev-qa-db-ja.com

ビンパッキング問題のより複雑なバージョンに使用できるアルゴリズムは何ですか?

私は現在、ゲームの最近導入された部分、つまりギャリソンミッションを最適化するために、LUAでWorld ofWarcraftのプラグインを開発しています。

ウォークラフト駐屯地(基本的にはプレイヤーの要塞)には、フォロワーを割り当ててミッションに参加させることができる場所があります。これらのミッションが成功すると、フォロワーはある程度の経験を積むことができ、少額のお金からあなたやあなたのフォロワーのための強力な装備まで、わずかな報酬が得られます。駐屯軍には20〜25人のフォロワーがおり、1日あたり約25〜30のミッションから選択できます。

ミッションには次の属性があります。

  1. 90から100までのレベル。
  2. (レベル100ミッションの場合)15ステップの615から645までの機器レベル。
  3. フォロワーを送るための1から3のスロット。
  4. 0から6のミッションの脅威。脅威には約10のカテゴリがあり、その名前は関係ありません。関連するのは、フォロワーがこれらの脅威に対抗できる1つまたは2つの能力を持つことができるということです。ミッションは同じ脅威を2回持つ可能性があります。
  5. このミッションが発生するゾーンタイプ。
  6. このミッションが戦っている敵のタイプ。
  7. 期間。

フォロワーには次の属性があります。

  1. フォロワーの種族。
  2. 90から100までのレベル。同等以上のレベルのフォロワーは、ミッションの成功にさらに貢献します。ミッションのレベルより1レベル下のフォロワーは効果が低くなりますが、それでも効果はあります。ミッションのレベルより2レベル以上低いフォロワーは、ミッションの成功に影響を与えず、脅威に対抗することはできません。
  3. (レベル100から開始)600から655までの機器レベル。通常のレベルと同様に、同等以上の機器レベルのフォロワーがより効果的です。
  4. ミッションの脅威のカウンターとなる1つまたは2つの能力。対抗する脅威は成功の可能性を高めます。すべての脅威が同等のより高いレベルのフォロワーで対抗された場合、ミッションは100%成功する可能性があります。フォロワーは、同じ脅威に対抗する2つの能力を持つことができます。
  5. 特定のミッション条件で成功ボーナスのわずかなチャンスを与えることができる1、2または3の特性。これらはフルカウンターほど多くのボーナスチャンスを与えませんが、最適化するのに役立ちます。特性は、ゾーン、持続時間、または敵のタイプに対抗できます。また、同じミッションで特定のタイプのフォロワーがいることに対してボーナスを与えることも、常に成功するチャンスを与えることもできます。

私がいくつかから理解していること Gamedev.SEとの簡単なチャット 、これは基本的に ビンパッキング問題 であり、ミッションはパッケージであり、フォロワーはビンです。ただし、この場合、ビンは組み合わせることができ、サイズが異なります。

私が探しているアルゴリズムは、最短時間で次のことを行うことを目的としています。

  1. 成功の100%の確率でミッションの量を最大化します。
  2. 100%の可能性がない各ミッションの成功の個々の可能性を最大化します。

おそらくブルートフォース攻撃は可能ですが、もう少し洗練されたソリューションを望んでいます。

これにはどのアルゴリズムを使用する必要がありますか?

3
Nzall

この種の問題についてのことは、解決策が完璧である必要はないということです。多くの場合、合理的なヒューリスティックと最適なソリューションの違いはごくわずかです。

したがって、欲張りアルゴリズムから始めてください。最初に最高のペイオフでミッションを並べ替え、最初のミッションに可能な限り最高のフォロワーのセットを割り当て、次に2番目のミッションに残りのフォロワーの可能な限り最高のセットを割り当てます。 「最高」とは、オーバーマッチでもアンダーマッチでもないことを意味します。これは基本的に、ほとんどのプレーヤーが手動で割り当てを行う方法です。

次に、バックトラックして2番目に良いセットを最初のミッションに割り当て、それが全体的なスコアを改善するかどうかを確認し、次に2番目に良いセットを2番目のミッションに割り当てます。次に、2つのミッション、次に3つのミッションなどのさまざまな組み合わせに設定された次善の策です。次に、3番目に良いセットで繰り返します。基本的に、可能な割り当ての幅優先探索。

あなたが見つけなければならないのは、検索ツリーのほんの数層の深さの後、改善がどんどん小さくなり始めるということです。絶対スコアの特定のしきい値を超えた後、反復間のスコアの差の特定のしきい値を下回った後、または特定の制限時間の後に、それを切り取ります。

4
Karl Bielefeldt