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?

questionAnswers(4)

yourAnswerToTheQuestion