Metaheuristiques-Lacroix-Le.../src/main/java/jobshop/solvers/DescentSolverMultiStart.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);
}
}