Jesper Eskilson a écrit :
Hi,
I'm using the FD solver in GNU prolog to solve a couple of problems
over at http://ProjectEuler.net. The problem I'm currently solving is
this: http://projecteuler.net/index.php?section=problems&id=39:
If p is the perimeter of a right angle triangle with integral length
sides, {a,b,c}, there are exactly three solutions for p = 120.
{20,48,52}, {24,45,51}, {30,40,50}
For which value of p 1000, is the number of solutions maximised?
This sounds like an excellent problem for applying some CLP/FD, I
thought, and wrote this program:
perimeter([P,X,Y,Z]) :-
X #>= 1,
Y #>= X,
Z #>= Y,
P #= X + Y + Z,
X ** 2 + Y ** 2 #= Z ** 2,
fd_all_different([X,Y,Z]),
fd_labeling([P,X,Y,Z]).
p39(0, Length, Length).
p39(P, MaxLen, Length) :-
findall([X,Y,Z], perimeter([P,X,Y,Z]), Solutions),
length(Solutions, NewLen),
max_list([NewLen, MaxLen], NewMaxLen),
P0 is P - 1,
p39(P0, NewMaxLen, Length).
p39(MaxLen) :-
p39(1000, 0, MaxLen).
but when I run it, I get lots and lots of warnings on the form:
Warning: Vector too small - maybe lost solutions (FD Var:_54)
What does this warning mean? And how do I avoid getting it?
Hi,
This is due to the value of vector_max variable which is set to 127 by
default. Try to increase the value of fd_vector_max to 512 or upper value :
export VECTORMAX=512 (in bash before running gprolog)
or by changing the flag :
fd_set_vector_max(512). (of course after running gprolog!)
See page: http://www.gprolog.org/manual/gprolog.html#fd-set-vector-max/1
You may have to increase also the Global Stack value (see documentation
at http://www.gprolog.org/manual/gprolog.html#htoc11
Regards.
Ali.
_______________________________________________
Users-prolog mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/users-prolog