constraint_solver: Fix LocalSearchFilter samples

This commit is contained in:
Mizux Seiha
2020-08-10 18:01:58 +02:00
parent 3d51f19181
commit d4d88e1f64
8 changed files with 32 additions and 5 deletions

View File

@@ -101,8 +101,9 @@ def Solve(type):
print('Local Search with Filter')
move_one_var = MoveOneVar(vars)
sum_filter = SumFilter(vars)
filter_manager = pywrapcp.LocalSearchFilterManager([sum_filter])
ls_params = solver.LocalSearchPhaseParameters(sum_var, move_one_var, db, None,
[sum_filter])
filter_manager)
ls = solver.LocalSearchPhase(vars, db, ls_params)
collector = solver.LastSolutionCollector()

View File

@@ -723,6 +723,7 @@ void SolveDobble(int num_cards, int num_symbols, int num_symbols_per_card) {
// Main decision builder that regroups the first solution decision
// builder and the combination of local search operators and
// filters.
LocalSearchFilterManager* filter_manager = solver.RevAlloc(new LocalSearchFilterManager(filters));
DecisionBuilder* const final_db = solver.MakeLocalSearchPhase(
all_card_symbol_vars, build_db,
solver.MakeLocalSearchPhaseParameters(
@@ -731,7 +732,7 @@ void SolveDobble(int num_cards, int num_symbols, int num_symbols_per_card) {
nullptr, // Limit the search for improving move, we will stop
// the exploration of the local search at the first
// improving solution (first accept).
filters));
filter_manager));
std::vector<SearchMonitor*> monitors;
// Optimize var search monitor.

View File

@@ -174,9 +174,10 @@ public class CsLsApi
SumFilter filter = new SumFilter(vars);
IntVarLocalSearchFilter[] filters =
new IntVarLocalSearchFilter[] { filter };
LocalSearchFilterManager filter_manager = new LocalSearchFilterManager(filters);
LocalSearchPhaseParameters ls_params =
solver.MakeLocalSearchPhaseParameters(sum_var, move_one_var, db,
null, filters);
null, filter_manager);
DecisionBuilder ls = solver.MakeLocalSearchPhase(vars, db, ls_params);
SolutionCollector collector = solver.MakeLastSolutionCollector();
collector.AddObjective(sum_var);

View File

@@ -20,6 +20,7 @@ import com.google.ortools.constraintsolver.IntVar;
import com.google.ortools.constraintsolver.IntVarLocalSearchFilter;
import com.google.ortools.constraintsolver.IntVarLocalSearchOperator;
import com.google.ortools.constraintsolver.LocalSearchPhaseParameters;
import com.google.ortools.constraintsolver.LocalSearchFilterManager;
import com.google.ortools.constraintsolver.OptimizeVar;
import com.google.ortools.constraintsolver.SearchLog;
import com.google.ortools.constraintsolver.SearchMonitor;
@@ -173,8 +174,9 @@ public class TestConstraintSolver {
SumFilter filter = new SumFilter(vars);
IntVarLocalSearchFilter[] filters = new IntVarLocalSearchFilter[1];
filters[0] = filter;
LocalSearchFilterManager filter_manager = new LocalSearchFilterManager(filters);
LocalSearchPhaseParameters lsParams =
solver.makeLocalSearchPhaseParameters(sumVar, moveOneVar, db, null, filters);
solver.makeLocalSearchPhaseParameters(sumVar, moveOneVar, db, null, filter_manager);
DecisionBuilder ls = solver.makeLocalSearchPhase(vars, db, lsParams);
SolutionCollector collector = solver.makeLastSolutionCollector();
collector.addObjective(sumVar);

View File

@@ -822,6 +822,13 @@ namespace operations_research {
%unignore LocalSearchFilter::Synchronize;
%unignore LocalSearchFilter::IsIncremental;
// LocalSearchFilterManager
%feature("director") LocalSearchFilterManager;
%unignore LocalSearchFilterManager;
// Methods:
%unignore LocalSearchFilterManager::Accept;
%unignore LocalSearchFilterManager::Synchronize;
// IntVarLocalSearchFilter
%feature("director") IntVarLocalSearchFilter;
%unignore IntVarLocalSearchFilter;

View File

@@ -1423,6 +1423,12 @@ import java.util.function.LongToIntFunction;
%rename (isIncremental) LocalSearchFilter::IsIncremental;
%rename (synchronize) LocalSearchFilter::Synchronize;
// LocalSearchFilterManager
%feature("director") LocalSearchFilterManager;
%unignore LocalSearchFilterManager;
%rename (accept) LocalSearchFilterManager::Accept;
%rename (synchronize) LocalSearchFilterManager::Synchronize;
// IntVarLocalSearchFilter
%feature("director") IntVarLocalSearchFilter;
%unignore IntVarLocalSearchFilter;

View File

@@ -114,6 +114,7 @@ PY_CONVERT_HELPER_PTR(IntervalVar);
PY_CONVERT_HELPER_PTR(SequenceVar);
PY_CONVERT_HELPER_PTR(LocalSearchOperator);
PY_CONVERT_HELPER_PTR(LocalSearchFilter);
PY_CONVERT_HELPER_PTR(LocalSearchFilterManager);
PY_CONVERT_HELPER_INTEXPR_OR_INTVAR(IntVar);
PY_CONVERT_HELPER_INTEXPR_OR_INTVAR(IntExpr);
@@ -128,6 +129,7 @@ PY_CONVERT(IntervalVar);
PY_CONVERT(SequenceVar);
PY_CONVERT(LocalSearchOperator);
PY_CONVERT(LocalSearchFilter);
PY_CONVERT(LocalSearchFilterManager);
// Support passing std::function<void(Solver*)> as argument.
// See ../utils/python/functions.i, from which this was copied and adapted.
@@ -2053,6 +2055,12 @@ namespace operations_research {
%unignore LocalSearchFilter::Synchronize;
%unignore LocalSearchFilter::IsIncremental;
// LocalSearchFilterManager
%unignore LocalSearchFilterManager;
%unignore LocalSearchFilterManager::LocalSearchFilterManager;
%unignore LocalSearchFilterManager::~LocalSearchFilterManager;
%unignore LocalSearchFilterManager::Accept;
%unignore LocalSearchFilterManager::Synchronize;
// IntVarLocalSearchFilter
// Ignored:

View File

@@ -180,10 +180,11 @@ void SolveProblem(SolveType solve_type) {
MoveOneVar* const one_var_ls = s.RevAlloc(new MoveOneVar(vars));
std::vector<LocalSearchFilter*> filters;
filters.push_back(s.RevAlloc(new SumFilter(vars)));
LocalSearchFilterManager* filter_manager = s.RevAlloc(new LocalSearchFilterManager(filters));
LocalSearchPhaseParameters* const ls_params =
s.MakeLocalSearchPhaseParameters(sum_var, one_var_ls, db,
nullptr, filters);
nullptr, filter_manager);
ls = s.MakeLocalSearchPhase(vars, db, ls_params);
break;
}