ハト穴問題のSATエンコードの対称性を減らすために、正規の順序をどのように使用しますか?


8

「N個のオブジェクトから1個を選択するための効率的なCNFエンコーディング」という論文では、制約をエンコードするための「司令官変数」手法を紹介し、鳩の巣問題について説明しています。

私のエラーは低レベルの理解に存在する可能性があるため、質問をする前に、知っていると思うことを宣言させてください。

ましょうメートル及びんハトと穴の数です。ナイーブエンコーディングでは、命題変数バツ私、jを使用します。これは、私』thハトをj』thホールに入れる場合に当てはまります。句EバツactlyOんe(バツ1、1、バツ1、2、。。。、バツ1、ん)ハト1が1つの穴を占有するように強制します。他のハトにも同じ条項が追加されています。句あtMostOんe(バツ1、1、バツ2、1、。。。、バツメートル、1)適用しない1個以下鳩穴1を占有します。同じ句が残りの穴に追加されます。

ハトが穴よりも多い場合(m> n)、問題は解決できません(人間には明らかです)が、SATソルバーはこの事実を「認識」しません。それはハト配置する方法を見つけることができない場合には1、2、3、。。、メートルそれは鳩と試み検索します2、1、3、。。。、メートル。ハトの順序が無関係であることを理解していません。この論文は、とりわけ、この対称性を呼んでいます。

インスタンスメートル=ん+1は、SATソルバーの不満を検出する能力の精力的なテストとして使用されます。

この論文では、ハトに秩序を強制することで対称性を破ることを提案しています。ピジョンは、ハトi + 1の穴の前の穴に配置する必要があります(つまり、ホールjのハトは、ホールj + 1のハトの数よりも小さい必要があります)。次に、「スペースの制限により、正規順序エンコーディングを詳細に明示的に説明していませんが、生成される句の数はO (n ∗ l o g (n ))です」とがっかりします。私私+1jj+1O(ん∗log(ん))

だから私の質問は、これらの結果を得るために彼らは何をしたのですか?

私は、変数扱いたいは、どの鳩が1番ホールに入ったかの選択を数値的に識別するビットのストリングとして、以下同様に続きます。この後、n − 1個のコンパレータを使用して、ペーパーの提案を適用します。ただし、私の単純なコンパレータの構成では、(ますます醜いサイズの)ビットごとに1つのm句が必要です。助けて!:){バツ1、1、バツ2、1、。。。、バツメートル、1}ん−1

回答:


7

ましょハトの数であり、およびnは孔の数です。i番目の鳩がj番目の穴に入れられた場合、命題変数B i 、0 ... B i 、l o g (n )がj − 1のバイナリ表現をエンコードするとします。(例、鳩1は穴10内に配置された場合、J - 1 = 9、バイナリ1001だからであるB 1 、3 =真、B 1 、2メートルんB私、0B私、log(ん)j−1私jj−1=9B1、3B1、2=偽、 =偽及びB 1 、0 =真)。B1、1B1、0

変数によってエンコードされた穴がB i + 1の穴よりも小さいことを要求することにより、穴内のハトの特定の順序を強制します。エンコーディングは期待どおりに比較されます。B私B私+1

< B i + 1 、l o g (n ) OR B i 、l o g (n ) = B i + 1 、l o g (n ) AND B i 、l o g (n )− 1 < B i + 1Bi,log(n)Bi+1,log(n)

B私、log(ん)B私+1、log(ん)B私、log(ん)−1 OR B i 、l o g (n ) = B i + 1 、l o g (n ) AND B i 、l o g (n )− 1 = B i + 1 、l o g (n )− 1 AND B iB私+1、log(ん)−1

B私、log(ん)B私+1、log(ん)B私、log(ん)−1B私+1、log(ん)−1 < B i + 1 、l o g (n )− 2 OR ... B私、log(ん)−2B私+1、log(ん)−2

...右側の次のビットが次のハトのビットよりも小さい限り、最上位ビットを同等にできるというパターンに従います。が存在するであろうコンパレータ当たり接続詞およびO (M )期待与え、コンパレータO (M * L O G (N ))の追加条項。O(log(ん))O(メートル)O(メートル∗log(ん))

変数の値がで暗示されている必要がありXのI 、Jの値。各B i 、∗ビットは、設定されるX i 、j変数の特定のセットのいずれか1つによって暗示されます。例:n = 16とすると、次のようになります。Bバツ私、jB私、∗バツ私、jん=16

EバツactlyOんe(バツ1、9、バツ1、10、バツ1、11、バツ1、12、バツ1、13、バツ1、14、バツ1、15、バツ1、16、B1、3¯)

その力鳩1穴9-16のいずれかに配置される場合、真。それ以外の場合はB 1 、図3に示すように句を満たすために偽に設定されています。これらの句は、残りのB iビットを設定します。B1、3B1、3B私

E 、X 、A 、Ct l y O n e (ExactlyOne(X1,5,X1,6,X1,7,X1,8,X1,13,X1,14,X1,15,X1,16,B1,2¯) E x a c t l y OExactlyOne(X1,3,X1,4,X1,7,X1,8,X1,11,X1,12,X1,15,X1,16,B1,1¯) ExactlyOne(X1,2,X1,4,X1,6,X1,8,X1,10,X1,12,X1,14,X1,16,B1,0¯)

が存在することになる各鳩のために、これらの句。ハトがm個あるため、m ∗ l o g (n )句が追加されます。log(n)mm∗log(n)


お返事をありがとうございます!しかし、バイナリエンコーディング自体を強制するために追加の句が必要ではありませんか?穴10内に配置されて鳩1を使用して例を用いて、私は節がコンペに必要とされると思う。これは、CNFのl o g (n )句に拡張されます。そして、 X i 、jごとに1つ必要であり、m ∗X1,10→B1,3∧B1,2¯∧B1,1¯∧B1,0log(n)Xi,j成長もう一度。m∗n
— Andrew Lamoureux 2013

これに対処するために回答を編集します。
— カイルジョーンズ

使い方「圧縮」冗長にちょうど素晴らしいですステートメント「鳩がここに行けば、ビットはこのなければなりません」!この制約は彼らの論文の主題なので、あなたの解決策が省略されたものであることは間違いありません。カイルありがとう!ExactlyOne()
— Andrew Lamoureux 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.