2016-05-11 5 views
3

Я пытаюсь выяснить, что такое распространение границ в , но, похоже, не может найти хорошего объяснения нигде.Что такое распространение границ в clpfd

Я пересматриваю для Prolog и clpfd и наткнулся на этот вопрос, но, глядя на лекции, это не имеет смысла для меня. Не мог бы кто-нибудь объяснить фактическое значение распространения границ и то, для чего он используется.

Вот вопрос, который я имею в виду:

Когда следующая программа Prolog

:- use_module(library(clpfd)).
bounds(X, Y, Z) :- 
    X in 1..5, 
    Y in 1..2, 
    Z in 3..5, 
    X #= Y + Z. 
опрашивается это дает ответ:

?- bounds(X, Y, Z). 
X in 4..5, 
Y in 1..2, 
Z in 3..4.

Объясните, как распространение границы могут быть применены для вывода этот ответ.

ответ

4

Я даю вам старт:

После того как все ограничения размещены, одна вещь, сразу ясно: X является на   наименьшем   4. Почему? Поскольку Y составляет по меньшей мере 1   и Z составляет по меньшей мере 3   и X является суммой из   Y и   Z.

Учитывая эти знания, пройти через посланные ограничения снова, и посмотреть, если вы можете настроить любые границы.

Это то, что распространение границ: проходит через границы всех переменных и видит, можно ли отрегулировать любой из них из-за размещенных ограничений. Это повторяется до тех пор, пока не произойдет более возможного сокращения домена.

+2

совершенное спасибо, это имеет большой смысл сейчас – user6248190