No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Solver.java 3.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package jobshop.solvers;
  2. import jobshop.Instance;
  3. import jobshop.Result;
  4. import jobshop.encodings.ResourceOrder;
  5. import jobshop.solvers.neighborhood.Nowicki;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. /** Common interface that must implemented by all solvers. */
  9. public interface Solver {
  10. /** Look for a solution until blocked or a deadline has been met.
  11. *
  12. * @param instance Jobshop instance that should be solved.
  13. * @param deadline Absolute time at which the solver should have returned a solution.
  14. * This time is in milliseconds and can be compared with System.currentTimeMilliseconds()
  15. * @return A Result containing the solution found and an explanation of why the solver exited.
  16. */
  17. ArrayList<Result> solve(Instance instance, long deadline);
  18. void setIterMax(int iterMax);
  19. void setpts(int pts);
  20. /** Static factory method to create a new solver based on its name. */
  21. static Solver getSolver(String name) {
  22. switch (name) {
  23. case "basic": return new BasicSolver();
  24. case "random": return new RandomSolver();
  25. case "spt": return new GreedySolver(GreedySolver.Priority.SPT);
  26. case "lpt": return new GreedySolver(GreedySolver.Priority.LPT);
  27. case "srpt": return new GreedySolver(GreedySolver.Priority.SRPT);
  28. case "lrpt": return new GreedySolver(GreedySolver.Priority.LRPT);
  29. case "est_spt": return new GreedySolver(GreedySolver.Priority.EST_SPT);
  30. case "est_lpt": return new GreedySolver(GreedySolver.Priority.EST_LPT);
  31. case "est_srpt": return new GreedySolver(GreedySolver.Priority.EST_SRPT);
  32. case "est_lrpt": return new GreedySolver(GreedySolver.Priority.EST_LRPT);
  33. case "descent_spt": return new DescentSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.SPT));
  34. case "descent_lpt": return new DescentSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.LPT));
  35. case "descent_srpt": return new DescentSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.SRPT));
  36. case "descent_lrpt": return new DescentSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.LRPT));
  37. case "descent_est_spt": return new DescentSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.EST_SPT));
  38. case "descent_est_lpt": return new DescentSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.EST_LPT));
  39. case "descent_est_srpt": return new DescentSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.EST_SRPT));
  40. case "descent_est_lrpt": return new DescentSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.EST_LRPT));
  41. case "taboo_spt": return new TabooSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.SPT));
  42. case "taboo_lpt": return new TabooSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.LPT));
  43. case "taboo_srpt": return new TabooSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.SRPT));
  44. case "taboo_lrpt": return new TabooSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.LRPT));
  45. case "taboo_est_spt": return new TabooSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.EST_SPT));
  46. case "taboo_est_lpt": return new TabooSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.EST_LPT));
  47. case "taboo_est_srpt": return new TabooSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.EST_SRPT));
  48. case "taboo_est_lrpt": return new TabooSolver(new Nowicki(), new GreedySolver(GreedySolver.Priority.EST_LRPT));
  49. // TODO: add new solvers
  50. default: throw new RuntimeException("Unknown solver: "+ name);
  51. }
  52. }
  53. }