12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package jobshop.solvers;
-
- import jobshop.Instance;
- import jobshop.Result;
- import jobshop.encodings.ResourceOrder;
- import jobshop.solvers.neighborhood.Nowicki;
-
- import java.util.ArrayList;
- import java.util.List;
-
- /** 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 A Result containing the solution found and an explanation of why the solver exited.
- */
- ArrayList<Result> solve(Instance instance, long deadline);
-
- void setIterMax(int iterMax);
-
- void setpts(int pts);
-
- /** 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 "random": return new RandomSolver();
- case "spt": return new GreedySolver(GreedySolver.Priority.SPT);
- case "lpt": return new GreedySolver(GreedySolver.Priority.LPT);
- case "srpt": return new GreedySolver(GreedySolver.Priority.SRPT);
- case "lrpt": return new GreedySolver(GreedySolver.Priority.LRPT);
- case "est_spt": return new GreedySolver(GreedySolver.Priority.EST_SPT);
- case "est_lpt": return new GreedySolver(GreedySolver.Priority.EST_LPT);
- case "est_srpt": return new GreedySolver(GreedySolver.Priority.EST_SRPT);
- case "est_lrpt": return new GreedySolver(GreedySolver.Priority.EST_LRPT);
- case "descent_spt": return new DescentSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.SPT));
- case "descent_lpt": return new DescentSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.LPT));
- case "descent_srpt": return new DescentSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.SRPT));
- case "descent_lrpt": return new DescentSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.LRPT));
- case "descent_est_spt": return new DescentSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.EST_SPT));
- case "descent_est_lpt": return new DescentSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.EST_LPT));
- case "descent_est_srpt": return new DescentSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.EST_SRPT));
- case "descent_est_lrpt": return new DescentSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.EST_LRPT));
- case "taboo_spt": return new TabooSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.SPT));
- case "taboo_lpt": return new TabooSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.LPT));
- case "taboo_srpt": return new TabooSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.SRPT));
- case "taboo_lrpt": return new TabooSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.LRPT));
- case "taboo_est_spt": return new TabooSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.EST_SPT));
- case "taboo_est_lpt": return new TabooSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.EST_LPT));
- case "taboo_est_srpt": return new TabooSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.EST_SRPT));
- case "taboo_est_lrpt": return new TabooSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.EST_LRPT));
- // TODO: add new solvers
- default: throw new RuntimeException("Unknown solver: "+ name);
- }
- }
-
- }
|