Prolog Constraint Processing: Packing Squares
Próbuję rozwiązać problem przetwarzania ograniczeń w prologu.
Muszę spakować 4 kwadraty o wymiarach 5x5,4x4,3x3 i 2x2 w siatce 10x10. Nie mogą się nakładać.
Moje zmienne wyglądają tak:
Name: SqX(i), i=1..10, domain: 1..10
Gdzie X to 5,4,3 lub 2. Indeks i reprezentuje rząd, domena kolumnę w siatce.
Moje pierwsze ograniczenia próbują zdefiniować szerokość i wysokość kwadratów. Formułuję to jako takie:
Constraint: SqX(i) > SqX(j)-X /\ i>j-X, range: i>0 /\ j>0
Aby możliwe punkty były ograniczone do siebie w X rzędach i kolumnach. Prolog zatrzymuje jednak te ograniczenia i daje następujący wynik:
Adding constraint "(Sq5_I > Sq5_J-5) /\ (I>J-5)" for values:
I=1, J=1,
I=1, J=2,
I=1, J=3,
I=1, J=4,
I=1, J=5,
I=1, J=6,
=======================[ End Solutions ]=======================
Więc zatrzymuje się tam, nawet nie sprawdzając innych kwadratów. Moje ograniczenia są najprawdopodobniej zbyt ciasne, ale nie widzę, dlaczego ani jak. Jakieś sugestie?