一意の


16

この質問はおそらくトピックとオフトピックの境界線にありますが、ここで同様の質問を見てきましたので、質問します。


私はユニークなk -SATソルバーを実装しています。そのソルバーの入力は、最大1つの条件を満たす割り当てを持つk -CNF式です。その実用的な動作をテストするには、このような式のセットが必要です。Webでそれらを検索しましたが、何も見つかりませんでした(一方、通常のk -CNF式のスイートは非常に簡単に見つかります)。1k

Unique k -SATインスタンスはどこにありますか?

または、一意に満たすことができるインスタンスを生成する手順を知って満足するでしょう。私が知っている唯一のアプローチは、植えられたSATインスタンス生成の名前の下に行きますn変数の割り当てをランダムに生成し、そのような割り当てに同意する句のみを生成します。このアプローチは、以下の理由により、私の目的には不十分です。

  • 得られた式には、さらに望ましくない満足のいく割り当てがある場合があります。
  • 希望する割り当てによって式が一意に満たされることを確認するには、それに一致するすべての可能な句を導入する必要があります。これにより、多すぎる節を含む数式が生成されますが、おそらく簡単に解決できるため、ソルバーの最悪の場合の動作を表すものではありません。節の数を合理的に保ちながら一意性を効率的に強制する方法は私には明らかではありません。

合理的な数の句を使用して一意に満たすことができる式を生成するにはどうすればよいですか?合理 I最大値から平均遠い。2k(nk)


変数と句を持つSAT式が与えられます。節の数がと場合、式は一意に充足可能または不充足です。 .. k-SATの方程式も計算しました。見つけたらお知らせします。n m 3 n2 n 3 n2 n2 n 1 FFnm3n2n3n2n2n1F
Tayfun支払

手元に十分な時間がある場合(およびインスタンスが十分に小さい場合)、フェーズの移行時にインスタンスを生成し、SATソルバーでテストできます。数式に解がない場合は、破棄します。ソリューションXがある場合、ソリューションがXではないことを主張する句を追加し、ソルバーを再度実行します。これは基本ですが、遅いです。
アンドリューD.キング

回答:


7

SATインスタンスが満たされていると仮定して、Unique -SATインスタンスを生成する1つの方法を次に示します。によって与えられる式考えますkφψ(x)

φ(x)h(x)=y,

ここで、は割り当てをビット値にマップするハッシュ関数(小さな値の場合)、はランダムなkビット値です。φに約2 kの割り当てが満たされている場合、(発見的に)ψには(一定の確率で)満たされる割り当てが1つだけあると仮定します。我々は、SATソルバ(すなわち、かどうかテスト用いてこのようなケースであるかどうかをテストすることができψは、それがある場合、及び、充足され、X 0かどうかの割り当てを満たすものであり、テストをψ X Xx k k yhxkkykφ2kψψx0は充足可能です)。場合 kは知られていない、あなたが見つけることができ、Kを二分探索を使用して、または単に各候補値を反復することにより、K = 1 2 ... n個(ここで Nでブール変数の数である X)。ψ(x)xx0kkk=1,2,,nnx

ハッシュ関数は自由に選択できます。おそらくできるだけシンプルにしたいと思うでしょう。非常に単純な構成の1つは、xからkビットのランダムなサブセットを選択させることです。わずかにより洗練された構成が持つことであるの番目のビット時間xはからの二つのランダムに選択されたビットの排他的論理和であるX(各ビット位置の別個のペアを選択Iを、独立に)。維持時間シンプルが維持されますψ比較的簡単。hkxih(x)xihψ

この種の変換は、式への充足可能な割り当ての数を推定するためのスキームの一部として、時々使用/提案されます。特定のニーズに合わせて調整しました。φ

インターネット上でSATインスタンスの多くのテストベッドを見つけることができ、それらすべてにこの変換を適用して、一意の -SATインスタンスのコレクションを取得できます。k


別の可能性は、暗号化から一意の -SATインスタンスを生成することです。例えば、と仮定するF { 0 1 } のn{ 0 1 } のn暗号一方向性置換です。ましょうxは、ランダムに選択された要素である{ 0 1 } N、およびlet yは= fはX 。次いで、式φ X で与えられるF X =kf:{0,1}n{0,1}nx{0,1}ny=f(x)φ(x)は一意の k -SATインスタンスです。別の例として、2つの大きな素数 p qをランダムに選択し、 n = p qとします。次いで、式 φ X Y で与えられる X Y = N X > 1 Y > 1 X Y(ビット列と整数との間の明らかな対応関係を有する)である一意の Kf(x)=ykp,qn=pqφ(x,y)xy=nx>1y>1xyk-SATインスタンス。ただし、これらの構造は、ソルバーのベンチマークまたは最適化を行う便利な方法とは思えません。それらはすべて特別な構造を持ち、この構造が実世界の問題を代表していると信じる理由はありません。特に、暗号の問題から引き出されたSATインスタンスは、SATソルバーの他の多くの実世界のアプリケーションから引き出されたSATインスタンスよりもはるかに難しいことが知られているため、ソルバーのベンチマークの基準としてはあまり適していません。


一般に、この回答に記載されているすべての手法には、特定の構造を持つ一意の -SATインスタンスを生成するという欠点があるため、探しているものとは異なる場合があります-または、少なくとも、あなたは依存したくないかもしれませんこの方法で生成された数式のみに基づいて。より良いアプローチは、Unique k -SATのアプリケーションを特定し(誰がソルバーをどのような目的で使用すると思いますか)、それらのアプリケーションドメインから現実的な例を取得することです。kk

