Sepertinya Anda mencoba menghitung transversal hypergraph dengan ukuran . Artinya, { T 1 , ... , T m } adalah Anda hipergraf, dan S adalah Anda transversal. Terjemahan standar adalah untuk mengekspresikan klausa seperti yang Anda miliki, dan kemudian menerjemahkan batasan panjang menjadi kendala kardinalitas.k{T1,…,Tm}S
Jadi gunakan encoding yang ada, yaitu, dan kemudian menambahkan klausul encoding Σ 1 ≤ i ≤ n x i ≤ k .⋀1≤j≤m⋁i∈Tjxi∑1≤i≤nxi≤k
adalah kendala kardinalitas. Ada berbagai terjemahan kendala kardinalitas yang berbeda ke dalam SAT.∑1≤i≤nxi≤k
Terjemahan kendala kardinalitas yang paling sederhana namun agak besar hanyalah . Dengan cara ini setiap disjungsi mewakili kendala ¬ ⋀ i ∈ X x i - untuk semua himpunan bagian X dari { 1 , … , n }⋀X⊆{1,…,n},|X|=k+1⋁i∈X¬xi¬⋀i∈XxiX{1,…,n}ukuran k + 1. Yaitu, kami memastikan bahwa tidak ada cara lebih dari variabel k dapat diatur. Perhatikan bahwa ini bukan ukuran polinomial dalam k
Beberapa tautan ke makalah tentang terjemahan kendala kardinalitas yang lebih hemat ruang yang berukuran polinomial dalam k :
- Menerjemahkan Batasan Pseudo-Boolean ke dalam SAT - Niklas Eén dan Niklas Sörensson, JSAT vol 2 (2006), hal 1-26 (survei yang baik).
- Pengkodean CNF yang efisien dari batasan kardinalitas Boolean - Olivier Bailleux dan Yacine Boufkhad, Prosiding Prinsip dan Praktek Pemrograman Kendala 2003, LNCS vol 2833, hal 108-122 (terjemahan yang bagus, cukup mudah untuk diterapkan).
- Menuju Penyandian CNF yang Optimal dari Kendala Kardinalitas Boolean - Carsten Sinz - Prosiding Prinsip dan Praktek Pemrograman Kendala 2005, LNCS 3709, hal 827-831.
- Menuju Penyandian Batasan Cardinalitas CNF yang Kuat - Joao Marques-Silva dan Inês Lynce, Prosiding Prinsip dan Praktek Pemrograman Kendala 2007, LNCS 4741, hal 483-497.
Jika Anda benar-benar tertarik untuk memecahkan masalah seperti itu, mungkin lebih baik memformulasikannya sebagai masalah pseudo-boolean (lihat artikel wiki tentang masalah pseudo-boolean ) dan menggunakan pemecah pseudo-boolean (lihat kompetisi pseudo-boolean ). Dengan cara itu kendala kardinalitas hanyalah kendala pseudo-boolean dan merupakan bagian dari bahasa - semoga pemecah pseudo-boolean kemudian menanganinya secara langsung dan karenanya lebih efisien.