Схоже, ви намагаєтеся обчислити поперечний гіперграф розміром . Тобто { T 1 , … , T m } - ваш гіперграф, а S - ваш поперечний. Стандартний переклад полягає в тому, щоб висловити пропозиції, як у вас є, а потім перекласти обмеження довжини в обмеження для кардинальності.к{ Т1, … , Тм}S
Тому використовуйте наявне кодування, тобто а потім додайте пропозиції кодування .⋀1 ≤ j ≤ m⋁i ∈ Tjхi∑1 ≤ i ≤ nхi≤ k
∑1 ≤ i ≤ nхi≤ k - обмеження кардинальності. У SAT є різні різні переклади обмеження кардинальності.
Найпростіший, але досить великий переклад обмеження для кардинальності - це просто . Таким чином , кожен диз'юнкція являє собою обмеження - для всіх підмножин з розміром до + 1. Тобто ми гарантуємо, що немає можливості встановити більше k змінних. Зауважимо, що це не многочленний розмір у ¬ ⋀ i ∈ X x i X { 1 , … , n } k⋀Х⊆ { 1 , … , n } , | Х| =k+1⋁i ∈ X¬ хi¬ ⋀i ∈ XхiХ{ 1 , … , n }к
Деякі посилання на документи про більш просторові трансляції обмежень для кардинальності, які мають поліном вк :
- Переклад псевдобулевих обмежень у SAT - Ніклас Еен та Ніклас Шьоренсон, JSAT т. 2 (2006), стор. 1-26 (гарне опитування).
- Ефективне кодування CNF булевих обмежень кардинальності - Олів'є Байє та Ясін Буфкхад, Збірник принципів та практики програмування обмежень 2003, LNCS том 2833, стор 108-122 (приємний, досить простий у здійсненні переклад).
- На шляху до оптимального CNF, що кодує булеві обмеження кардинальності - Карстен Сінц - Праці принципів та практики програмування обмежень 2005, LNCS 3709, pg 827-831.
- Надію на надійні кодування CNF обмежень кардинальності - Жоао Маркіс-Сільва та Інк Лінс, Матеріали принципів та практики програмування обмежень 2007, LNCS 4741, стор 483-497.
Якщо ви насправді зацікавлені у вирішенні подібних проблем, можливо, краще сформулювати їх як псевдобулеві проблеми (див. Статтю у вікі про псевдобулеві проблеми ) та використовувати псевдобулеві розв’язувачі (див. Псевдобулеву конкуренцію ). Таким чином обмеження кардинальності є лише псевдобулевими обмеженнями і є частиною мови - сподіваємось, псевдобулевий розв'язувач потім обробляє їх безпосередньо та, отже, більш ефективно.