Похоже, вы пытаетесь вычислить трансверсаль гиперграфа размера . То есть { T 1 , … , T m } - ваш гиперграф, а Sk{T1,…,Tm}S - ваш трансверсал. Стандартный перевод состоит в том, чтобы выразить предложения, как у вас, а затем перевести ограничение длины в ограничение количества элементов.
Поэтому используйте существующую кодировку, т. а затем добавьте предложения, кодирующие ∑ 1 ≤ i ≤ n x i ≤ k .⋀1≤j≤m⋁i∈Tjxi∑1≤i≤nxi≤k
- ограничение мощности. Существуют различные переводы ограничений кардинальности в SAT.∑1≤i≤nxi≤k
Самый простой, но довольно большой перевод ограничения мощности - это просто . Таким образом, каждая дизъюнкция представляет ограничение ¬ ⋀ i ∈ X x i - для всех подмножеств X в { 1 , … , n }⋀X⊆{1,…,n},|X|=k+1⋁i∈X¬xi¬⋀i∈XxiX{1,…,n}размером к + 1. Таким образом, мы гарантируем, что нет возможности установить более k переменных. Обратите внимание, что это не полиномиальный размер в k
Некоторые ссылки на статьи о более компактных переводах ограничений кардинальности, которые имеют полиномиальный размер в k :
- Перевод псевдобулевых ограничений в SAT - Никлас Эен и Никлас Соренссон, JSAT vol. 2 (2006), стр. 1-26 (хороший обзор).
- Эффективное CNF-кодирование булевых ограничений мощности - Оливье Байо и Яцин Буфхад, Труды по принципам и практике программирования ограничений 2003, LNCS vol. 2833, pg 108-122 (хороший, довольно простой в реализации перевод).
- На пути к оптимальному кодированию CNF булевых ограничений кардинальности - Карстен Синз - Труды принципов и практики программирования ограничений 2005, LNCS 3709, pg 827-831.
- На пути к надежным кодировкам ограничений CNF - Жоао Маркес-Силва и Инес Линс, Труды по принципам и практике программирования ограничений, LNCS 4741, стр. 483-497.
Если вы действительно заинтересованы в решении таких проблем, возможно, лучше сформулировать их как псевдобулевы (см. Вики-статью о псевдобулевых задачах ) и использовать псевдобулевы решатели (см. Псевдобулевы соревнования ). Таким образом, ограничения мощности являются просто псевдобулевыми ограничениями и являются частью языка - надеюсь, псевдобулев решатель будет обрабатывать их напрямую и, следовательно, более эффективно.