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 2.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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. // TODO: add new solvers
  38. default: throw new RuntimeException("Unknown solver: "+ name);
  39. }
  40. }
  41. }