Логическое программирование в ограничениях
За последние 20 лет программирование в ограничениях прошло путь от научной идеи до мощной парадигмы программирования, которая все больше используется для моделирования и решения многих трудных практически важных задач.
Под программированием в ограничениях (constraint programming) понимается программирование алгоритмов решения задач УО. Программирование в ограничениях, считающееся в настоящее время одним из стратегических направлений информатики[20], является декларативной парадигмой, позволяющей выразить многие прикладные задачи с помощью ограничений. Программирование в ограничениях состоит из двух необходимых компонентов: решателя ограничений и машины поиска.
Логическое программирование ‑ это парадигма программирования, основанная на логике. Его конструкты ‑ булевы импликации (т.е. или p:-q), композиций, использующих булевы операции конъюнкции и дизъюнкции. Логическое программирование может рассматриваться как процедурный язык, в котором процедуры ‑ это булевы функции, результат работы программы всегда истина или ложь.
Тот факт, что системы удовлетворения ограничений и логического программирования ‑ декларативные парадигмы, использующие отношения и поиск с возвратами, сделал их интеграцию легкой и естественной. Логическое программирование в ограничениях ‑ расширение логического программирования, в котором унификация может быть заменена или дополнена другими видами ограничений, определенных на доменах (областях определения) используемых переменных. Схема логического программирования в ограничениях (ЛПО) может рассматриваться как оболочка логического программирования, поддерживаемая системой ограничений, с помощью которой может записывать и решать любые ограничения. По этой причине схема ЛПО может обозначаться как ЛПО(X), где X определяет класс используемых ограничений.
Поскольку описание задачи в виде системы ограничений является декларативным, то при этом описывается, «что» должно выполняться, но не указывается, «как» это сделать.
Общепринятый подход к решению задач УО сочетает дерево поиска с возвратами с распространением ограничений. Это реализовано в системах программирования в ограничениях с конечными доменами, таких как SICStus Prolog, ILOG Solver, и Gecode.
Дата добавления: 2016-06-05; просмотров: 2512;