1.9 KiB
1.9 KiB
scheduling problem defined by:
mspecialized machines- tasks
\tauof the form(e, i)witht \in \mathbb{N}the execution time andi \in \{1,2,\dots,m\}the machine the task has to run on njobsT_kwith\forall T_k:linear order of tasks, withk \in \{1,2,\dots,n\}- Additionally, a multiset
\Omegaof arbitrary but fixed size that contains wait states\omega := (1, i)withi \in \{1,2,\dots,m\}the blocked machine.
The goal is to find the fastest feasible schedule \sigma_{min}.
evaluative function
- minimize the execution time of
\sigma - upper bound: largest processing time first
- lower bound: max sum of execution times on one machine
solutions
- list of tuples
(t, \tau)witht \in \mathbb{N}the scheduled begin of\tau
operations
\operatorname{ins}(\omega, t): block a machine at timetforwtime steps.\operatorname{xchg}(\tau_1,\tau_2): exchange the position of two tasks.
Both operations require that the start times are recomputed.
neighbourhood of solution
\operatorname{neighbours}(\sigma) = \{x \in \Sigma | \delta(\sigma, x) \leq n\}with\Sigmathe set of all feasible schedules.\delta:\delta ( \sigma )=0,\delta ( \operatorname{op}(x)) = \delta (x) + 1(ass. ins has the same penalty xchg has),xeither op(y) or\sigma
constraints
- only schedule new
\tauif another\tauis finished - only schedule
\tau \in T_kthat has no unscheduled predecessor inT_k - only one job on a machine any given time
implementation in Python
- translate jobs into lists of tasks, problem into list of jobs, ie problem = [$T_0, T_1,\dots,T_{k-1}$],
T_i= [$\tau_1,\tau_2,\dots$] - address tasks based on their indices, ie [0][1] is the second job of the first task.
- compute only one possible next solution, rate, drop/accept.
\deltais computed iteratively during generation