2016-05-11 20 views
3

Ich versuche herauszufinden, was die Ausbreitung der Grenzen in ist, aber kann nicht scheinen, eine gute Erklärung nirgendwo zu finden.Was ist die Ausbreitung der Grenzen in clpfd

Ich revidiere für Prolog und clpfd und bin auf diese Frage gestoßen, aber wenn ich mir die Vorlesungsnotizen ansehe, ergibt das für mich keinen Sinn. Könnte jemand bitte die tatsächliche Bedeutung der Grenzenverbreitung erklären und wofür sie benutzt wird? Hier

ist die Frage, die ich mich beziehe:

Wenn das folgende Prolog-Programm

:- use_module(library(clpfd)).
bounds(X, Y, Z) :- 
    X in 1..5, 
    Y in 1..2, 
    Z in 3..5, 
    X #= Y + Z. 
abgefragt wird, erhält man die Antwort:

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

Erklären Sie, wie Grenzen Ausbreitung angewendet werden kann geschlossen werden diese Antwort.

Antwort

4

Ich gebe Ihnen einen Start:

Nachdem alle Einschränkungen gebucht werden, ist eine Sache sofort klar: X ist bei   dest   4. Warum? Da Y mindestens   1 und Z mindestens   3 und X ist die Summe von   Y und   Z.

dieses Wissen, In Anbetracht der gebuchten Einschränkungen gehen durch wieder, und sehen Sie, wenn Sie irgendwelche Grenzen einstellen.

Dies ist, was Grenzen Ausbreitung tut: Durch die Grenzen aller Variablen gehen und sehen, ob einige von ihnen aufgrund der geposteten Einschränkungen angepasst werden können. Dies wird wiederholt, bis keine weiteren Domänenreduktionen mehr möglich sind.

+2

perfekt danke, das macht jetzt sehr viel Sinn – user6248190