SATソルバーでこのサブセットカバーの問題を解決するのは実現可能ですか?

cs.stackexchange https://cs.stackexchange.com/questions/118667

質問

問題は、 $ \ mathcal {s} $ を見つけることです。 $ \ {1のサブセットの最小収集2つの条件が満たされるような\ dot、17 \} $

    $ s subseteq \ mathcal {s} $ の場合 $ |= 6 $ ; $ a \ subseteq \ {1、\ dots、17 \} $ の場合 $ | a |= 3 $ $ \ \ mathcal {s} $ $ a \ subset sに存在します。 $

    関連コンビナトリアル問題については

    これは、MIN SAT問題として定式化できると思います。

    $ s \ subseteq \ {1、\ dots、17 \} $ $ | s | s |= 6 $ 、変数 $ x_s $ を導入します。そして、 $ a \ subseteq \ {1、\ dots、17 \} $ $ | a | a |= 3 $ 、節を紹介します $$ \ vee_ {s:a \ subseteq s、| s |= 6} x_ {s} $$ それから、プリンシパルでは、SATソルバーを使用して、すべての句を満たすためには、$ X_S $ の最小数を見つけることができます。

    これは $ \ binom {17} {6}= 12376 $ 変数、 $ \ binom {17} {長さの句 $ \ binom {17-3} {3}= 364 $

    実際にSATソルバーを使用して経験がほとんどありません。これは実際に私のラップトップを試着する価値があるか、まったく希望がないのですか?

    ---

    更新

    セットカバーに関する多くの研究があります。パラメータ(17,6,3)の問題を解決しようとするのは私が野心的であったようです。

    (12,5,3)にはすでに開かれています。

    詳細については、詳細については

    ---

    更新2

    は純粋な土の中ですべてを書きようとしました、そしてそれはz3よりもCADicalを使ってより速いです。

    また、溶液が存在しないよりも解を見つけるのが著しく速いです。

    Lexicon Orderの最初のサブセットを選択する必要がある制約を追加して、対称性を分割しようとしました。

役に立ちましたか?

解決

SATを使用した最適化は通常、MIN SATの代わりにMAXSATと呼ばれます。特に、MAXHSとRC2など、「加重部分MAXSAT」のソルバーを探すことをお勧めします。

あなたが最新のMaxsat-Solversの文脈ではかなり小さい問題のサイズであるので、はい、試す価値があります。ソルバーが効率的に機能するという保証はありません。

他のヒント

SATで、実行可能なものと何が悪いのかを予測することは困難です。それは試してみる価値があります。

MINSATの代わりに、最初にバイナリ検索を使用して、 $ n= | \ mathcal {s} | $ 、セット数必要。 at-most- $ n $ - out-12376 $ x_s $ 変数いくつか テクニック SATでのエンコーディングは、最初に Z3ソルバー。

あなたの問題は多くの対称性を持っています。 SATソルバーは時々対称性がある場合があります。対称性を破ることができるほどできる限りやろうとするかもしれません。たとえば、一般性を失うことなく、 $ \ {1,2,3,4,5,6 \} $} $ がセットの1つです(permute)すべての数字があるので)、あなたはあなたのSATインスタンスにこの事実をハードコードするかもしれません。あなたが証明できるより多くのそのようなレンマは、SATソルバーが良くなるかもしれません。

セットを異なる方法でエンコードすることもできます。 $ S_I $ $ i $ setを表します。コンテナ "> $ \ mathcal {s} $ 。 $ j \ j $ j \ j \ j $ j \ j \ j \ j \ j \ x と変数 $ x_ {i、j} $ を紹介する。 SPAN CLASS="math-container"> $ y_ {i、a} $ $ a \ subset s_i $ $ a \ subseteq \ {1、\ dots、17 \} $ $ | a |= 3 $ $ i \ in \ {1、\ dots、n \} $ 、および各 $ j \ in \ {1、 \ dot、17 \} $ 。各 $ a $ の句 $ \ bigvee_i y_ {i、a} $ それぞれを確実にする $ A $ は少なくとも1つのセットでカバーされています。 $ i $ ごとに6-OUT-17の制約を追加して、 $ x_ {i 、j} $ が真です。最後に、 $ x $ 'sと $ y $ の間の一貫性を強制するための制約を追加します。特に、 $ a={a_1、a_2、a_3 \} $ 、追加句の追加 $ \ neg x_ { i、a_1} \ lor \ neg x_ {i、a_2} \ lor \ neg x_ {i、a_3} \ lor y_ {i、a} $ $ \ \ neg y_ {i、a} \ lor x_ {i、a_1} $ $ \ neg y_ {i、a} \ lor x_ {i、a_2} $ < / span>と $ \ reg y_ {i、a} \ lor x_ {i、a_3} $ 。これは、 $(17 + 680)n $ 変数と $ 4 \ cdot 680 n $ 句( $ n $ 6-OUT-17の制約をカウントしない)。 $ n \約35 $ を期待しているので、これは約24Kの変数と100k節です。それはあなたのエンコーディングよりもより多くの節であり、さらにもっと対称性を持っているので、それはより短い節ですが、どちらの符号化が座って最もよく機能するかを予測するのは難しいので、多くの実験が必要とされるのは難しいです。

SATではなくILPインスタンスとしてこれを表現することも試みることもできます。

ライセンス: CC-BY-SA帰属
所属していません cs.stackexchange
scroll top