38 lines
1.9 KiB
Java
38 lines
1.9 KiB
Java
package jobshop.solvers;
|
|
|
|
import jobshop.Instance;
|
|
import jobshop.encodings.Schedule;
|
|
import jobshop.solvers.neighborhood.Nowicki;
|
|
|
|
import java.util.Optional;
|
|
|
|
/** Common interface that must implemented by all solvers. */
|
|
public interface Solver {
|
|
|
|
/** Look for a solution until blocked or a deadline has been met.
|
|
*
|
|
* @param instance Jobshop instance that should be solved.
|
|
* @param deadline Absolute time at which the solver should have returned a solution.
|
|
* This time is in milliseconds and can be compared with System.currentTimeMilliseconds()
|
|
* @return An optional schedule that will be non empty if a solution was found.
|
|
*/
|
|
Optional<Schedule> solve(Instance instance, long deadline, int randomness, int randomRunNumber);
|
|
|
|
/** Static factory method to create a new solver based on its name. */
|
|
static Solver getSolver(String name) {
|
|
switch (name) {
|
|
case "basic": return new BasicSolver();
|
|
case "spt": return new GreedySolver(GreedySolver.Priority.SPT);
|
|
case "lrpt": return new GreedySolver(GreedySolver.Priority.LRPT);
|
|
case "est_spt": return new GreedySolver(GreedySolver.Priority.EST_SPT);
|
|
case "est_lrpt": return new GreedySolver(GreedySolver.Priority.EST_LRPT);
|
|
case "desc_est_spt": return new DescentSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.EST_SPT));
|
|
case "desc_est_lrpt": return new DescentSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.EST_LRPT));
|
|
case "desc_multi": return new DescentSolverMultiStart(new Nowicki());
|
|
case "taboo_est_spt": return new TabooSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.EST_SPT));
|
|
case "taboo_est_lrpt": return new TabooSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.EST_LRPT));
|
|
default: throw new RuntimeException("Unknown solver: "+ name);
|
|
}
|
|
}
|
|
|
|
}
|