Уникальные тесты


16

Этот вопрос, вероятно, находится на границе между темой и темой, однако я видел подобные вопросы здесь, поэтому я задам его.


Я реализую уникальный k -SAT-решатель, вход которого представляет собой формулу k -CNF, имеющую не более 1 удовлетворительного назначения. Чтобы проверить его практическое поведение, мне нужен набор таких формул. Я искал их в Интернете и ничего не нашел (хотя, с другой стороны, очень легко найти наборы обычных формул k CNF).

Где я могу найти уникальные экземпляры k -SAT?

В качестве альтернативы я хотел бы также знать любую процедуру для генерации уникально удовлетворяемых экземпляров. Единственный подход, о котором я знаю, идет под именем генерации установленного экземпляра SAT : вы случайным образом генерируете назначение n переменных, а затем генерируете только те предложения, которые согласуются с таким назначением. Этот подход неудовлетворителен для моих целей по следующим причинам:

  • Полученная формула может иметь дополнительные нежелательные удовлетворяющие назначения.
  • Чтобы быть уверенным, что формула однозначно удовлетворяется желаемым присваиванием, вы должны ввести все возможные пункты, которые с ней согласны. Это приведет к получению формул со слишком большим количеством предложений, которые, вероятно, будет легко решить и, следовательно, не будут отражать поведение решателя в худшем случае. Для меня не очевидно, как мы можем эффективно навязывать уникальность, сохраняя при этом разумное количество пунктов.

Как мы можем генерировать однозначно выполнимые формулы с разумным количеством предложений? Под разумным я подразумеваю далеко от максимума .2k(nk)


Дана формула SAT с переменными и предложениями. Если число предложений находится между и то формула либо однозначно выполнима, либо не выполнима. .. Я также разработал уравнения для k-SAT. Я дам вам знать, если я найду это. Fnm3n2n3n2n2n1F
Тайфун Pay

Если у вас есть достаточно времени (и экземпляры достаточно малы), вы можете генерировать экземпляры при фазовом переходе и тестировать их с помощью решателя SAT. Если формула не имеет решения, откажитесь от нее. Если у него есть решение X, добавьте предложение, настаивающее, что решение не является X, и снова запустите решатель. Это простой, но медленный.
Эндрю Д. Кинг

Ответы:


7

Вот один из способов генерирования уникального экземпляра -SAT, учитывая экземпляр SAT φ, который, как вы знаете, выполним. Рассмотрим формулу ф ( х ) , данноеkφψ(x)

φ(x)h(x)=y,

где является хэш - функция , которая отображает задание х к к -битных значение (для некоторого малого значения к ), и у является случайной K значения -битный. Если φ имеет около 2 k удовлетворяющих заданий, то (эвристически) мы предполагаем, что ψ будет иметь только одно удовлетворяющее присваивание (с постоянной вероятностью). Мы можем проверить, является ли это случаем, используя решатель SAT (а именно, проверить, является ли ψ выполнимым; если это так, и x 0 является одним удовлетворяющим назначением, проверить, является ли ψ ( x ) xhxkkykφ2kψψx0 выполнимо). Если k не известно, вы можете найти k с помощью бинарного поиска или просто итерируя по каждому значению-кандидату k = 1 , 2 , , n (где n - число булевых переменных в x ).ψ(x)xx0kkk=1,2,,nnx

Вы можете свободно выбирать хэш-функции. Возможно, вы захотите сделать это как можно проще. Одна чрезвычайно простая конструкция состоит в том, чтобы выбрал случайное подмножество k битов из x . Немного более сложная конструкция состоит в том, чтобы i- й бит h ( x ) был xor двух случайно выбранных битов из x (выбирая отдельную пару позиций бит для каждого i , независимо). Сохранение h простым будет ψ относительно простым.hkxih(x)xihψ

Этот вид преобразования иногда используется / предлагается, как часть схемы для оценки числа удовлетворяющих присвоений формуле ; Я адаптировал это для вашей конкретной потребности.φ

В Интернете можно найти множество тестовых стендов экземпляров SAT, и вы можете применить это преобразование ко всем из них, чтобы получить коллекцию уникальных экземпляров -SAT.k


Другой возможностью было бы создание уникальных экземпляров -SAT из криптографии. Например, предположим, что f : { 0 , 1 } n{ 0 , 1 } n является криптографической односторонней перестановкой. Пусть x - случайно выбранный элемент из { 0 , 1 } n , и пусть y = f ( x ) . Тогда формула φ ( x ) определяется как f ( x ) =kf:{0,1}n{0,1}nx{0,1}ny=f(x)φ(x) является уникальнымэкземпляром k -SAT. В качестве другого примера,случайным образомвыберите два больших простых числа p , q и пусть n = p q . Тогда формула φ ( x , y ), заданная как x y = n x > 1 y > 1 x y (с очевидным соответствием между битовыми строками и целыми числами), является уникальной kf(x)=ykp,qn=pqφ(x,y)xy=nx>1y>1xyk-SAT экземпляр. Тем не менее, эти конструкции не кажутся полезным способом для сравнения или оптимизации вашего решателя. Все они имеют особую структуру, и нет никаких оснований полагать, что эта структура является представителем реальных проблем. В частности, известно, что экземпляры SAT, извлеченные из криптографических задач, чрезвычайно сложны, намного сложнее, чем экземпляры SAT, взятые из многих других реальных приложений решателей SAT, поэтому они не являются хорошей основой для сравнительного анализа вашего решателя.


