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


8

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

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

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

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

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

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

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

私は、変数扱いたいは、どの鳩が1番ホールに入ったかの選択を数値的に識別するビットのストリングとして以下同様に続きます。この後、n 1個のコンパレータを使用して、ペーパーの提案を適用します。ただし、私の単純なコンパレータの構成では、(ますます醜いサイズの)ビットごとに1つのm句が必要です。助けて!:){バツ11バツ21バツメートル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メートルB0Blogj1jj1=9B1B12=偽、 =偽及びB 1 0 =真)。B11B10

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

BlogB+1logBlog1 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+1log1

BlogB+1logBlog1B+1log1 < B i + 1 l o g n 2 OR ... Blog2B+1log2

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

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

EバツactlyOeバツ19バツ110バツ111バツ112バツ113バツ114バツ115バツ116B1¯

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

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)mmlog(n)


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

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

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