Програмування в обмеженнях
Програмування в обмеженнях (або програмування обмеженнями) — парадигма програмування, у якій відношення між змінними зазначені у формі обмежень. Обмеження відрізняються від загальних примітивів мов імперативного програмування тим, що вони визначають не послідовність кроків для виконання, а властивості шуканого рішення. Це робить програмування в обмеженнях формою декларативного програмування. Обмеження, які використовуються в програмуванні в обмеженнях, бувають різних видів: ті, які використовуються в задачах задоволення умов (наприклад, «А або В істинно»), ті, які розв'язуються симплекс-алгоритмом (наприклад, «x ≤ 5») й інші. Обмеження, як правило, убудовані в мову програмування або здійснюються через окремі програмні бібліотеки.
Програмування в обмеженнях почалося із логічного програмування з обмеженнями, яке є вкладанням обмежень у логічне програмування. Поява цього варіанта логічного програмування пов'язана з іменами Jaffar і Lassez, які розширили в 1987 році певний клас обмежень, що були уведені в Prolog II. Першими реалізаціями логічного програмування в обмеженнях були Пролог III, CLP (R) і CHIP. Деякі інтерпретатори логічного програмування в обмеженнях існують і сьогодні, наприклад GNU Prolog.
Крім логічного програмування, обмеження можуть бути змішані з функціональним програмуванням, переписуванням термів та імперативною мовою. Мови програмування з убудованою підтримкою обмежень включають Oz (функціональне програмування) і Kaleidoscope (імперативне програмування). Головним чином, обмеження здійснюються в імперативних мовах через інструментальні засоби для розв'язування задач із обмеженнями, які є окремими бібліотеками для існуючих імперативних мов.
Логічне програмування в обмеженнях
Детальніші відомості з цієї теми ви можете знайти в статті Логічне програмування в обмеженнях.
Часові обмеження паралельного програмування (KTC) і недетерміновані часові обмеження паралельного програмування (NTCC) є варіантами програмування в обмеженнях, які можуть мати справу з часом.
Деякі мови, що підтримують програмування в обмеженнях
- Alma-0 невелика, строго типізована, мова обмежень з незначною кількістю функцій логічного програмування, що підтримують імперативне програмування.
- Bertrand — мова для побудови систем програмування в обмеженнях.
- Common Lisp за допомогою Screamer — (вільна бібліотека програмного забезпечення, яке забезпечує відкіт і CLP(R), можливості CHiP).
Див. також
- Комбінаторна оптимізація
- Евристичний алгоритм
- Оптимізація (математика), (математичне програмування)
- Мова програмування п’ятого покоління
Посилання
- Інформація про щорічну конференцію CP (англ.)
- Онлайн керівництво з програмування в обмеженнях (англ.)
- Irvin J. Lustig, Jean-François Puget. Program Does Not Equal Program: Constraint Programming and Its Relationship to Mathematical Programming // Interfaces. Vol. 31, No. 6, November-December 2001, pp. 29-53. ISSN 1526-551X (online) (Програма не дорівнює програмі: програмування в обмеженнях і його відношення до математичного програмування) (англ.)
- Mozart (Oz-базована, безкоштовне програмне забезпечення: X11 стиль) (англ.)
- Cork Constraint Computation Centre (4C) (англ.)