Это возможно, чтобы решить эту проблему охватывания подмножества с SAT Solver?

cs.stackexchange https://cs.stackexchange.com/questions/118667

Вопрос

Проблема в том, чтобы найти $ \ Mathcal {s} $ , минимальный сбор подмножеств $ \ {1 , \ dots, 17 \} $ Так что два условия выполнены:

  1. Если $ s \ subsretq \ mathcal {s} $ затем $ | s |= 6 $ ;
  2. для любого $ a \ subsEtq \ {1, \ dots, 17 \} $ с $ | A |= 3 $ , существует $ s \ in \ mathcal {s} $ с $ a \ подмножество s $ .
  3. Смотрите Здесь для связанной комбинаторной проблемы ..

    Я думаю, что это может быть сформулировано как проблема с SAT.

    Для каждого $ s \ subsretq \ {1, \ dots, 17 \} $ с $ | S |= 6 $ , мы вводим переменную $ x_s $ . И для каждого $ a \ subsEtq \ {1, \ dots, 17 \} $ с $ | A |= 3 $ , мы вводим предложение $$ \ vee_ {s: \ subsEtq s, | s |= 6} x_ {s} $$ Затем в основном мы можем использовать SAT Solver для поиска минимального количества $ x_s $ , который должен быть правдой, чтобы удовлетворить все пункты.

    Это нуждается в $ \ binom {17} {6}= 12376 $ Переменные, $ \ binom {17} { 3}= 680 $ Представления длины $ \ binom {17-3} {3}= 364 $ .

    У меня очень мало опыта в фактическом использовании SAT Solvers. Так это на самом деле стоит попробовать на моем ноутбуке или вообще нет надежды?

    ---

    Обновление

    Оказывается много исследований на установленном покрытии. Похоже, что я был над амбициозным, чтобы попытаться решить проблему для параметров (17, 6, 3).

    Это уже открытая проблема для (12, 5, 3).

    см. см. Здесь для более подробной информации.

    ---

    Обновление 2

    попытался написать все в чистом сете, и это совсем немного быстрее с использованием cadical, чем z3.

    Кроме того, значительно быстрее найти решение, чем показывать, не существуют решения.

    Я пытался сломать симметрию, добавив ограничения, что первый и последний подмножество в порядке лексикома должен быть выбран.

Это было полезно?

Решение

Оптимизация с SAT обычно называется Maxsat вместо мин SAT.В частности, я предлагаю поиск решеток для «взвешенного частичного Maxsat», например MaxHS и RC2.

Размер проблемы, у вас есть довольно маленький в контексте современных Maxsat-Solvers, поэтому да стоит попробовать.Нет никаких гарантий, что решатель будет работать эффективно, и очень сложно предсказать, если оно будет работать эффективно, поэтому лучшее, что нужно попробовать.

Другие советы

С SAT, может быть сложно предсказать, что будет осуществимо и что не будет. Это стоит попробовать.

Я бы предположил, что вместо Minsat вы сначала попробуйте использовать двоичный поиск на $ n= | \ mathcal {s} | $ , количество устанавливающих вас нужно. Вы можете использовать AT-Sist- $ N $ -OUT -OUT-12376 Ограничение на вашем $ x_s $ Переменные. Есть Несколько Техника Для кодирования, что в SAT, хотя на практике я бы сначала попробую использовать Ply с решателем Z3.

Ваша проблема имеет много симметрии. SAT Solvers иногда могут испытывать трудности с симметрией. Вы можете попытаться сделать столько, сколько сможете сломать симметрию. Например, без потери общности можно предположить, что $ \ {1,2,3,4,5,6 \} $ - один из наборов (в противном случае Permute Все номера так есть), поэтому вы можете жестко определить этот факт в свой экземпляр SAT. Чем больше таких лемм вы можете доказать, тем лучше может выполнить Sat Solver.

Вы также можете закончить наборы по-разному. Пусть $ s_i $ обозначает $ i $ th set, который выбран $ \ mathcal {s} $ . Введите PORIABLESS $ x_ {i, j} $ , чтобы указать, что $ j \ in s_i $ и переменные < SPAN CLASS= «Математический контейнер»> $ y_ {i, a} $ , чтобы указать, что $ \ subset s_i $ , для каждого $ a \ subsretq \ {1, \ dots, 17 \} $ с $ | A |= 3 $ и Каждый $ i \ in \ {1, \ dots, n \} $ и каждая $ j \ in \ {1, \ dots, 17 \} $ . Добавить предложение $ \ bigvee_i y_ {i, a} $ Для каждого $ a $ , чтобы гарантировать, что каждый $ a $ покрыт хотя бы одним набором. Добавьте ограничение на 6 из 17 для каждого $ i $ , чтобы указать, что ровно 6 из $ x_ {i J} $ true. Наконец, добавьте ограничения для обеспечения обеспечения обеспечения согласованности между $ x $ 's и $ y $ $ a={a_1, a_2, a_3 \} $ , Добавить пункты $ \ neg x_ { i, a_1} \ lor \ neg x_ {i, a_2} \ lor \ neg x_ {i, a_3} \ lor y_ {i, a} $ и $ \ neg y_ {i, a} \ lor x_ {i, a_1} $ и $ \ neg y_ {i, a} \ lor x_ {i, a_2} $ < / span> и $ \ neg y_ {i, a} \ lor x_ {i, a_3} $ . Это потребует около $ (17 + 680) n $ Переменные и $ 4 \ cdot 680 n $ не подсчитание $ n $ 6-из 17 ограничений); Поскольку я ожидаю, что я ожидаю $ n \ около 35 $ , это около 24k переменных и 100К объявлений. Это больше положений, чем ваша кодировка, и у него еще больше симметричная симметрия, поэтому он может выполнять хуже - хотя они более короткие пункты, и трудно предсказать, какие кодировки будут лучше всего работать с SAT, поэтому часто требуется некоторые эксперименты.

Вы также можете попробовать выразить это как экземпляр ILP вместо SAT.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с cs.stackexchange
scroll top