Вот один из способов генерирования уникального экземпляра -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)∧x≠x0kkk=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)x⋅y=n∧x>1∧y>1∧x≤yk-SAT экземпляр. Тем не менее, эти конструкции не кажутся полезным способом для сравнения или оптимизации вашего решателя. Все они имеют особую структуру, и нет никаких оснований полагать, что эта структура является представителем реальных проблем. В частности, известно, что экземпляры SAT, извлеченные из криптографических задач, чрезвычайно сложны, намного сложнее, чем экземпляры SAT, взятые из многих других реальных приложений решателей SAT, поэтому они не являются хорошей основой для сравнительного анализа вашего решателя.
В целом, все методы, упомянутые в этом ответе, имеют недостаток, заключающийся в том, что они генерируют уникальные экземпляры -SAT с определенной структурой, поэтому они могут быть не тем, что вы ищете, или, по крайней мере, вы можете не захотеть полагаться исключительно по формулам, сгенерированным таким образом. Лучшим подходом было бы определить приложения Unique k -SAT (кто, по вашему мнению, будет использовать ваш решатель и для каких целей?), А затем попытаться получить некоторые реалистичные примеры из этих областей применения.kk
Для связанной темы, см. Также Создание интересных задач комбинаторной оптимизации