job-shop-lib 0.1.0__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. job_shop_lib/__init__.py +20 -0
  2. job_shop_lib/base_solver.py +37 -0
  3. job_shop_lib/benchmarking/__init__.py +78 -0
  4. job_shop_lib/benchmarking/benchmark_instances.json +1 -0
  5. job_shop_lib/benchmarking/load_benchmark.py +142 -0
  6. job_shop_lib/cp_sat/__init__.py +5 -0
  7. job_shop_lib/cp_sat/ortools_solver.py +201 -0
  8. job_shop_lib/dispatching/__init__.py +49 -0
  9. job_shop_lib/dispatching/dispatcher.py +269 -0
  10. job_shop_lib/dispatching/dispatching_rule_solver.py +111 -0
  11. job_shop_lib/dispatching/dispatching_rules.py +160 -0
  12. job_shop_lib/dispatching/factories.py +206 -0
  13. job_shop_lib/dispatching/pruning_functions.py +116 -0
  14. job_shop_lib/exceptions.py +26 -0
  15. job_shop_lib/generators/__init__.py +7 -0
  16. job_shop_lib/generators/basic_generator.py +197 -0
  17. job_shop_lib/graphs/__init__.py +52 -0
  18. job_shop_lib/graphs/build_agent_task_graph.py +209 -0
  19. job_shop_lib/graphs/build_disjunctive_graph.py +78 -0
  20. job_shop_lib/graphs/constants.py +21 -0
  21. job_shop_lib/graphs/job_shop_graph.py +159 -0
  22. job_shop_lib/graphs/node.py +147 -0
  23. job_shop_lib/job_shop_instance.py +355 -0
  24. job_shop_lib/operation.py +120 -0
  25. job_shop_lib/schedule.py +180 -0
  26. job_shop_lib/scheduled_operation.py +97 -0
  27. job_shop_lib/visualization/__init__.py +25 -0
  28. job_shop_lib/visualization/agent_task_graph.py +257 -0
  29. job_shop_lib/visualization/create_gif.py +191 -0
  30. job_shop_lib/visualization/disjunctive_graph.py +206 -0
  31. job_shop_lib/visualization/gantt_chart.py +147 -0
  32. job_shop_lib-0.1.0.dist-info/LICENSE +21 -0
  33. job_shop_lib-0.1.0.dist-info/METADATA +363 -0
  34. job_shop_lib-0.1.0.dist-info/RECORD +35 -0
  35. job_shop_lib-0.1.0.dist-info/WHEEL +4 -0
