41 lines
1.5 KiB
Java
41 lines
1.5 KiB
Java
package jobshop.solvers;
|
|
|
|
import jobshop.Instance;
|
|
import jobshop.encodings.Schedule;
|
|
import jobshop.solvers.neighborhood.Neighborhood;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
import java.util.Optional;
|
|
|
|
public class DescentSolverMultiStart implements Solver {
|
|
final Neighborhood neighborhood;
|
|
final List<Solver> solvers = List.of(new GreedySolver(GreedySolver.Priority.SPT),
|
|
new GreedySolver(GreedySolver.Priority.LRPT),
|
|
new GreedySolver(GreedySolver.Priority.EST_SPT),
|
|
new GreedySolver(GreedySolver.Priority.EST_LRPT));
|
|
|
|
public DescentSolverMultiStart(Neighborhood neighborhood) {
|
|
this.neighborhood = neighborhood;
|
|
}
|
|
|
|
@Override
|
|
public Optional<Schedule> solve(Instance instance, long deadline, int randomness, int randomRunNumber){
|
|
Integer best = Integer.MAX_VALUE;
|
|
Schedule bestSchedule = null;
|
|
|
|
// we try all greedy solvers for the starting solution
|
|
for (Solver s : solvers){
|
|
System.out.println();
|
|
System.out.println("\u001b[36m" + "Trying with solver : " + s.toString() + "\u001b[0m");
|
|
DescentSolver descentSolver = new DescentSolver(neighborhood, s);
|
|
Schedule solution = descentSolver.solve(instance,deadline,randomness,randomRunNumber).get();
|
|
if (solution.makespan() < best){
|
|
best = solution.makespan();
|
|
bestSchedule = solution;
|
|
}
|
|
}
|
|
return Optional.of(bestSchedule);
|
|
}
|
|
}
|