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