speedup .NET example
This commit is contained in:
@@ -18,13 +18,14 @@ using Google.OrTools.Sat;
|
||||
|
||||
public class NurseSolutionObserver : CpSolverSolutionCallback
|
||||
{
|
||||
public NurseSolutionObserver(IntVar[,,] shifts, int num_nurses, int num_days, int num_shifts, HashSet<int> to_print)
|
||||
public NurseSolutionObserver(IntVar[,,] shifts, int num_nurses, int num_days, int num_shifts, HashSet<int> to_print, int last_solution_explored)
|
||||
{
|
||||
shifts_ = shifts;
|
||||
num_nurses_ = num_nurses;
|
||||
num_days_ = num_days;
|
||||
num_shifts_ = num_shifts;
|
||||
to_print_ = to_print;
|
||||
last_solution_explored_ = last_solution_explored;
|
||||
}
|
||||
|
||||
public override void OnSolutionCallback()
|
||||
@@ -48,6 +49,9 @@ public class NurseSolutionObserver : CpSolverSolutionCallback
|
||||
}
|
||||
}
|
||||
}
|
||||
if (solution_count_ >= last_solution_explored_) {
|
||||
StopSearch();
|
||||
}
|
||||
}
|
||||
|
||||
public int SolutionCount()
|
||||
@@ -61,6 +65,7 @@ public class NurseSolutionObserver : CpSolverSolutionCallback
|
||||
private int num_days_;
|
||||
private int num_shifts_;
|
||||
private HashSet<int> to_print_;
|
||||
private int last_solution_explored_;
|
||||
}
|
||||
|
||||
public class NursesSat
|
||||
@@ -190,12 +195,11 @@ public class NursesSat
|
||||
CpSolver solver = new CpSolver();
|
||||
// Display a few solutions picked at random.
|
||||
HashSet<int> to_print = new HashSet<int>();
|
||||
to_print.Add(859);
|
||||
to_print.Add(2034);
|
||||
to_print.Add(5091);
|
||||
to_print.Add(7003);
|
||||
NurseSolutionObserver cb = new NurseSolutionObserver(shift, num_nurses, num_days, num_shifts, to_print);
|
||||
solver.StringParameters = "enumerate_all_solutions:true";
|
||||
to_print.Add(200);
|
||||
to_print.Add(410);
|
||||
to_print.Add(650);
|
||||
NurseSolutionObserver cb = new NurseSolutionObserver(shift, num_nurses, num_days, num_shifts, to_print, 650);
|
||||
solver.StringParameters = "linearization_level:2 enumerate_all_solutions:true";
|
||||
CpSolverStatus status = solver.Solve(model, cb);
|
||||
|
||||
// Statistics.
|
||||
|
||||
Reference in New Issue
Block a user