Podręcznik
1. Programowanie w ograniczeniach
Programowanie w ograniczeniach (Constraint Programming) jest jedną z ogólnych metod rozwiązywania problemów, w których występują zmienne dyskretne. Choć może być wykorzystywane do optymalizacji rozwiązań, to w pierwotnym sformułowaniu bazuje na poszkiwaniu rozwiązania dopuszczalnego dla zadanego zbioru ograniczeń oraz zmiennych wraz z ich domenami (brak funkcji celu).
Problem spełnienia ograniczeń (Constraint satisfaction problem, CSP) jest opisywany przez trójkę
, gdzie
Ograniczenie
, gdzie
jest definiowane przez zbiór możliwych wartości
podzbioru
zmiennych
, a więc
, jakie zmienne
mogą jednocześnie przyjąć.Domeną zmiennej decyzyjnej
jest zbiór wartości, które zmienna może przyjąć. Przykładowo, jeżeli
jest zmienną binarną jej domeną jest zbiór
. W wyniku działania algorytmów domeny mogą być zawężane. Przykładowo, załóżmy następujące ograniczenie
gdzie
są zmiennymi binarnymi. Początkowa domena zmiennej
jest
. Jedna jak łatwo zauważyć, w przypadku
nie jest możliwe spełnienie ograniczenia, a zatem domena dla
może zostać zawężona do zbioru jednoelementowego
.W trakcie rozwiązywania problemu do zmiennych przypisywane są wartości z ich domen. Przypisanie może być częściowe lub całkowite. Przypisanie
przypisuje podzbiorowi zmiennych
wartości
. Rozwiązaniem problemu CSP jest kompletne przypisanie
takie, że zbiór wartości
należy do każdego zbioru
(czyli spełnia wszystkie ograniczenia).Problem optymalizacji w ograniczeniach (Constraint optimization problem, COP) jest problemem spełnienia ograniczeń wraz z przypisaną funkcją celu. Rozwiązanie optymalne to rozwiązanie skojarzonego problemu CSP, które minimalizuje (maksymalizuję) funkcję celu.
Jednak COP może być używane nie tylko w kontekście poszukiwania rozwiązania najlepszego. Inne możliwe scenariusze to poszukiwanie rozwiązania dopuszczalnego (np. dla problemów, w których znalezienie dopuszczalności jest już zadaniem trudnym), udowodnienie optymalności zadanego rozwiązania lub udowodnienie sprzeczności problemu.


