support search options, added 'restart'

This commit is contained in:
Denys Duchier
2011-12-01 22:48:28 +01:00
parent d9ce468a03
commit 7c78f52a89
3 changed files with 42 additions and 5 deletions

View File

@@ -344,13 +344,38 @@ maximize(Space,IVar1,IVar2) :-
assert_is_IntVar(IVar2,IVar2_),
gecode_space_maximize_ratio(Space_,IVar1_,IVar2_).
gecode_search_options_init(search_options(0)).
gecode_search_options_offset(restart,0).
gecode_search_options_from_alist(L,O) :-
gecode_search_options_init(O),
gecode_search_options_process_alist(L,O).
gecode_search_options_process_alist([],O).
gecode_search_options_process_alist([F=V|L],O) :- !,
gecode_search_options_set(F,V,O),
gecode_search_options_process_alist(L,O).
gecode_search_options_process_alist([F|L],O) :- !,
gecode_search_options_set(F,1,O),
gecode_search_options_process_alist(L,O).
gecode_search_options_set(F,V,O) :-
gecode_search_options_offset(F,I),
setarg(I,O,V).
search(Space, Solution) :-
search(Space, Solution, []).
search(Space, Solution, Alist) :-
assert_is_Space(Space,Space_),
assert_var(Solution),
gecode_new_engine(Space_,Engine_),
gecode_search_options_from_alist(Alist,O),
gecode_new_engine(Space_,Engine_,O),
gecode_engine_search(Engine_,Solution_),
Solution='Space'(Solution_).
%% INSPECTING VARIABLES
get_for_vars([],Space,[],F).
@@ -647,6 +672,7 @@ new_setvars_(L,Space,N,X1,X2) :- length(L,N), new_setvars(L,Space,X1,X2).
(X := clause(Disj)) :- !, new_clause(X,Disj).
(X := search(Y)) :- !, search(Y,X).
(X := search(Y,L)) :- !, search(Y,X,L).
% these should be autogenerated:
(C += forward(X,Y)) :- !, new_forward(C,X,Y).