debuggecode
This commit is contained in:
@@ -260,7 +260,7 @@ constraint( (_ #<==> _) ).
|
||||
constraint( (_ #==> _) ).
|
||||
constraint( (_ #<== _) ).
|
||||
constraint( (_ #\/ _) ).
|
||||
constraint( in(_, _) ). %2,
|
||||
constraint( fd_in(_, _) ). %2,
|
||||
constraint( ins(_, _) ). %2,
|
||||
constraint( all_different(_) ). %1,
|
||||
constraint( all_distinct(_) ). %1,
|
||||
@@ -292,7 +292,7 @@ constraint( zcompare(_, _, _) ). %3,
|
||||
constraint( chain(_, _) ). %2,
|
||||
constraint( element(_, _) ). %2,
|
||||
constraint( fd_var(_) ). %1,
|
||||
constraint( fd_inf(_, _) ). %2,
|
||||
sconstraint( fd_inf(_, _) ). %2,
|
||||
constraint( fd_sup(_, _) ). %2,
|
||||
constraint( fd_size(_, _) ). %2,
|
||||
constraint( fd_dom(_, _) ). %2
|
||||
@@ -453,6 +453,7 @@ fd_sum( L, Op, V) :-
|
||||
m(X, NX, NA, NB, Map),
|
||||
NX := intvar(Space, NA, NB).
|
||||
( X fd_in A..B) :-
|
||||
var(X),
|
||||
get_home(Space-Map),
|
||||
check(A, NA),
|
||||
check(B, NB),
|
||||
@@ -549,6 +550,22 @@ clause( or, Ps, Ns, V ) :-
|
||||
check(V, NV),
|
||||
post(clause( 'BOT_OR', NPs, NNs, NV), Env, _ ).
|
||||
|
||||
bool_labeling(Opts, Xs) :-
|
||||
get_home(Space-Map),
|
||||
foldl2( processs_bool_lab_opt, Opts, 'BOOL_VAR_DEGREE_MIN', BranchVar, 'BOOL_VAL_MIN', BranchVal),
|
||||
term_variables(Xs, Vs),
|
||||
check( Vs, X1s ),
|
||||
( X1s == [] -> true ;
|
||||
maplist(ll(Map), X1s, NXs),
|
||||
Space += branch(NXs, BranchVar, BranchVal) ).
|
||||
|
||||
processs_bool_lab_opt(leftmost, _, 'BOOL_VAR_NONE', BranchVal, BranchVal).
|
||||
processs_bool_lab_opt(min, _, 'BOOL_VAR_DEGREE_MIN', BranchVal, BranchVal).
|
||||
processs_bool_lab_opt(max, _, 'BOOL_VAR_DEGREE_MAX', BranchVal, BranchVal).
|
||||
processs_bool_lab_opt(min_step, BranchVar, BranchVar, _, 'BOOL_VAL_MIN').
|
||||
processs_bool_lab_opt(max_step, BranchVar, BranchVar, _, 'BOOL_VAL_MIN').
|
||||
processs_bool_lab_opt(enum, BranchVar, BranchVar, _, 'BOOL_VALUES_MIN').
|
||||
|
||||
labeling(Opts, Xs) :-
|
||||
get_home(Space-Map),
|
||||
foldl2( processs_lab_opt, Opts, 'INT_VAR_SIZE_MIN', BranchVar, 'INT_VAL_MIN', BranchVal),
|
||||
@@ -594,7 +611,9 @@ check(V, NV) :-
|
||||
V = '$matrix'(_, _, _, _, C) -> C =.. [_|L], maplist(check, L, NV) ;
|
||||
V = A+B -> check(A,NA), check(B, NB), NV = NB+NA ;
|
||||
V = A-B -> check(A,NA), check(B, NB), NV = NB-NA ;
|
||||
V in Domain -> V fd_in Domain, V=NV ;
|
||||
V = A/\B -> check(A,NA), check(B, NB), NV = NB/\NA ;
|
||||
V = A\/B -> check(A,NA), check(B, NB), NV = NB\/NA ;
|
||||
V fd_in A..B, var(V) -> check(A,NA), check(B, NB), NV fd_in NB..NA ;
|
||||
arith(V, _) -> V =.. [C|L], maplist(check, L, NL), NV =.. [C|NL] ;
|
||||
constraint(V) -> V =.. [C|L], maplist(check, L, NL), NV =.. [C|NL] ).
|
||||
|
||||
@@ -678,9 +697,21 @@ post( rel( sum(Foreach, Cond), Op, Out), Space-Map, Reify):- !,
|
||||
Space += linear(Cs, IL, GOP, IOut);
|
||||
Space += linear(Cs, IL, GOP, IOut, Reify)
|
||||
).
|
||||
post( rel( sum(L0), Op, Out), Space-Map, Reify):-
|
||||
!,
|
||||
selectlist(var,L0,L,LC),
|
||||
sumlist(LC,0),
|
||||
( var(Out) -> l(Out, IOut, Map) ; integer(Out) -> IOut = Out ; equality(Out, NOut, Space-Map), l(NOut, IOut, Map) ),
|
||||
maplist(ll(Map), [Out|L], [IOut|IL] ),
|
||||
gecode_arith_op( Op, GOP ),
|
||||
(L = [] -> true ;
|
||||
var(Reify) ->
|
||||
Space += linear(Cs, IL, GOP, IOut);
|
||||
Space += linear(Cs, IL, GOP, IOut, Reify)
|
||||
).
|
||||
|
||||
post( rel(A1+A2, Op, B), Space-Map, Reify):-
|
||||
( nonvar(B) ; B = _ + _ ; B = _-_), !,
|
||||
( var(B) ; B = _ + _ ; B = _-_), !,
|
||||
linearize(A1+A2, 1, As, Bs, CAs, CBs, 0, A0, Space-Map),
|
||||
linearize(B, -1, Bs, [], CBs, [], A0, B0, Space-Map),
|
||||
gecode_arith_op( Op, GOP ),
|
||||
@@ -697,7 +728,7 @@ post( rel(A1+A2, Op, B), Space-Map, Reify):-
|
||||
).
|
||||
|
||||
post( rel(A1-A2, Op, B), Space-Map, Reify):-
|
||||
( nonvar(B) ; B = _ + _ ; B = _-_), !,
|
||||
( var(B) ; B = _ + _ ; B = _-_), !,
|
||||
linearize(A1-A2, 1, As, Bs, CAs, CBs, 0, A0, Space-Map),
|
||||
linearize(B, -1, Bs, [], CBs, [], A0, B0, Space-Map),
|
||||
gecode_arith_op( Op, GOP ),
|
||||
@@ -731,6 +762,15 @@ post( rel(A, Op, B), Space-Map, Reify):-
|
||||
equality(B, B1, Space-Map),
|
||||
out_c(Name, VA1, B1, Op, Space-Map, Reify).
|
||||
|
||||
post( rel(A1 \/ A2, Ope, B), Space-Map, Reify):-
|
||||
!,
|
||||
equality(A1, NA1, Space-Map),
|
||||
in_c(NA1, VA1, Space-Map),
|
||||
equality(A2, NA2, Space-Map),
|
||||
in_c(NA2, VA2, Space-Map),
|
||||
equality(B, B1, Space-Map),
|
||||
out_c('\\/', VA1, VA2, B1, Op, Space-Map, Reify).
|
||||
|
||||
post( rel(A, Op, B), Space-Map, Reify):-
|
||||
arith(A, Name),
|
||||
A =.. [_Op,A1,A2], !,
|
||||
@@ -874,7 +914,6 @@ linearize(AC, C, [A|Bs], Bs, [C|CBs], CBs, I, I, Env) :-
|
||||
Env = _-Map,
|
||||
l(V, A, Map).
|
||||
|
||||
arith('\\/'(_,_), (\/)).
|
||||
arith('=>'(_,_), (=>)).
|
||||
arith('<=>'(_,_), (<=>)).
|
||||
arith(xor(_,_), xor).
|
||||
@@ -1010,7 +1049,8 @@ out_c(Name, A1, A2, B, Op, Space-Map, Reify) :-
|
||||
).
|
||||
% X*Y #= Cin[..]
|
||||
out_c(Name, A1, A2, B, (#=), Space-Map, Reify) :-
|
||||
var(Reify),
|
||||
Name \= '\\/',
|
||||
var(Reify),
|
||||
l(B, IB, Map), !,
|
||||
l(A1, IA1, Map),
|
||||
l(A2, IA2, Map),
|
||||
|
@@ -288,7 +288,7 @@ is_IntVar_('IntVar'(I,K),N) :-
|
||||
nb_getval(gecode_space_use_keep_index,B),
|
||||
(B=true -> N=K ; N=I).
|
||||
is_FloatVar_('FloatVar'(I,K),N) :-
|
||||
integer(I),
|
||||
integer(I),
|
||||
integer(K),
|
||||
nb_getval(gecode_space_use_keep_index,B),
|
||||
(B=true -> N=K ; N=I).
|
||||
@@ -479,6 +479,30 @@ is_IntVarBranch_(X, X) :-
|
||||
is_IntVarBranch(X,Y) :- nonvar(X), is_IntVarBranch_(X,Y).
|
||||
is_IntVarBranch(X) :- is_IntVarBranch(X,_).
|
||||
|
||||
%% Var and Val Branching changed in Gecode 4 to be done as a set of functions,
|
||||
%%% not as an enum.
|
||||
|
||||
is_BoolVarBranch_('BOOL_VAR_NONE').
|
||||
is_BoolVarBranch_('BOOL_VAR_RND'(_)).
|
||||
%is_BoolVarBranch_('BOOL_VAR_MERIT_MIN'(_)).
|
||||
%is_BoolVarBranch_('BOOL_VAR_MERIT_MAX'(_)).
|
||||
is_BoolVarBranch_('BOOL_VAR_DEGREE_MIN').
|
||||
is_BoolVarBranch_('BOOL_VAR_DEGREE_MAX').
|
||||
is_BoolVarBranch_('BOOL_VAR_MAX_MIN').
|
||||
is_BoolVarBranch_('BOOL_VAR_MAX_MAX').
|
||||
is_BoolVarBranch_('BOOL_VAR_AFC_MIN'(_)).
|
||||
is_BoolVarBranch_('BOOL_VAR_AFC_MAX'(_)).
|
||||
is_BoolVarBranch_('BOOL_VAR_ACTION_MIN'(_)).
|
||||
is_BoolVarBranch_('BOOL_VAR_ACTION_MAX'(_)).
|
||||
is_BoolVarBranch_('BOOL_VAR_CHB_MIN'(_)).
|
||||
is_BoolVarBranch_('BOOL_VAR_CHB_MAX'(_)).
|
||||
|
||||
is_BoolVarBranch_(X, X) :-
|
||||
is_BoolVarBranch_(X).
|
||||
|
||||
is_BoolVarBranch(X,Y) :- nonvar(X), is_BoolVarBranch_(X,Y).
|
||||
is_BoolVarBranch(X) :- is_BoolVarBranch(X,_).
|
||||
|
||||
is_SetVarBranch_('SET_VAR_NONE').
|
||||
is_SetVarBranch_('SET_VAR_RND'(_)).
|
||||
is_SetVarBranch_('SET_VAR_MERIT_MIN'(_)).
|
||||
@@ -557,6 +581,16 @@ is_IntValBranch_(X,X) :- is_IntValBranch_(X).
|
||||
is_IntValBranch(X,Y) :- nonvar(X), is_IntValBranch_(X,Y).
|
||||
is_IntValBranch(X) :- is_IntValBranch(X,_).
|
||||
|
||||
is_BoolValBranch_('BOOL_VAL_RND'(_)).
|
||||
is_BoolValBranch_('BOOL_VAL'(_,_)).
|
||||
is_BoolValBranch_('BOOL_VAL_MIN').
|
||||
is_BoolValBranch_('BOOL_VAL_MAX').
|
||||
|
||||
is_BoolValBranch_(X,X) :- is_BoolValBranch_(X).
|
||||
|
||||
is_BoolValBranch(X,Y) :- nonvar(X), is_BoolValBranch_(X,Y).
|
||||
is_BoolValBranch(X) :- is_BoolValBranch(X,_).
|
||||
|
||||
is_SetValBranch_('SET_VAL_RND_INC'(_)).
|
||||
is_SetValBranch_('SET_VAL_RND_EXC'(_)).
|
||||
is_SetValBranch_('SET_VAL'(_,_)).
|
||||
|
Reference in New Issue
Block a user