В целом, все методы, упомянутые в этом ответе, имеют недостаток, заключающийся в том, что они генерируют уникальные экземпляры -SAT с определенной структурой, поэтому они могут быть не тем, что вы ищете, или, по крайней мере, вы можете не захотеть полагаться исключительно по формулам, сгенерированным таким образом. Лучшим подходом было бы определить приложения Unique k -SAT (кто, по вашему мнению, будет использовать ваш решатель и для каких целей?), А затем попытаться получить некоторые реалистичные примеры из этих областей применения.kk

Для связанной темы, см. Также Создание интересных задач комбинаторной оптимизации


Первая часть вашего криптографического абзаца неверна, поскольку (если существуют односторонние функции) существуют односторонние функции, которые не являются инъективными.

Спасибо, @RickyDemer! Я имел в виду одностороннюю перестановку, но это было не то, что я написал. Исправлена.
DW

6

Вы могли бы рассмотреть алгоритмы, которые используются для генерации головоломок Судоку - предположительно, обобщенные до - поскольку (обычно) головоломки Судоку должны иметь уникальное решение. С другой стороны, у головоломок Судоку обычно гарантированно есть хотя бы одно решение ... Но обнаружение этого решения все же может стать хорошим эталоном для вашего решателя.n×n

Вы можете использовать генератор судоку вместе с сокращением до SAT, или вы можете подумать о том, как применить методы, используемые при создании судоку, для более непосредственного создания уникальных экземпляров SAT. Что касается первого, очевидно, что ваши экземпляры SAT будут иметь некоторую структуру, но мне неясно, является ли она более или менее структурной, чем, например, установка решения или использование техники изоляции свидетеля. Вероятно, зависит от ваших потребностей и вашего решателя.

Единственное упоминание, о котором я здесь знаю, это: Создание головоломок судоку: от легкого к злому .


4

Я думаю, что хорошим тестовым примером было бы генерировать случайные однозначно удовлетворяемые экземпляры 3XOR (посаженные экземпляры) с ограничениями а затем преобразовывать их в экземпляры 3SAT.Θ(n)


2

imho Один из лучших способов создать «предположительно сложные» экземпляры SAT при управлении количеством решений - это использовать целочисленные факторинговые экземпляры / схемы, закодированные в двоичном виде. код не очень сложен, он использует в основном схемы сложения EE и не приводит к «большим» экземплярам SAT. количество решений равно количеству факторов (включая «перестановки» факторов). поэтому простые числа порождают ровно два решения: . одно решение может быть гарантировано при дальнейшем «сравнении» ограничение , которое ограничивает факторы , которые <(1,p),(p,1)a<ba1bp .

Также при таком подходе это относительно легко найти номера с примерно однако многие факторы / растворы. чем «ровнее» число, тем больше факторов.

Различные исследователи на протяжении многих лет создавали этот код SAT факторинга (например, для соревнований DIMACS / arcihve, в котором хранились некоторые случаи факторинга в прошлом), но, к сожалению, эта версия не является общедоступной. см. также 1-ю ссылку ниже для ссылки, где код был написан / реализован, очевидно, для аспирантуры.

another empirical/iterative approach that may be useful for some, to create more "unstructured" instances: create random SAT instances en 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.


I mentioned the factoring approach in my answer earlier, but I also explained why it might not be an ideal testbed: "However, these constructions do not seem like a useful way to benchmark or optimize your solver. They all have a special structure, and there is no reason to believe that this structure is representative of real-world problems. In particular, SAT instances drawn from cryptographic problems are known to be extremely hard, much harder than SAT instances drawn from many other real-world applications of SAT solvers, so they aren't a very good basis for benchmarking your solver."
D.W.

so the above is a different pov that if one wants very hard instances, obviously a natural test case for any solver, then factoring is indeed a promising way to go. seriously doubt that you could find any published opinions that mirror yours. to repeat, factoring instances have been put in DIMACS challenge archives by serious researcher(s) starting many years ago. anyway, your contrary opinion is not even really expressed in a self-consistent way. cryptography is indeed a foremost/applied real world problem even more so than many abstract/abstruse/academic problems used for SAT instances...
vzn

2

You can easily generate directly Unique SAT formulas with reasonable size (|F|<n+2k)

Let m be the unique model - say m contains only "0"s (rename the variables later if needed).
Let 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. (2k1)(nk).

Take the (k1) clauses that eliminate all models assigning exactly one "1" among x1,x2xk:
(¬x1,x2xk)(x1,¬x2xk)(x1,x2¬xk)

Take the (k2) clauses that eliminate all models assigning exactly two "1" among x1,x2xk:
(¬x1,¬x2,x3xk)(¬x1,x2,¬x3xk)(x1,x2¬xk1¬xk)

Keep going until taking the only (kk) clause that eliminates all models assigning "1" to each variables among x1,x2xk.

The only models which are not yet eliminated assign all x1,x2xk to "0". Since m is a model, then take any set of nk clauses that eliminate all models assigning "1" to xi(k<in) and 0 to any k1 variables among x1,x2xk, for instance:
(¬xk+1,x1,xk1)(¬xn,x1xk1).

Then |F|=i=1k(ki)+nk=2k1+nk

To get more clauses, add any clause containing at least one negated variable. To get an unsatisfiable formula, just add a clause with k unnegated variables.


There is a problem in your answer : we have n variables and this means that and not k
Elaqqad
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.