2016-08-10 3 views
27

標準0/1ナップザックでは、すべてのアイテムの重量が他のアイテムとは独立している必要があります。 DPは、このソリューションに向けた効率的なアルゴリズムです。しかし、今、私は新しいアイテムの0/1ナップザックと従属項目の重量?

重量はすでに ナップザックの前の項目に依存していることを、この問題の類似しているが、拡張子に会いました。

は、たとえばのために、私たちは5つの項目a、重量w_abcde、...、w_eを持っています。項目bおよびcは重量依存性を有する。 bはナップザックに既に存在する場合、それは、bで即ちweight(b&c) < w_b + w_cをいくつかの領域を共有することができるので

、項目cの重量は、小さいw_c以上であろう。対称的に、cがすでにナップザックに入っている場合、bの重量はw_bより小さくなります。

この不確かさは、元のDPアルゴリズムの失敗をもたらします。なぜなら、これは以前の反復の正確さに依存するためです。私はナップザックに関するいくつかの論文を読んだが、利益二次ナップザック問題)に従属するか、またはランダム分布(確率的ナップザック問題)に従った可変重量を持つ依存関係を持っている。私は前の質問1/0 Knapsack Variation with Weighted Edgesも知っていますが、非常に一般的な答えしかありません。このナップザックの名前は何であるかについての答えはありません。

一つの既存のソリューション:

私はまた、彼らはgroup the related items as one combined item for knapsack DBMSの最適化、およそa paper内の1つの近似解を読みました。この技術をこの例で使用する場合、ナップザックの項目はa,bc,d,eとなるため、これらの4つの項目のうちの2つの間には依存関係がありません。しかし、an item with "small weight and benefit" is grouped with another item with "large weight and benefit"のように最適な結果を得られない例を作るのは簡単です。この例では、「小さい」項目は解決策では選択しないでくださいが、「大きな項目」と一緒に選択します。

質問:

、または少なくともいくつかのエラーを保証して最適な結果を得ることができ、効率的な解決手法のいずれかの種類がありますか?あるいは、私はこの問題のモデル化に間違った方向を取っていますか?

+6

あなたの質問のようにいくつかdownvotesがあるようです。私はdownvotersには本当に同意しませんが、それはおそらくあなたがトピックからオフの "オフサイトのリソース"を求めるように解釈することができるこの問題の研究があるかどうか尋ねたからです。 – samgak

+2

@samgakコメントをいただきありがとうございます。私は可能な解決策にもっと焦点を当てるように私の質問を修正しました。 –

+2

この質問は[メタで議論されている](http://meta.stackoverflow.com/q/332155/2840103)です。 – johnnyRose

答えて

1

最後に、@Holtが提案したB & Bメソッドで問題を解決することができました。

(0)B & Bアルゴリズムを実行する前に、すべての項目をグループ化するには、その依存関係に依存します。 1つのパーティション内のすべてのアイテムは、同じグループ内の他のすべてのアイテムとの重みの依存関係を持ちますが、他のグループ内のアイテムとの依存性はありません。 B & B用

セッティング:

(1)上限:すなわち、すべての依存関係が存在すると仮定し、現在のアイテムが最小量を有すると仮定する。

(2)下限:現在のアイテムがの最大値の重みを持つと仮定します。つまり、すべての依存関係は存在しないものとします。

(3)現在の重量:実際の現在の重量を計算します。

上記の計算はすべて、ステップ0で取得したグループを使って周りを回って行うことができます。これらの重みを取得する場合、現在のグループ(現在のアイテムが属するグループ)他のグループのアイテムは現在のアイテムと依存関係がないため、現在のアイテムの実際の重みは変更されません。

6

あなたはアイテムabcbcdeを持っていませんでしたか?可能であれば、bbcの両方がナップザックになることはできず、同様にcbcとすることができますか? bcのいずれかの解は、両方をbc(定義による)に置き換えることで改善できるため、これは正しい解決策であると私は理解しています。メンバーシップの制約は、他の場合を処理する必要があります。

+2

これは非常に効率が悪く、 a、b、c、d、eの例では、ab、ac、ad、ae、bc、bd、be、cd、ceを作成する必要があります。 、de、but abc(なぜなら、a、b、cをナップザックに入れればどうなるでしょうか?)とすべてのトリプレット、クワドラット、そして...基本的に、すべてのソリューションのアイテムを作成しようとしています。 – Holt

+0

@Holt –

+0

あなたの答えはありがたいですが、アルゴリズム(アルゴリズムなど、DPなど)が両方とも「b」を選択すると、この考え方が正しく機能しないことがあります。 'と' bc'。このカスeは、bcを選択することはbを選択することと等しく、bの重みは0になるので依存関係は依然として存在する。 –

1

これは非常に興味深い問題であり、私はしばらくの間これについて作業してきました。最初に考慮する必要があるのは、従属項目の重み付け/値を持つバイナリのナップザック問題は、まったく些細なことではないということです。この問題を解決するために、ベイジアンネットワーク、マルコフモデル、および他の同様のテクニックを使用することを検討することができます。それにもかかわらず、この問題に対する実用的なアプローチは、最適化モデルまたはその入力に関していくつかの仮定をしなければならない。ここでは、値に依存する項目でバイナリナップザックの問題を定式化する例を示します。 https://arxiv.org/pdf/1702.06662.pdf

著者は、ファジィグラフを使用して入力(値関連の依存関係)をモデル化し、最適化問題を解決するために提案された整数線形計画モデルを使用することを提案しました。作品の拡張版は公開されており、すぐにオンラインで公開される予定です。

さらに詳しい情報が必要な場合は、私に連絡することを躊躇しないでください。必要に応じて、モデルのソースコードを提供することもできます。

関連する問題