Этот вопрос, вероятно, находится на границе между темой и темой, однако я видел подобные вопросы здесь, поэтому я задам его.
Я реализую уникальный -SAT-решатель, вход которого представляет собой формулу -CNF, имеющую не более удовлетворительного назначения. Чтобы проверить его практическое поведение, мне нужен набор таких формул. Я искал их в Интернете и ничего не нашел (хотя, с другой стороны, очень легко найти наборы обычных формул CNF).
Где я могу найти уникальные экземпляры -SAT?
В качестве альтернативы я хотел бы также знать любую процедуру для генерации уникально удовлетворяемых экземпляров. Единственный подход, о котором я знаю, идет под именем генерации установленного экземпляра SAT : вы случайным образом генерируете назначение переменных, а затем генерируете только те предложения, которые согласуются с таким назначением. Этот подход неудовлетворителен для моих целей по следующим причинам:
- Полученная формула может иметь дополнительные нежелательные удовлетворяющие назначения.
- Чтобы быть уверенным, что формула однозначно удовлетворяется желаемым присваиванием, вы должны ввести все возможные пункты, которые с ней согласны. Это приведет к получению формул со слишком большим количеством предложений, которые, вероятно, будет легко решить и, следовательно, не будут отражать поведение решателя в худшем случае. Для меня не очевидно, как мы можем эффективно навязывать уникальность, сохраняя при этом разумное количество пунктов.
Как мы можем генерировать однозначно выполнимые формулы с разумным количеством предложений? Под разумным я подразумеваю далеко от максимума .
Ответы:
Вот один из способов генерирования уникального экземпляра -SAT, учитывая экземпляр SAT φ, который, как вы знаете, выполним. Рассмотрим формулу ф ( х ) , данноеk φ ψ(x)
где является хэш - функция , которая отображает задание х к к -битных значение (для некоторого малого значения к ), и у является случайной K значения -битный. Если φ имеет около 2 k удовлетворяющих заданий, то (эвристически) мы предполагаем, что ψ будет иметь только одно удовлетворяющее присваивание (с постоянной вероятностью). Мы можем проверить, является ли это случаем, используя решатель SAT (а именно, проверить, является ли ψ выполнимым; если это так, и x 0 является одним удовлетворяющим назначением, проверить, является ли ψ ( x ) ∧ xh x k k y k φ 2k ψ ψ x0 выполнимо). Если k не известно, вы можете найти k с помощью бинарного поиска или просто итерируя по каждому значению-кандидату k = 1 , 2 , … , n (где n - число булевых переменных в x ).ψ(x)∧x≠x0 k k k=1,2,…,n n x
Вы можете свободно выбирать хэш-функции. Возможно, вы захотите сделать это как можно проще. Одна чрезвычайно простая конструкция состоит в том, чтобы выбрал случайное подмножество k битов из x . Немного более сложная конструкция состоит в том, чтобы i- й бит h ( x ) был xor двух случайно выбранных битов из x (выбирая отдельную пару позиций бит для каждого i , независимо). Сохранение h простым будет ψ относительно простым.h k x i h(x) x i h ψ
Этот вид преобразования иногда используется / предлагается, как часть схемы для оценки числа удовлетворяющих присвоений формуле ; Я адаптировал это для вашей конкретной потребности.φ
В Интернете можно найти множество тестовых стендов экземпляров SAT, и вы можете применить это преобразование ко всем из них, чтобы получить коллекцию уникальных экземпляров -SAT.k
Другой возможностью было бы создание уникальных экземпляров -SAT из криптографии. Например, предположим, что f : { 0 , 1 } n → { 0 , 1 } n является криптографической односторонней перестановкой. Пусть x - случайно выбранный элемент из { 0 , 1 } n , и пусть y = f ( x ) . Тогда формула φ ( x ) определяется как f ( x ) =k f:{0,1}n→{0,1}n x {0,1}n y=f(x) φ(x) является уникальнымэкземпляром k -SAT. В качестве другого примера,случайным образомвыберите два больших простых числа p , q и пусть n = p q . Тогда формула φ ( x , y ), заданная как x ⋅ y = n ∧ x > 1 ∧ y > 1 ∧ x ≤ y (с очевидным соответствием между битовыми строками и целыми числами), является уникальной kf(x)=y k p,q n=pq φ(x,y) x⋅y=n∧x>1∧y>1∧x≤y k -SAT экземпляр. Тем не менее, эти конструкции не кажутся полезным способом для сравнения или оптимизации вашего решателя. Все они имеют особую структуру, и нет никаких оснований полагать, что эта структура является представителем реальных проблем. В частности, известно, что экземпляры SAT, извлеченные из криптографических задач, чрезвычайно сложны, намного сложнее, чем экземпляры SAT, взятые из многих других реальных приложений решателей SAT, поэтому они не являются хорошей основой для сравнительного анализа вашего решателя.
В целом, все методы, упомянутые в этом ответе, имеют недостаток, заключающийся в том, что они генерируют уникальные экземпляры -SAT с определенной структурой, поэтому они могут быть не тем, что вы ищете, или, по крайней мере, вы можете не захотеть полагаться исключительно по формулам, сгенерированным таким образом. Лучшим подходом было бы определить приложения Unique k -SAT (кто, по вашему мнению, будет использовать ваш решатель и для каких целей?), А затем попытаться получить некоторые реалистичные примеры из этих областей применения.k k
Для связанной темы, см. Также Создание интересных задач комбинаторной оптимизации
источник
Вы могли бы рассмотреть алгоритмы, которые используются для генерации головоломок Судоку - предположительно, обобщенные до - поскольку (обычно) головоломки Судоку должны иметь уникальное решение. С другой стороны, у головоломок Судоку обычно гарантированно есть хотя бы одно решение ... Но обнаружение этого решения все же может стать хорошим эталоном для вашего решателя.n×n
Вы можете использовать генератор судоку вместе с сокращением до SAT, или вы можете подумать о том, как применить методы, используемые при создании судоку, для более непосредственного создания уникальных экземпляров SAT. Что касается первого, очевидно, что ваши экземпляры SAT будут иметь некоторую структуру, но мне неясно, является ли она более или менее структурной, чем, например, установка решения или использование техники изоляции свидетеля. Вероятно, зависит от ваших потребностей и вашего решателя.
Единственное упоминание, о котором я здесь знаю, это: Создание головоломок судоку: от легкого к злому .
источник
Я думаю, что хорошим тестовым примером было бы генерировать случайные однозначно удовлетворяемые экземпляры 3XOR (посаженные экземпляры) с ограничениями а затем преобразовывать их в экземпляры 3SAT.Θ(n)
источник
imho Один из лучших способов создать «предположительно сложные» экземпляры SAT при управлении количеством решений - это использовать целочисленные факторинговые экземпляры / схемы, закодированные в двоичном виде. код не очень сложен, он использует в основном схемы сложения EE и не приводит к «большим» экземплярам SAT. количество решений равно количеству факторов (включая «перестановки» факторов). поэтому простые числа порождают ровно два решения: . одно решение может быть гарантировано при дальнейшем «сравнении» ограничение , которое ограничивает факторы , которые <(1,p),(p,1) a<b a≠1 b≠p .
Также при таком подходе это относительно легко найти номера с примерно однако многие факторы / растворы. чем «ровнее» число, тем больше факторов.
Различные исследователи на протяжении многих лет создавали этот код SAT факторинга (например, для соревнований DIMACS / arcihve, в котором хранились некоторые случаи факторинга в прошлом), но, к сожалению, эта версия не является общедоступной. см. также 1-ю ссылку ниже для ссылки, где код был написан / реализован, очевидно, для аспирантуры.
another empirical/iterative approach that may be useful for some, to create more "unstructured" instances: create random SAT instancesen near the transition point (the region where the equation has a probability 50% between "solvable and unsolvable"), and then solve the equation. if it is unsolvable, throw away and restart. if it is solvable, add clauses that restrict the solution "not" to be the found solution, obtaining en+1 , and re-solve. repeat if necessary. when the equation en+1 is no longer solvable, the en must have had a single/unique solution.
источник
You can easily generate directly Unique SAT formulas with reasonable size(|F|<n+2k)
Letm be the unique model - say m contains only "0"s (rename the variables later if needed).F a k -SAT formula satisfied only by m - the maximum size of F is the total number of clauses satisfied by m i.e. (2k−1)(nk) .
Let
Take the(k1) clauses that eliminate all models assigning exactly one "1" among x1,x2…xk :
(¬x1,x2…xk)(x1,¬x2…xk)…(x1,x2…¬xk)
Take the(k2) clauses that eliminate all models assigning exactly two "1" among x1,x2…xk :
(¬x1,¬x2,x3…xk)(¬x1,x2,¬x3…xk)…(x1,x2…¬xk−1¬xk)
Keep going until taking the only(kk) clause that eliminates all models assigning "1" to each variables among x1,x2…xk .
The only models which are not yet eliminated assign allx1,x2…xk to "0". Since m is a model, then take any set of n−k clauses that eliminate all models assigning "1" to xi(k<i≤n) and 0 to any k−1 variables among x1,x2…xk , for instance:
(¬xk+1,x1…,xk−1)…(¬xn,x1…xk−1) .
Then|F|=∑ki=1(ki)+n−k=2k−1+n−k
To get more clauses, add any clause containing at least one negated variable. To get an unsatisfiable formula, just add a clause withk unnegated variables.
источник