多項式時間の制約の影響を受けるセットおよびディスジョイントパーティションのカーディナリティを最小化するにはどうすればよいですか?


8

私が直面している本当の問題は次のとおりです。

インスタンス:私はすべてのととと行列セットを持っています。K := { 1 、... 、K } I 、J > 0 I ∈ K J ∈ NN:={1,…,n}K:={1,…,k}aij>0i∈Kj∈N

質問:のサブセットをできるだけ小さくして、セットを分割する必要があります集合は、すべてのに対して、すべてに対してように、和集合が等しいを設定しますi \ in K_j。SNK|S|KjKj∈SI∈KJ

∑j′∈Sj′≠jaij′⩽aij−1,
i∈Kj

例:

n=k=3および行列 \ begin {bmatrix} 0.6&2.7&1.2 \\ 1.3&2.6&0.8 \\ 1.5&0.4&0.6 \ end {bmatrix}が与えられ

[0.62.71.21.32.60.81.50.40.6].

この例では、SはS={1,2}およびK1={3}およびK_2 = \ {1,2 \}と等しくなければなりませんK2={1,2}。

私は2つの事実に気づきました:

  • すべてのi \ in Kに対してa_ {ij} \ geqslant 1となるようなj \ in Nが存在する場合、S = \ {j \}およびK_j = Kです。そしてj∈Naij⩾1i∈KS={j}Kj=K
  • a_ {ij} <1となるようなi \ in Kが存在する場合、S = \ emptysetです。i∈Kaij<1S=∅

私の質問:(少なくとも近似アルゴリズムを使用して)多項式時間でこの最適化問題を解決することは可能ですか?

私が最初に試みたのは、それを既知の問題に変換し、既知のアルゴリズムを適用することです。私はそれを変換について考えたセットカバーやビンパッキングが、私は失敗したとも私はこれが面白いとは思いません。


公式化しようとした問題。

すべてのととと行列セットを持っています。また、私は各ばらばらのセットを持っています(他の方法でそれを定式化できなかったため、を入力として追加しました)。K := { 1 、... 、K } I 、J > 0 I ∈ K J ∈ N N K J ⊂ K J ∈ N K JN:={1,…,n}K:={1,…,k}aij>0i∈Kj∈NnKj⊂Kj∈NKj

最後に、これを取得します:

minimizeS|S|subject to∑j′∈Sj′≠jaij′⩽aij−1,∀j∈S,i∈Kj,S⊆N.

ありがとう。


バイナリ変数を使用してILPとして再定式化してみましたか?目的は、制約に同様の変更を加えてmin変更されます。市販のILPソルバーで問題なく処理できます。 ∑ x jxj∑xj
— Nicholas Mancuso

しかし、それでは多項式の時間アルゴリズムは得られないと思いますか?
— drzbir 2016年

理論的にはそうかもしれませんが、実際にはそうではありません。CPLEXのような最新のソルバーは、ブランチアンドバウンドやその他のヒューリスティックのおかげで、比較的短時間で最適なソリューションを見つけるのに非常に優れています。
— Nicholas Mancuso

あるすべて?もしそうなら、私はあなたの「本当の問題」の定式化に問題があると思います、それはを任意のシングルトンセットすることによって自明に最適化されるためです:これを行うと、目的関数のLHSの合計が0になります。 ≥ 1 S { J }aij≥1S{j}
— j_random_hacker

すべてのがより大きいわけではありません。 1aij1
— drzbir 2016年

回答:


4

この問題の決定版でさえ、実行可能な解決策が存在するかどうかを簡単に判断しようとするものですが、Exact Coverからの削減によりNP困難になります。(最適化バージョンは、を最小化する実行可能な解決策を模索しており、明らかにこれと同じくらい難しいです。)|S|

値0.5を含む単一行、単一列の行列は、実行可能な解決策がない入力の例です。ここに別のものがあります:

[0.243.1350.6].

「1つだけ選択」ガジェットを作成する

まず、いくつかの行の最大値と、その通知あり、及びこの行が(少なくとも)の2つのコピー含ま、で言うと、次に、はと両方を含めることはできません。その場合、次の2つのケースのいずれかが発生する必要があり、それぞれが矛盾を引き起こします。 x > 0 x a i j a i j ′ j ′ ≠ j S j j ′aix>0xaijaij′j′≠jSjj′

  1. i∈Kj∪Kj′:が。ただし、、。i∈KjΣm∈S,m≠jaim≥aij′=x=aijΣm∈S,m≠jaim≤aij−1
  2. i∉Kj∪Kj′:次に、と仮定します。しかし、、そしては行で最大なので、そのは明らかにであるため、以前と同じ不等式に違反している必要があります。i∈Kp,p∉{j,j′}Σm∈S,m≠paim≥aij+aij′=2xxiaipx

したがって、行内のすべての非最大値の合計より安全に高いいくつかの最大値を選択し、この最大値のコピーを使用して、これらの列の最大1つが含まれるように強制できます。S

「非最大」値として1未満の正の値を使用することにより、この「最大1つ選択」制約を「正確に1つ選択」制約に変えることができます。これは、すべての行が行パーティションの一部のに属しており、場合、不等式のRHSが行に対して負になるため、それを満足させる方法がないため、少なくとも1つのが強制さよう。iKjaij<1ijSaij≥1

したがって、あるセットの列の1つだけがに強制されるようにするには、次のように行を作成します。T⊆NSai

  • セットそれぞれについて。aij=n+1j∈T
  • 他のすべてのに対してを設定します。aij=0.5j

したがって、Exact Coverからの削減は簡単です。各要素の行、各セットの列があり、セットに要素含まれ、それ以外の場合はになると、なります。両方向(「入力ECインスタンスがYESインスタンスで OPの問題の構築インスタンスYESインスタンスである」、および「OPの問題の構築インスタンスがYESインスタンスで入力ECインスタンスのYESインスタンスです」)明確です。aij=n+1jiaij=0.5⟹⟹


私が思うあなたが与えた例では、ソリューションの持つ。2×2S={2}
— drzbir 2016年

私はと。したがって、不等式は forです。なぜなら、不等式はすべてのに対して有効でなければならないからです。K 2 = K = { 1 、2 } 0 ⩽ I 2 - 1 、I ∈ K 2 = { 1 、2 } 、I ∈ K JS={2}K2=K={1,2}0⩽ai2−1i∈K2={1,2}i∈Kj
— drzbir 2016年

ごめんなさい。直します。
— j_random_hacker 2016年

この問題を整数プログラムとして記述し、解決しました。今、私は貪欲なアルゴリズム(より良い、パフォーマンス保証付きのアルゴリズム)でそれを解決する必要があります。あなたが示唆したように、私は正確なカバーホッピングを探して、これに適したアルゴリズムを設計する方法を見つけました。あなたはなにか考えはありますか?
— drzbir 2016年

これはNP困難であるため、ポリタイムアルゴリズムはほぼ確実に存在しません。満足のいくセットが見つかるまで、すべての単一列、すべての列のペア、すべてのトリプルなどをチェックしてみます。各行について解決する必要がある副問題(つまり、この行に対して選択する要素を決定する)は簡単です。S
— j_random_hacker
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.