В чем разница между SAT и линейным программированием

У меня есть проблема оптимизации, которая подвергается линейным ограничениям. Как узнать, какой метод лучше для моделирования и решения проблемы. Обычно я спрашиваю о решении проблемы как проблемы выполнимости (SAT или SMT) по сравнению с решением проблемы линейного программирования (ILP ИЛИ MILP).

У меня нет больших знаний в обоих. Поэтому, пожалуйста, упростите свой ответ, если он у вас есть.


person Rehab11    schedule 30.11.2018    source источник
comment
Не могли бы вы яснее описать вашу проблему, пожалуйста? Задача оптимизации, связанная с линейными ограничениями, не дает много значимой информации. Боюсь, что без него нет лучшего ответа на этот вопрос, чем прочитать, что такое SAT и LP/ILP.   -  person MyStackRunnethOver    schedule 01.12.2018
comment
Зависит от множества деталей. Но ключевые слова оптимизация (вместо выполнимости) и линейные ограничения медленно отдаляют его от чистого SAT. Я вижу, вы использовали программирование ограничения тега. Это еще один подход, несколько ортогональный другим.   -  person sascha    schedule 01.12.2018
comment
@MyStackRunnerOver Приведу пример. Хочу раздать мин. Возможное количество сенсорных узлов в области, при котором обеспечивается определенный уровень качества. Под качеством я подразумеваю набор показателей, таких как охват....и т.д.   -  person Rehab11    schedule 01.12.2018
comment
@sascha, почему его отодвинули от SAT? когда я провел некоторый поиск, я обнаружил, что упоминается программирование с ограничениями. Но мне не понятна разница между 3 понятиями: SMT, LP и программирование в ограничениях? И как узнать, какой из них подходит для каких проблем?   -  person Rehab11    schedule 01.12.2018
comment
Поскольку SAT полностью посвящен осуществимости, а оптимизация имеет менее развитую теорию, чем, например. доступны в ILP. Либо вы проводите тщательное исследование, чтобы понять различия, либо официально представляете свою проблему, чтобы получить рекомендации. Объяснение различий между этими понятиями не входит в задачи StackOverflow. Многие основные вещи даже не совсем понятны. Но в целом: эти подходы имеют разные системы проверки, и некоторые проблемы действительно затрудняют обработку в некоторых системах. Простой пример: sum(x) <= 1 очень проблематичен в SAT, и исследования предложили много разных кодировок.   -  person sascha    schedule 01.12.2018
comment
Как насчет решателей SMT, которые поддерживают оптимизацию. Z3 например.   -  person Rehab11    schedule 01.12.2018
comment
Еще зависит от задачи (все возможно: от ужасно медленного до очень быстрого по сравнению с SAT; имхо: чаще первое, но ну... проблемно-зависимо). Это (обычно) решатели SAT (на основе) с дополнительными системами проверки (например, секущими плоскостями), включение которых приносит в жертву много необработанной мощности решателей SAT. Редактировать: только что увидел, что в комментарии (но не в вопросе) есть некоторая неформальная информация о проблеме: больше похоже на математическую задачу, требующую решателей MICP ( выпуклая › линейная; зависит от ваших точных метрик; здесь очень важно использовать метрики!).   -  person sascha    schedule 01.12.2018
comment
Еще несколько простых примеров проблемы.   -  person sascha    schedule 01.12.2018


Ответы (1)


Вообще говоря, разница в том, что SAT ищет только возможные решения, в то время как ILP пытается оптимизировать что-то с учетом ограничений. Я полагаю, что некоторые решатели ILP фактически используют решатели SAT для получения начального допустимого решения. Проблема сенсорного массива, которую вы описываете в комментарии, сформулирована как ILP: «минимизируйте этот объект до этого». Вместо этого SAT-версия выбрала бы максимально допустимое количество датчиков и использовала бы его в качестве ограничения. Теперь это проблема выполнимости, но не та, которую легко выразить в конъюнктивной нормальной форме. Я бы рекомендовал использовать решатель с теорией целых чисел. Мой любимый Z3.

Однако, прежде чем отказываться от оптимизации, стоит попробовать GMPL/GLPK. Вы можете быть удивлены тем, насколько решаема ваша проблема. Если вам не так повезло, превратите это в проблему выполнимости и выведите Z3.

person Matthew Woodruff    schedule 04.12.2018
comment
Я уже пытаюсь использовать z3. А как насчет оптимизации с помощью Z3? Насколько я знаю, он поддерживает многоцелевую оптимизацию. В таком случае, в чем разница с LP? - person Rehab11; 04.12.2018
comment
Многокритериальная оптимизация с Z3 будет слишком дорогой — или, скорее, если ваша проблема настолько сложна, что вам нужен Z3, вероятно, будет дорого решить ее многокритериальную версию. Решатели ILP определенно являются одноцелевыми, хотя, если проблема выполнимости одинакова для каждой цели, вы, вероятно, можете подключиться к решателю, чтобы отслеживать все возможные решения, которые вы нашли, а затем сортировать их по Парето. - person Matthew Woodruff; 04.12.2018