예제 #1
0
    private static void BasicLsWithFilter()
    {
        Console.WriteLine("BasicLsWithFilter");
        Solver solver = new Solver("BasicLs");

        IntVar[]        vars    = solver.MakeIntVarArray(4, 0, 4, "vars");
        IntVar          sum_var = vars.Sum().Var();
        OptimizeVar     obj     = sum_var.Minimize(1);
        DecisionBuilder db      =
            solver.MakePhase(vars, Solver.CHOOSE_FIRST_UNBOUND, Solver.ASSIGN_MAX_VALUE);
        MoveOneVar move_one_var = new MoveOneVar(vars);
        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, filter_manager);
        DecisionBuilder   ls        = solver.MakeLocalSearchPhase(vars, db, ls_params);
        SolutionCollector collector = solver.MakeLastSolutionCollector();

        collector.AddObjective(sum_var);
        SearchMonitor log = solver.MakeSearchLog(1000, obj);

        solver.Solve(ls, collector, obj, log);
        Console.WriteLine("Objective value = {0}", collector.ObjectiveValue(0));
    }
예제 #2
0
    private static void BasicLns()
    {
        Console.WriteLine("BasicLns");
        Solver solver = new Solver("BasicLns");

        IntVar[]        vars    = solver.MakeIntVarArray(4, 0, 4, "vars");
        IntVar          sum_var = vars.Sum().Var();
        OptimizeVar     obj     = sum_var.Minimize(1);
        DecisionBuilder db      = solver.MakePhase(vars,
                                                   Solver.CHOOSE_FIRST_UNBOUND,
                                                   Solver.ASSIGN_MAX_VALUE);
        OneVarLns one_var_lns = new OneVarLns(vars);
        LocalSearchPhaseParameters ls_params =
            solver.MakeLocalSearchPhaseParameters(one_var_lns, db);
        DecisionBuilder   ls        = solver.MakeLocalSearchPhase(vars, db, ls_params);
        SolutionCollector collector = solver.MakeLastSolutionCollector();

        collector.AddObjective(sum_var);
        SearchMonitor log = solver.MakeSearchLog(1000, obj);

        solver.Solve(ls, collector, obj, log);
        Console.WriteLine("Objective value = {0}", collector.ObjectiveValue(0));
    }