0

この実際的な問題についてコメントをいただければ幸いです。

簡単な説明。 特定のベルト幅を構成するために使用できる可変数のリンクがあります。問題は、各リンクの数です。選択基準: より長いアイテムを使用することをお勧めします。

例。 ベルト幅 W = 1024.0 を作成したいとします。モデルの 1 つは、次のリンクの長さを持っています: L = [34.0, 65.0, 96.0, 126.0]

問題は、幅を作るために各リンクの数です。

ここに私が試したいくつかのアプローチがあります。

1. 貪欲 (条件を満たすために最長の最初のものを選択) c = [0,0,0,8] ここで、c は各項目のカウントです。これは 16.0 のギャップを残し、最小のアイテムの 1 つでも収まりません。貪欲は簡単ですが、良くありません。

2.選択ループ 簡単すぎず、難しい問題だと思います。私は多くの戦略を試しました。小さなアイテムを詰めてから、次のサイズに合わせて順番に削除します。

3. ナップザック方式 これはアイテム数が決まっているためあまり適切ではありません。

4. 部分和問題 これは Knapsack のサブクラスですが、私はそれを機能させることができませんでした。

5. Bin Packing problem 似ているように聞こえますが、私の問題には当てはまりませんでした。

6. ブルート フォース (ランダム選択) 奇妙なことに、これは多くの正確な一致を見つけます。カウントの単純な多項式を評価として使用します。rating = n[0] + n[1]* 2 + n[2] *3 + n[4]**4 + ... ブルート フォースからの解の 1 つは [4, 0, 4, 4] です。正確には 1024 です。問題は、この方法では異なる選択が行われることが多いため、理想的ではないことです。

7. 網羅的検索 選択肢が多すぎるため実用的ではありません。

8. シミュレーテッド アニーリング ブルート フォースの成功からすると、これは良い代替手段のように見えます。誰かが簡単な例を教えてくれませんか (別の巡回セールスマンはやめてください)。

9. 遺伝子群と粒子群 これらについては不明です。

今、私は立ち往生してイライラしています。この問題に使用できる直接アルゴリズムはありますか?

4

1 に答える 1

0

問題を正しく理解していれば、長さ 34 の x1 オブジェクト、長さ 65 の x2 オブジェクトなどを選択して、これらすべてのオブジェクトの合計が W に等しくなるようにする必要がありますが、より長いオブジェクト (この場合、126.0 が最も好まれるオブジェクトになります)。

次のような目的関数を作成できると思います。

f(x1,x2,..,xn) = b1*x1*L1 + b2*x2*L2 + ... + bn*xn*Ln - p*(W - x1*L1 + x2*L2 + ... + xn*Ln)^2

ここで、b1 から bn はそれらのオブジェクトのバイアス (正の数は有利、負の数はオブジェクトが不利であることを意味します)、L1 から Ln はそれらのオブジェクトの長さ、p は正確に W でない場合のペナルティです (正確になければならない場合)。 W、p は inf.)

(f(X) = b^T*X*L - p*(W - I^T*X*L)^2 のように行列形式で表すこともできます。ここで、b と L はベクトル、X は正方形です) x1、x2、...、xn の対角スパース行列 I は 1 のベクトル、T は転置です。)

したがって、目的関数は、整数 x1、x2、...、xn の n タプル セットを検索することによって f を最大化します。

わかりました、今私は問題を理解していると思います。:)

これはある種の整数計画問題ですが、二次整数計画問題として正確に認められるとは思いません。たぶん、それが何であるかを他の誰かが知っています。

私は自分の研究で、シミュレーテッド アニーリングについて多くのことを研究し、実験してきました。通常、これらのタイプの離散最適化問題を簡単に解決できます。おそらく、この問題には線形または対数の温度スケジュールを使用できます。

ただし、オブジェクトが数個しかなく、大規模なスケーリングを意図していない場合は、ブルート フォースで問題ないでしょう。しかし、これを数百または数千のオブジェクトで行う場合は、遺伝的アルゴリズム、粒子群、またはシミュレートされたアニーリングが賢明なアイデアになるでしょう。私の知る限りでは、どの最適化ヒューリスティックが最もうまく機能するか (たとえば、満足のいく時間枠で望ましい精度の結果を見つけるか) を先験的に知ることは実際には不可能です。

コメントを提供する他の解決方法について十分に知りません。

于 2011-12-21T08:57:43.447 に答える