В прошлом я реализовывал модели координации, используя SAT и регулярное удовлетворение ограничений в качестве основной рабочей силы в своих двигателях. Продолжая эту работу, я хотел бы сделать модели более интерактивными, и лучший способ, которым я это вижу, состоит в том, чтобы открыть решатель ограничений, чтобы он больше не был черным ящиком.
Таким образом, мне интересно узнать больше об удовлетворении ограничений, когда ограничения имеют то, что я буду называть внешними переменными , предикатами и функциями , то есть язык ограничений может иметь предикаты, такие как которые могут быть удовлетворены только путем консультации с некоторыми агент, внешний по отношению к решателю, и только тогда, когда х заземлен. Сценарий, в котором это полезно, - это всякий раз, когда P соответствует некоторому внешнему процессу принятия решения, который не может быть включен в решатель ограничений. Такие решатели ограничений можно назвать открытыми (поскольку ограничения не совсем известны) или интерактивными (поскольку взаимодействие необходимо для продолжения удовлетворения ограничений).
Я хотел бы знать оба:
- теоретические исследования, проведенные в этом направлении
- инструменты или библиотеки, которые реализуют решатели ограничений, которые позволяют взаимодействовать с внешним миром в процессе решения ограничений.
Читая ваш вопрос, я также согласен с тем, чтобы сказать, что теории удовлетворенности по модулю тесно связаны с вашими потребностями. Я бы предложил почитать книгу « Процедуры принятия решений - алгоритмическая точка зрения» .
источник
источник
Я немного смущен термином интерактив. Я поделюсь с другими и добавлю, что SMT решатель может быть полезным. В дополнение к комментарию Уолтера Бишопа доступны слайды для книги «Процедуры принятия решений» (Кренинг и Стрихман). Тщательное обращение с Джоном Харрисоном в «Руководстве по практической логике и автоматическому мышлению» также может вас заинтересовать. Пример кода доступен онлайн.
Принцесса Филиппа Рюммера поддерживает арифметику с неинтерпретированными предикатами, которые могут соответствовать тому, что вы подразумеваете под открытым. Он написан на Scala, использует E-match при обработке количественного определения и предоставляет интерполанты.
источник
Что касается инструментов, если вы решите использовать Prolog в качестве языка выбора, я могу предложить несколько подходов к реализации:
Prolog - это язык программирования, который подходит для многих видов решателей (и у большинства из них есть конечные доменные решатели).
источник