サイズkのハイパーグラフの横断を計算しようとしているようです。つまり、\ {T_1、\ dots、T_m \}はハイパーグラフであり、Sは横断です。標準の変換では、句をそのまま表現し、長さの制限を基数制約に変換します。k{T1,…,Tm}S
したがって、既存のエンコーディング、つまりを使用し、エンコードする句を追加します。Σ 1 ≤ I ≤ nが xはI ≤ K⋀1≤j≤m⋁i∈Tjxi∑1≤i≤nxi≤k
∑1≤i≤nxi≤kはカーディナリティー制約です。SATへのさまざまなカーディナリティー制約の変換があります。
最も単純だがかなり大きなカーディナリティ制約の変換は、。このように、各選言は制約表します- サイズk + 1 ののすべてのサブセットに対して。つまり、k個を超える変数を設定できる方法がないことを保証します。これは多項式サイズではないことに注意してください⋀X⊆{1,…,n},|X|=k+1⋁i∈X¬xi¬⋀i∈XxiX{1,…,n}k
多項式サイズであるk、よりスペース効率の良いカーディナリティ制約変換に関する論文へのリンク:
- 擬似ブール制約のSATへの変換-NiklasEénand NiklasSörensson、JSAT vol 2(2006)、pg 1-26(良い調査)。
- ブールカーディナリティ制約の効率的なCNFエンコーディング -Olivier Bailleux and Yacine Boufkhad、Proceedings of Principles and Practice of Constraint Programming 2003、LNCS vol 2833、pg 108-122(翻訳を実装するのはかなり簡単です)。
- ブール基数制約の最適なCNFエンコーディングに向けて -Carsten Sinz-制約プログラミング2005の原理と実践の手順、LNCS 3709、pg 827-831。
- カーディナリティ制約のロバストなCNFエンコーディングに向けて -Joao Marques-SilvaおよびInêsLynce、「Constraint Programming 2007の原理と実践」、LNCS 4741、pg 483-497の手順。
このような問題を実際に解決することに興味がある場合は、それらを疑似ブール問題として定式化し(疑似ブール問題に関するwiki記事を参照)、疑似ブールソルバーを使用する(疑似ブール競合を参照)ことをお勧めします。このように、カーディナリティー制約は単なる疑似ブール制約であり、言語の一部です。できれば、疑似ブールソルバーがそれらを直接処理するため、より効率的に処理できます。