users-prolog
[Top][All Lists]

## Re: Unexpected result with FD solver

 From: Jean Michel LECONTE Subject: Re: Unexpected result with FD solver Date: Mon, 17 Feb 2003 19:07:57 +0100

try :
```ieq(LD1,LD2,Va):-
LD1 = [X1,X2,X3,X4],
LD2 = [D1,D2],
fd_domain(LD1,0,20),
fd_domain(LD2,1,12),
Va #=<5,
Va #>=0,
X1 #=0,
X2 #=< X1+4,
X2 #>= X1+2,
X3 #= X1+D1,
X4 #= X2+D2,
D1 #=< D2+Va,
D1 #>= D2-Va,
X4 #=< X3,
fd_labeling(LD1),
fd_labeling(LD2),
```
fd_labeling(Va). read the note in the doc about fd_labeling, you have to do this operation if you want some answers cause when gprolog says
```
LD1 = [0,_#25(2..4),_#47(3..12),_#69(3..12)]
LD2 = [_#91(3..12),_#113(1..10)]
Va = _#134(0..5)
```
```
```
it just means that Va could be between 0 and 5 but thts not meaning that there's a solution... gprolog tries to reduce the domain of possible values for each FD (i.e. constrained) variable but if you want a solution you have to 'label' each FD variable and the _#integer(a..b) means FD variable which has integer for internal system number (as an internal ID) is between a and b
```
Jean Michel LECONTE
-----------------------------------------
```
-----------------------------------------
```

```
Xiao-Hua Kong writes:
Hello,
```I'm a beginer in Prolog, I want to use GNU Prolog for constraint sovling
in FD. I have tried the solver with a set of in-equations. But for some of
```
them, I did not get the result expected. Here is an example: I wrote a rule:
```ieq(LD1,LD2,Va):-
LD1 = [X1,X2,X3,X4],
LD2 = [D1,D2],
fd_domain(LD1,0,20),
fd_domain(LD2,1,12),
Va #=<5,
Va #>=0,
X1 #= 0,
X2 #=< X1+4,
X2 #>= X1+2,
X3 #= X1+D1,
X4 #= X2+D2,
D1 #=< D2+Va,
D1 #>= D2-Va,
X4 #=< X3.
```
And asked for the possible assignment for these in-equations
```(constraints).
```
However I got the follwing result: | ?- ieq(LD1,LD2,Va).
```        LD1 = [0,_#25(2..4),_#47(3..12),_#69(3..12)]
LD2 = [_#91(3..12),_#113(1..10)]
```
Va = _#134(0..5)
```In which the resulting domain of Va is larger than it should be. For
```
example, ask | ?- ieq(LD1,LD2,0). or | ?- ieq(LD1,LD2,1). will have an answer "no".
```Is there any problem with the code? Or I should not use more than three
```
variables in a constraint? How can I solve this problem. BTW, what does _#integer mean in the result?
```Thanks in advance.
```
Xiaohua Kong
```_______________________________________________
Users-prolog mailing list
```