Обработка ограничений Prolog: Упаковочные квадраты
Я пытаюсь решить проблему обработки ограничений в прологе.
Мне нужно упаковать 4 квадрата 5x5,4x4,3x3 и 2x2 в сетке 10x10. Они не могут пересекаться.
Мои переменные выглядят так:
Name: SqX(i), i=1..10, domain: 1..10
Где X 5,4,3 или 2. Индекс i представляет строку, домен - столбец в сетке.
Мои первые ограничения пытаются определить ширину и высоту квадратов. Я формулирую это так:
Constraint: SqX(i) > SqX(j)-X /\ i>j-X, range: i>0 /\ j>0
Так что возможные точки ограничены, чтобы быть в пределах X строк и столбцов друг от друга. Пролог, однако, останавливается на этих ограничениях и дает следующий результат:
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 ]=======================
Так что это останавливается там, даже не проверяя другие квадраты. Мои ограничения, скорее всего, слишком жесткие, но я не понимаю, почему и как. Какие-либо предложения?