関連トピックについては、興味深い組み合わせ最適化問題の生成も参照してください。


暗号化段落の最初の部分は間違っています、(一方向の関数が存在する場合) 単射ではない一方向関数が存在します。

ありがとう、@ RickyDemer!私は一方通行を意味しましたが、それは私が書いたものではありませんでした。修繕。
DW

6

(通常)数独パズルにはユニークな解決策があるはずなので、数独パズルの生成に使用されるアルゴリズム(おそらく一般化されている)を検討してください。一方、数独パズルには通常、少なくとも1つのソリューションが保証されています...しかし、そのソリューションを見つけることは、ソルバーにとって優れたベンチマークになる可能性があります。n×n

SATの削減と一緒に数独ジェネレーターを使用するか、数独生成で使用される手法を適用して一意のSATインスタンスをより直接生成する方法を検討することができます。前者の場合、明らかにSATインスタンスには何らかの構造がありますが、ソリューションの植え付けやウィットネス分離手法の使用など、多かれ少なかれ構造が明確ではありません。おそらくあなたのニーズとソルバーに依存します。

私がここで知っている1つの参考文献は次のとおりです。数独パズル生成:簡単から悪まで


4

良いテストケースは、制約でランダムに一意に満たすことができる3XORインスタンス(植え付けられたインスタンス)を生成し、それらを3SATインスタンスに変換することだと思います。Θ(n)


2

ソリューションの数を制御しながら「おそらく難しい」SATインスタンスを作成する最良の方法の1つは、バイナリエンコードされた整数因数分解インスタンス/回路です。コードはそれほど複雑ではなく、主にEE加算回路を使用し、「大きな」SATインスタンスにはつながりません。解の数は因子の数に等しい(因子の「順列」を含む)。したがって、素数は正確に2つの解ます。単一の溶液を、要因を制限し、さらに、「比較」制約で保証することができます<(1,p),(p,1)a<ba1bp

また、このアプローチでは、おおまかに多くの要因/解決策が求められている数値を見つけるのは比較的簡単です。「滑らかに」数、複数の要因。

長年にわたりさまざまな研究者がこのファクタリングSATコードを作成してきましたが(たとえば、過去にいくつかのファクタリングインスタンスを保存していたDIMACS競争/アーカイブ用)、残念ながら公開されているバージョンはないようです。大学院コース向けにコードが作成/実装されているように見えるrefについては、以下の最初のリンクも参照してください。

ランダムSATインスタンスの作成:別のより「非構造化」インスタンスを作成するために、いくつかのために有用であり得るアプローチ反復/経験転移点(式「は解けると解決不可能」との間の確率50%を有する領域)の近く、およびその後、方程式を解きます。解決できない場合は、破棄して再起動します。解ける場合は、解を「見つけられない」解に制限する句を追加し、e n + 1を取得して再解決します。必要に応じて繰り返します。方程式e n + 1がもはや解け​​ない場合、e nは単一/一意の解を持たなければなりません。enen+1en+1en


ファクタリングアプローチについては以前の回答で言及しましたが、理想的なテストベッドではない理由についても説明しました。「しかし、これらの構造はソルバーのベンチマークや最適化に役立つ方法とは思えません。特に、暗号の問題から引き出されたSATインスタンスは、SATソルバーの他の多くの実世界のアプリケーションから引き出されたSATインスタンスよりも非常に難しいことが知られています。そのため、ソルバーのベンチマークを行うための非常に優れた基盤ではありません。」
DW

したがって、上記は別のPOVであり、非常に難しいインスタンス、明らかに任意のソルバーの自然なテストケースが必要な場合、ファクタリングは実際に有望な方法です。自分の意見を反映した公開された意見を見つけることができるかどうかを真剣に疑います。繰り返しますが、ファクタリングインスタンスは、何年も前から本格的な研究者によってDIMACSチャレンジアーカイブに入れられています。とにかく、あなたの反対意見は、一貫性のある方法で実際には表現されていません。暗号化は、SATインスタンスに使用される多くの抽象的/抽象的/学問的問題よりも、実際に最も重要な/適用される現実世界の問題です
...- vzn

2

合理的なサイズ| F | < n + 2 k)で一意のSAT式を直接簡単に生成できます。(|F|<n+2k)

してみましょうユニークなモデルも-と言う、mは(必要に応じて、後で変数の名前を変更)のみ「0」が含まれています。 LET F k個 -SAT式のみによって満たさM -の最大サイズFは、によって満たさ節の総数であり、M、すなわち2 K - 1 nはmm
FkmFm(2k1)(nk)

テイク一つの"1"の間で正確に割り当てるすべてのモデル排除条項X1X2...XK¬X1X2...XKX1¬X2...XK...X1X2...¬XK(k1)x1,x2xk
(¬x1,x2xk)(x1,¬x2xk)(x1,x2¬xk)

テイク割り当てすべてのモデルを排除する条項正確二つの"1"のうち、X1X2...XK¬X1¬X2X3...XK¬、X1はxは2¬X3...XK...X1X2···¬XK-1¬(k2)x1,x2xk
(¬x1,¬x2,x3xk)(¬x1,x2,¬x3xk)(x1,x2¬xk1¬xk)

(kk)x1,x2xk

x1,x2xkmnkxi(k<in)0k1x1,x2xk, for instance:
(¬xk+1,x1,xk1)(¬xn,x1xk1).

Then |F|=i=1k(ki)+nk=2k1+nk

To get more clauses, add any clause containing at least one negated variable. To get an unsatisfiable formula, just add a clause with k unnegated variables.


There is a problem in your answer : we have n variables and this means that and not k
Elaqqad
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.