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.6KB

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