web-dev-qa-db-ja.com

遺伝的アルゴリズムはこの問題への正しいアプローチですか?

ビデオゲームで最大のダメージ出力を生成するアイテムのセットを計算しようとしています。約50種類のアイテムがあり、そのうち6つを選択できます。各アイテムが作成するさまざまな条件があります。私はアイテムに基づいてあなたのダメージを計算するjavascriptで小さなアプリを書いています。遺伝的アルゴリズムを利用して、どのアイテムの組み合わせが最も強いかを見つけることができますか?または、このサイズの問題に対してブルートフォースは許容されますか?または別の方法はありますか?

3
Shawn

50個のアイテムがあり、一度に6個持つことができます。つまり、_50 * 49 * 48 * 47 * 46 * 45 = 11,441,304,000_個のアイテムの一意の組み合わせがあります(私の計算は正しいと思います)。 nikie がコメントで以下に指摘しているように、アイテムの順序が重要でない場合(おそらくそうではない)、この数は50 * 49 * 48 * 47 * 46 * 45 / (1 * 2 * 3 * 4 * 5 * 6) = 15,890,700の組み合わせに減り、非常に扱いやすい量になります。これはブルートフォース毎回には少し多いかもしれませんが、一方で、アイテムが変更されない場合は、おそらく一度この計算を実行できますどこかに保存します(localStorageなど)。

遺伝的アルゴリズムは、ブルートフォースと比較して理想的なセットを提供するには時間がかかりすぎると思うので、ここではやり過ぎのようです。一度実行して保存することができないと仮定すると、クエリを実行する前にアイテムの順序を最適化し、弱い組み合わせのいくつかを削除し、実行する前にその数を少し減らすことができる方法があるかどうかを判断しますあなたのアルゴリズム。

7
Jimmy Sawczuk

ITは、問題の項目やその他の変数が何であるかによって異なりますが、おそらくここでヒューリスティックをうまく利用できます。

基本的に、統計の分布があなたのキャラクターと一致しないため、いくつかのアイテムをすぐに除外する方法がおそらくあります。次に、「最も重要な統計はダメージです(たとえば)、この統計を最大化するアイテムセットを計算することから始めましょう。次に、このセットのアイテムを以前に保持されていない他のアイテムと交換して、全体的なパフォーマンスが向上するかどうかを確認します。 "。

この種の問題に取り組む方法はたくさんありますが、遺伝的アルゴリズムはここでは少しやり過ぎのようです。あなたの問題に固有のより多くの情報を共有したいですか?たぶん私たちはあなたをより良く助けることができます!

実際、私がおそらくアプローチする方法は、すべてのアイテムの「スコア」を事前に計算し、それらを並べ替えて、6つの最高スコアを選択することです。

残りの回答は参考にしておきます。

4
pwny

a GAは、ブルートフォースが実用的でない場合の1つのアプローチです

ヒューリスティックの順列と効果の計算/シミュレーションも実行可能です。このアプローチには良い前例があります ダグラス・レナートがトラベラートーナメント用の船を設計するためにEuriskoを使用した

1
Steven A. Lowe

質問にはもう少し説明が必要だと思います。最大のダメージを与える50個のアイテムから6個のアイテムを選択することが重要な場合は、ダメージ能力の降順でアイテムを並べ替えて、上位6個を選択すると問題ありません。ただし、これらの6つのアイテムの選択にはさらに複雑な点があると思います。つまり、選択する各アイテムに関連するコストが発生する可能性があります。その場合、それはナップサック問題のように見え、あなたが説明した問題のサイズに対して、動的計画法を使用してすばやく処理することができます。ナップサック問題は次のとおりです。利益(あなたの場合はダメージ)を最大化し、特定のコスト(おそらくアイテムを選択するために利用可能な合計ポイント)を下回るためにナップサックを運ぶのに最適なアイテムのセット(合計50個のうち)は何ですか? )。あなたの場合-この数が6を超えると、正確に6つのアイテムに到達するまで、ダメージの少ないアイテムをドロップできます。これが最適なソリューションになることに注意してください。

0
akrishnamo