@@ -0,0 +1,20 @@
1
+ """Contains the main data structures and base classes.
2
+ """
3
+
4
+ from job_shop_lib.operation import Operation
5
+ from job_shop_lib.job_shop_instance import JobShopInstance
6
+ from job_shop_lib.scheduled_operation import ScheduledOperation
7
+ from job_shop_lib.schedule import Schedule
8
+ from job_shop_lib.base_solver import BaseSolver, Solver
9
+ from job_shop_lib.exceptions import JobShopLibError, NoSolutionFoundError
10
+
11
+ __all__ = [
12
+ "Operation",
13
+ "JobShopInstance",
14
+ "ScheduledOperation",
15
+ "Schedule",
16
+ "Solver",
17
+ "BaseSolver",
18
+ "JobShopLibError",
19
+ "NoSolutionFoundError",
20
+ ]
@@ -0,0 +1,37 @@
1
+ """Type hint and base class for all solvers."""
2
+
3
+ import abc
4
+ from typing import Callable
5
+ import time
6
+
7
+ from job_shop_lib import JobShopInstance, Schedule
8
+
9
+
10
+ # Every solver should be a callable that takes a JobShopInstance and returns a
11
+ # Schedule.
12
+ Solver = Callable[[JobShopInstance], Schedule]
13
+
14
+
15
+ class BaseSolver(abc.ABC):
16
+ """Base class for all solvers implemented as classes.
17
+
18
+ A `Solver` is any `Callable` that takes a `JobShopInstance` and returns a
19
+ `Schedule`. Therefore, solvers can be implemented as functions or as
20
+ classes. This class is provided as a base class for solvers implemented as
21
+ classes. It provides a default implementation of the `__call__` method that
22
+ measures the time taken to solve the instance and stores it in the
23
+ schedule's metadata under the key "elapsed_time" if it is not already
24
+ present.
25
+ """
26
+
27
+ @abc.abstractmethod
28
+ def solve(self, instance: JobShopInstance) -> Schedule:
29
+ """Solves the given job shop instance and returns the schedule."""
30
+
31
+ def __call__(self, instance: JobShopInstance) -> Schedule:
32
+ time_start = time.perf_counter()
33
+ schedule = self.solve(instance)
34
+ elapsed_time = time_start - time.perf_counter()
35
+ schedule.metadata["elapsed_time"] = elapsed_time
36
+ schedule.metadata["solved_by"] = f"{self.__class__.__name__}"
37
+ return schedule
@@ -0,0 +1,78 @@
1
+ """Package for loading benchmark instances.
2
+
3
+ All benchmark instances are stored in a single JSON file. This module provides
4
+ functions to load the instances from the file and return them as
5
+ JobShopInstance objects.
6
+
7
+ The contributions to this benchmark dataset are as follows:
8
+
9
+ abz5-9: This subset, comprising five instances, was introduced by Adams et
10
+ al. (1988).
11
+ ft06, ft10, ft20: These three instances are attributed to the work of
12
+ Fisher and Thompson, as detailed in their 1963 work.
13
+ la01-40: A collection of forty instances, this group was contributed by
14
+ Lawrence, as referenced in his 1984 report.
15
+ orb01-10: Ten instances in this category were provided by Applegate and
16
+ Cook, as seen in their 1991 study.
17
+ swb01-20: This segment, encompassing twenty instances, was contributed by
18
+ Storer et al., as per their 1992 article.
19
+ yn1-4: Yamada and Nakano are credited with the addition of four instances
20
+ in this group, as found in their 1992 paper.
21
+ ta01-80: The largest contribution, consisting of eighty instances, was
22
+ made by Taillard, as documented in his 1993 paper.
23
+
24
+ The metadata from these instances has been updated using data from:
25
+
26
+ Thomas Weise. jsspInstancesAndResults. Accessed in January 2024.
27
+ Available at: https://github.com/thomasWeise/jsspInstancesAndResults
28
+
29
+ It includes the following information:
30
+ - "optimum" (int | None): The optimal makespan for the instance.
31
+ - "lower_bound" (int): The lower bound for the makespan. If
32
+ optimality is known, it is equal to the optimum.
33
+ - "upper_bound" (int): The upper bound for the makespan. If
34
+ optimality is known, it is equal to the optimum.
35
+ - "reference" (str): The paper or source where the instance was first
36
+ introduced.
37
+
38
+ References:
39
+ - J. Adams, E. Balas, and D. Zawack, "The shifting bottleneck procedure
40
+ for job shop scheduling," Management Science, vol. 34, no. 3,
41
+ pp. 391–401, 1988.
42
+
43
+ - J.F. Muth and G.L. Thompson, Industrial scheduling. Englewood Cliffs,
44
+ NJ: Prentice-Hall, 1963.
45
+
46
+ - S. Lawrence, "Resource constrained project scheduling: An experimental
47
+ investigation of heuristic scheduling techniques (Supplement),"
48
+ Carnegie-Mellon University, Graduate School of Industrial
49
+ Administration, Pittsburgh, Pennsylvania, 1984.
50
+
51
+ - D. Applegate and W. Cook, "A computational study of job-shop
52
+ scheduling," ORSA Journal on Computer, vol. 3, no. 2, pp. 149–156,
53
+ 1991.
54
+
55
+ - R.H. Storer, S.D. Wu, and R. Vaccari, "New search spaces for
56
+ sequencing problems with applications to job-shop scheduling,"
57
+ Management Science, vol. 38, no. 10, pp. 1495–1509, 1992.
58
+
59
+ - T. Yamada and R. Nakano, "A genetic algorithm applicable to
60
+ large-scale job-shop problems," in Proceedings of the Second
61
+ International Workshop on Parallel Problem Solving from Nature
62
+ (PPSN'2), Brussels, Belgium, pp. 281–290, 1992.
63
+
64
+ - E. Taillard, "Benchmarks for basic scheduling problems," European
65
+ Journal of Operational Research, vol. 64, no. 2, pp. 278–285, 1993.
66
+ """
67
+
68
+ from job_shop_lib.benchmarking.load_benchmark import (
69
+ load_all_benchmark_instances,
70
+ load_benchmark_instance,
71
+ load_benchmark_json,
72
+ )
73
+
74
+ __all__ = [
75
+ "load_all_benchmark_instances",
76
+ "load_benchmark_instance",
77
+ "load_benchmark_json",
78
+ ]