{
"cells": [
{
"cell_type": "markdown",
"id": "5ca8bc9c",
"metadata": {
"id": "5ca8bc9c"
},
"source": [
"# Job Shop Scheduling: Heuristics\n",
"\n",
"In the previous [tutorial on Job Shop Scheduling: Basics and State Space Search](https://homepages.ecs.vuw.ac.nz/~yimei/tutorials/job-shop-scheduling-state-space-search.html), we have introduced the basics of **job shop scheduling** and an AI planning **state space search** algorithm to find the best schedule with the minimal makespan.\n",
"\n",
"The state space search algorithm searches all the possible goal states (schedules) exhaustively. Although the exhaustive search can guarantee optimality, its **computation complexity grows exponentially with the increase of the problem size**. \n",
"\n",
"> The computational complexity of the state space exhaustive search is $O(N^{NM})$, where $N$ is the number of jobs and $M$ is the number of machines.\n",
"\n",
"Therefore, it is usually not possible to enumerate all the possible solutions / goal states to find the optimal solution.\n",
"\n",
"> The job shop scheduling problem is known as $\\mathbb{NP}$-hard, which means there is no exact method that can find the optimal schedule in polynomial time.\n",
"\n",
"As the problem size increases, it is impossible to enumerate all the possible solutions. In this case, we can develop **heuristic search** approaches to search **ONLY a part** of the solution space, to find **good enough** solutions within **a reasonable time**. \n",
"\n",
"In this tutorial, we introduce the heuristic search approaches for job shop scheduling, including the **dispatching rule** and **local search**.\n",
"\n",
"# Table of Contents\n",
"\n",
"1. [General Heuristic Search Framework](#framework)\n",
"2. [Dispatching Rule](#rule)\n",
"3. [Local Search](#ls)\n",
"\n",
"---------"
]
},
{
"cell_type": "markdown",
"id": "325c0177",
"metadata": {},
"source": [
"## 1. General Heuristic Search Framework \n",
"\n",
"\n",
"As described in the previous [tutorial](https://homepages.ecs.vuw.ac.nz/~yimei/tutorials/job-shop-scheduling-state-space-search.html), the pseudo code of the **exhaustive state space search** for job shop scheduling is given as follows.\n",
"\n",
"---------\n",
"\n",
"```python\n",
"Generate an initial state, best_state = None, best_makespan = infinity\n",
"# Initialise the fringe with the initial state\n",
"fringe = [initial_state]\n",
"\n",
"# Search by expanding a branch at each step\n",
"while fringe is not empty:\n",
" Pick a state from fringe\n",
" \n",
" if state is a goal state:\n",
" if state.schedule has a smaller makespan than best_makespan:\n",
" best_state = state, best_makespan = makespan\n",
" \n",
" Find the applicable actions at state\n",
" \n",
" for action in applicable_actions:\n",
" Apply action to state to generate next_state\n",
" Add next_state into fringe\n",
"\n",
" remove state from fringe\n",
"return best_state.schedule\n",
"```\n",
"\n",
"-------------\n",
"\n",
"It **enumerates** all the possible solutions by \n",
"\n",
"1. Expand the branches of **ALL** the applicable actions at each state during the search;\n",
"2. Stop the search after **ALL** the goal states have been visited.\n",
"\n",
"As the problem size increases, it is impossible to enumerate all the possible solutions. In this case, we develop heuristic search approaches to search **a part** of the solution space, to find **good enough** solutions within **a reasonable time**. \n",
"\n",
"Generally speaking, the heuristic search approaches are based on pruning the search space by ignoring the branches that are unlikely to reach promising/optimal solutions. This is also known as the **beam search**. The pruning can be done by modifying the above pseudo code as follows.\n",
"\n",
"1. Expand the branches of **only a subset** of the applicable actions at each state;\n",
"2. **Early stop** the search.\n",
"3. Note that the state space search picks states from the fringe arbitrarily. To further improve the search efficiency, we can design heuristics to pick the **best state** first, so we can expand the better branches first and stop the search earlier.\n",
"\n",
"Taking the above factors into account, the **heuristic search** in the state space can be written as follows.\n",
"\n",
"---------\n",
"\n",
"```python\n",
"Generate an initial state, best_state = None, best_makespan = infinity\n",
"# Initialise the fringe with the initial state\n",
"fringe = [initial_state]\n",
"\n",
"# Search by expanding a branch at each step\n",
"while fringe is not empty:\n",
" Heuristic select a state from fringe\n",
" \n",
" if state is a goal state:\n",
" if state.schedule has a smaller makespan than best_makespan:\n",
" best_state = state, best_makespan = makespan\n",
" if early stop:\n",
" return best_state.schedule\n",
" \n",
" Find the applicable actions at state\n",
" \n",
" for action in subset(applicable_actions):\n",
" Apply action to state to generate next_state\n",
" Add next_state into fringe\n",
"\n",
" remove state from fringe\n",
"return best_state.schedule\n",
"```\n",
"\n",
"-------------\n",
"\n",
"In this heuristic search, there are three design issues:\n",
"\n",
"1. The heuristic to select the next state from the fringe to expand.\n",
"2. The subset `subset(applicable_actions)` that selects the subset of the applicable actions to expand.\n",
"3. The early stopping criterion.\n",
"\n",
"Below we introduce some common design of the heuristics.\n",
"\n",
"-------------"
]
},
{
"cell_type": "markdown",
"id": "4716777c",
"metadata": {},
"source": [
"## 2. Dispatching Rule \n",
"\n",
"Dispatching rule is a very simple heuristic that expands **only one** action at each state. Therefore, starting with a single initial state, the fringe always contains a single state. Thus, at each step we trivially select the only state in the fringe. As a result, only a single goal state will be reached. Thus, The stopping criterion is also trivial: the search will stop after the first and only goal state is reached.\n",
"\n",
"For example, if we are given the following state space to be searched in:\n",
"\n",
" \n",
"\n",
"The search based on dispatching rule will select one branch (highlighted in blue boxes) at each state and finally reach a single goal state (a leaf node in the search tree).\n",
"\n",
"\n",
"\n",
"A dispatching rule selects the single action from the applicable actions based on the following two steps.\n",
"\n",
"1. Select the **earliest** applicable action (with the smallest start time).\n",
"2. If there are multiple earliest applicable actions, then select an action based on the predefined **priority function**. Specifically, for each earliest applicable actions, a priority value in the current state is calculated by the priority function. Then, the action with the **highest priority** is selected.\n",
"\n",
"The heuristic search based on dispatching rule can be written as follows.\n",
"\n",
"---------\n",
"\n",
"```python\n",
"Generate an initial state\n",
"# Initialise the fringe with the initial state\n",
"fringe = [initial_state]\n",
"\n",
"# Search process, the fringe will become empty after the first and only goal state is reached\n",
"while fringe is not empty:\n",
" # Select the first and only state in the fringe\n",
" state = fringe[0]\n",
" \n",
" if state is a goal state:\n",
" return state.schedule\n",
" \n",
" Find the applicable actions at state\n",
" \n",
" # Select the earliest action with the highest priority\n",
" best_action = None, earliest_time = float('inf'), best_priority = -float('inf')\n",
" for action in applicable_actions:\n",
" if action.time < earliest_time:\n",
" best_action = action, earliest_time = action.time, best_priority = priority(action, state)\n",
" elif action.time == earliest_time: \n",
" p = priority(action, state)\n",
" if p > best_priority:\n",
" best_action = action, best_priority = p\n",
" \n",
" Apply best_action to state to generate next_state\n",
" Add next_state into fringe\n",
"\n",
" remove state from fringe\n",
"```\n",
"\n",
"-------------\n",
"\n",
"> Dispatching rule has a promising characteristic that it always expends an earliest action. Taking advantage of this characteristic, we can convert the above procedure into a much more efficient **discrete event simulation** procedure with priority queue.\n",
"\n",
"Below are some examples of commonly used dispatching rules.\n",
"\n",
"- **First-Come-First-Serve (FCFS)**: it processes the operation that comes to the machine (becomes ready) first. The priority function can be defined as the negative ready time of the processed operation, i.e., `priority(action, state) = - state.operation_ready_time[action.operation]`.\n",
"- **Shortest-Processing-Time (SPT)**: it processes the shortest operation with the smallest processing time first. The priority function can be defined as the negative processing time, i.e., `priority(action, state) = - action.operation.duration`.\n",
"\n",
"### Computational Complexity\n",
"\n",
"Assume that there are $N$ jobs and $M$ machines. Each job has $M$ operations, each to be processed by a different machine. There are $NM$ operations in total.\n",
"\n",
"At each state, there can be at most $N$ applicable actions, as each job can have an operation ready. Therefore, it takes $O(N)$ time to find the best action from the $N$ applicable actions. However, only one branch is expanded.\n",
"\n",
"Each action completes an operation. Thus, it takes $NM$ actions from the initial state to a goal state. In other words, the depth of the tree is $NM$.\n",
"\n",
"In summary, a dispatching rule generates a chain-like search tree where each node has only one branch expanded. The entire search process visits $NM$ states, where each state takes $O(N)$ time to find the expanded branch. Therefore, the overall complexity of the dispatching rule-based heuristic search is $O(N^2M)$.\n",
"\n",
"> If the procedure is implemented by a **discrete event simulation**, for each state, we can obtain the earliest applicable actions in $O(1)$ time. In this case, we can find the best branch in $O(E)$ time, where $E$ is the number of earliest applicable action, which is usually much smaller than $N$. We can see that the **discrete event simulation** can greatly reduce the computational complexity to $O(NME) \\ll O(N^2M)$.\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "d3601adf",
"metadata": {},
"source": [
"### Case Study on Car Manufacturing\n",
"\n",
"Below is a case study of the heuristic search based on dispatching rule on the car manufacturing example. To this end we need to prepare the supporting Python classes and utility methods. These include\n",
"\n",
"- The classes for the job shop environment: `Operation`, `Job` and `JobShop`.\n",
"- The classes for the state space search: `State` and `Process` action.\n",
"- The utility methods: finding applicable actions of a state, makespan calculation, and schedule display.\n",
"\n",
"\n",
"First, we define the Python classes for `Operation`, `Job` and `JobShop` as below."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "0e7a65ec",
"metadata": {
"id": "0e7a65ec"
},
"outputs": [],
"source": [
"class Operation:\n",
" '''\n",
" Construct an operation, including the following properties.\n",
" - name of the operation\n",
" - machine\n",
" - duration (processing time)\n",
" - prec (preceding operation)\n",
" - succ (succeeding operation)\n",
" '''\n",
" def __init__(self, name, machine, duration, prec, succ):\n",
" self.name = name\n",
" self.machine = machine\n",
" self.duration = duration\n",
" self.prec = prec\n",
" self.succ = succ\n",
" \n",
"class Job:\n",
" '''\n",
" Construct a job, including the following properties.\n",
" - job name\n",
" - list of operations\n",
" - arrival time, default to be 0\n",
" - due date, default to be infinity\n",
" - weight, default to be 1\n",
" '''\n",
" def __init__(self, name, operations):\n",
" self.name = name\n",
" self.operations = operations\n",
" self.arrival_time = 0\n",
" self.due_date = float('inf')\n",
" self.weight = 1\n",
" \n",
"class JobShop:\n",
" '''\n",
" Construct a job shop environment, including a list of machines and a list of jobs.\n",
" '''\n",
" def __init__(self, machines, jobs): \n",
" self.machines = machines\n",
" self.jobs = jobs\n",
" \n",
" # We also create a hash map to quickly access operations if needed\n",
" self.operations = {}\n",
" for job in jobs:\n",
" for op in job.operations:\n",
" self.operations[op.name] = op"
]
},
{
"cell_type": "markdown",
"id": "631786df",
"metadata": {},
"source": [
"Then, we define the Python classes for the `State` and `Process` action for state space search as follows."
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "49dd6017",
"metadata": {},
"outputs": [],
"source": [
"class State:\n",
" '''\n",
" Initialise the state with the job shop, i.e., a list of machines and a list of operations.\n",
" '''\n",
" def __init__(self, job_shop):\n",
" # 1. Initially, the idle time of all the machines are 0.\n",
" self.machine_idle_time = {}\n",
" for machine in job_shop.machines:\n",
" self.machine_idle_time[machine] = 0 \n",
" \n",
" # 2. Initially, all the operations except the first operations of the jobs are not ready.\n",
" # Their ready time are undefined, so not added into the operation_ready_time.\n",
" self.operation_ready_time = {}\n",
" for job in job_shop.jobs:\n",
" self.operation_ready_time[job.operations[0].name] = job.arrival_time\n",
" \n",
" # 3. Initial schedule is empty\n",
" self.schedule = []\n",
" \n",
" # 4. Initially, no operation is completed, and the list is empty.\n",
" self.completed = []\n",
"\n",
"import copy\n",
"\n",
"class Process:\n",
" '''\n",
" Construct a process with an operation, a machine and a time\n",
" '''\n",
" def __init__(self, operation, machine, time):\n",
" self.operation = operation\n",
" self.machine = machine\n",
" self.time = time\n",
" \n",
" '''\n",
" Check its precondition to see if it is applicable in a state.\n",
" '''\n",
" def is_applicable(self, state):\n",
" # Check if the operation is completed or not.\n",
" if self.operation.name in state.completed:\n",
" return False\n",
" \n",
" # Check if the operation is ready now or not.\n",
" if state.operation_ready_time[self.operation.name] > self.time:\n",
" return False\n",
" \n",
" # Check if the machine is idle now or not.\n",
" if state.machine_idle_time[self.machine] > self.time:\n",
" return False\n",
"\n",
" return True\n",
" \n",
" '''\n",
" Apply the processing action to a state, and return the resultant state.\n",
" '''\n",
" def apply(self, state):\n",
" new_state = copy.deepcopy(state)\n",
" \n",
" # Add this process action to the schedule\n",
" new_state.schedule.append(self)\n",
" \n",
" # The operation becomes completed\n",
" new_state.completed.append(self.operation.name)\n",
" \n",
" # Delete the operation from operation_ready_time, since it is completed\n",
" new_state.operation_ready_time.pop(self.operation.name)\n",
" \n",
" completion_time = self.time + self.operation.duration\n",
" \n",
" # The machine becomes busy, and will be idle again after the operation is completed\n",
" new_state.machine_idle_time[self.machine] = completion_time\n",
" \n",
" # If the operation is not the last operation of the job, then its next operation becomes ready\n",
" if self.operation.succ != None:\n",
" new_state.operation_ready_time[self.operation.succ.name] = completion_time\n",
" \n",
" return new_state"
]
},
{
"cell_type": "markdown",
"id": "77e437c3",
"metadata": {},
"source": [
"Below we define the following utility methods.\n",
"\n",
"- `applicable_actions()`: find the applicable actions for a `state` in a `job_shop` environment.\n",
"- `makespan()`: calculate the makespan of a `schedule`."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "a2b29373",
"metadata": {},
"outputs": [],
"source": [
"def applicable_actions(state, job_shop):\n",
" actions = []\n",
" \n",
" # Enumerate all the operations in the operation_ready_time map.\n",
" # For efficiency, this map ignores the operations whose ready time are still infinity \n",
" # (they are not applicable anyway).\n",
" for opname in state.operation_ready_time.keys():\n",
" op = job_shop.operations[opname]\n",
" \n",
" time = state.operation_ready_time[opname]\n",
" \n",
" if time < state.machine_idle_time[op.machine]:\n",
" time = state.machine_idle_time[op.machine]\n",
" \n",
" action = Process(op, op.machine, time)\n",
" \n",
" if action.is_applicable(state):\n",
" actions.append(action)\n",
" \n",
" return actions\n",
"\n",
"def makespan(schedule):\n",
" makespan = 0\n",
" \n",
" for action in schedule:\n",
" completion_time = action.time + action.operation.duration\n",
" \n",
" if completion_time > makespan:\n",
" makespan = completion_time\n",
" \n",
" return makespan"
]
},
{
"cell_type": "markdown",
"id": "85922f1c",
"metadata": {},
"source": [
"Then, we install the `matplotlib` library and define methods for visualising a schedule by gantt chart as follows."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "81ab34df",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: matplotlib in /Users/yimei/miniforge3/lib/python3.9/site-packages (3.5.1)\n",
"Requirement already satisfied: python-dateutil>=2.7 in /Users/yimei/miniforge3/lib/python3.9/site-packages (from matplotlib) (2.8.2)\n",
"Requirement already satisfied: pillow>=6.2.0 in /Users/yimei/miniforge3/lib/python3.9/site-packages (from matplotlib) (9.0.1)\n",
"Requirement already satisfied: fonttools>=4.22.0 in /Users/yimei/miniforge3/lib/python3.9/site-packages (from matplotlib) (4.29.1)\n",
"Requirement already satisfied: kiwisolver>=1.0.1 in /Users/yimei/miniforge3/lib/python3.9/site-packages (from matplotlib) (1.3.2)\n",
"Requirement already satisfied: pyparsing>=2.2.1 in /Users/yimei/miniforge3/lib/python3.9/site-packages (from matplotlib) (3.0.6)\n",
"Requirement already satisfied: packaging>=20.0 in /Users/yimei/miniforge3/lib/python3.9/site-packages (from matplotlib) (21.3)\n",
"Requirement already satisfied: cycler>=0.10 in /Users/yimei/miniforge3/lib/python3.9/site-packages (from matplotlib) (0.11.0)\n",
"Requirement already satisfied: numpy>=1.17 in /Users/yimei/miniforge3/lib/python3.9/site-packages (from matplotlib) (1.21.2)\n",
"Requirement already satisfied: six>=1.5 in /Users/yimei/miniforge3/lib/python3.9/site-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)\n",
"Note: you may need to restart the kernel to use updated packages.\n"
]
}
],
"source": [
"pip install matplotlib"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "ef47f48f",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib as mpl\n",
"\n",
"# Convert a schedule to a Pandas data frame\n",
"def schedule_data_frame(schedule):\n",
" # Convert each action to dictionary\n",
" schedule_dict = []\n",
" for action in schedule:\n",
" a_dict = {\n",
" 'Operation': action.operation.name,\n",
" 'Machine': action.machine,\n",
" 'Start': action.time,\n",
" 'Duration': action.operation.duration,\n",
" 'Finish': action.time + action.operation.duration\n",
" }\n",
" schedule_dict.append(a_dict)\n",
" \n",
" return pd.DataFrame(schedule_dict)\n",
"\n",
"# Visualise a schedule by gantt chart\n",
"def visualise(schedule):\n",
" schedule = schedule_data_frame(schedule)\n",
" \n",
" JOBS = sorted(list(schedule['Operation'].unique()))\n",
" MACHINES = sorted(list(schedule['Machine'].unique()))\n",
" makespan = schedule['Finish'].max()\n",
" \n",
" bar_style = {'alpha':1.0, 'lw':25, 'solid_capstyle':'butt'}\n",
" text_style = {'color':'white', 'weight':'bold', 'ha':'center', 'va':'center'}\n",
" colors = mpl.cm.Dark2.colors\n",
"\n",
" schedule.sort_values(by=['Operation', 'Start'])\n",
" schedule.set_index(['Operation', 'Machine'], inplace=True)\n",
"\n",
" fig, ax = plt.subplots(2,1, figsize=(12, 5+(len(JOBS)+len(MACHINES))/4))\n",
"\n",
" for jdx, j in enumerate(JOBS, 1):\n",
" for mdx, m in enumerate(MACHINES, 1):\n",
" if (j,m) in schedule.index:\n",
" xs = schedule.loc[(j,m), 'Start']\n",
" xf = schedule.loc[(j,m), 'Finish']\n",
" ax[0].plot([xs, xf], [jdx]*2, c=colors[mdx%7], **bar_style)\n",
" ax[0].text((xs + xf)/2, jdx, m, **text_style)\n",
" ax[1].plot([xs, xf], [mdx]*2, c=colors[jdx%7], **bar_style)\n",
" ax[1].text((xs + xf)/2, mdx, j, **text_style)\n",
" \n",
" ax[0].set_title('Job Schedule')\n",
" ax[0].set_ylabel('Operation')\n",
" ax[1].set_title('Machine Schedule')\n",
" ax[1].set_ylabel('Machine')\n",
" \n",
" for idx, s in enumerate([JOBS, MACHINES]):\n",
" ax[idx].set_ylim(0.5, len(s) + 0.5)\n",
" ax[idx].set_yticks(range(1, 1 + len(s)))\n",
" ax[idx].set_yticklabels(s)\n",
" ax[idx].text(makespan, ax[idx].get_ylim()[0]-0.2, \"{0:0.1f}\".format(makespan), ha='center', va='top')\n",
" ax[idx].plot([makespan]*2, ax[idx].get_ylim(), 'r--')\n",
" ax[idx].set_xlabel('Time')\n",
" ax[idx].grid(True)\n",
" \n",
" fig.tight_layout()"
]
},
{
"cell_type": "markdown",
"id": "184a34ca",
"metadata": {},
"source": [
"After defining all the above supporting classes and utility methods, we define the core `heuristic_search_dispatching_rule()` method as follows. It takes the `priority` function as an argument, which varies depending on the dispatching rule used."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "5f547c5d",
"metadata": {},
"outputs": [],
"source": [
"def heuristic_search_dispatching_rule(job_shop, priority):\n",
" # Initialise the state and fringe\n",
" init_state = State(job_shop)\n",
" fringe = [init_state]\n",
" \n",
" while len(fringe) > 0:\n",
" state = fringe[0] # select the first and only state in the fringe\n",
" \n",
" if len(state.completed) == len(job_shop.operations):\n",
" return state.schedule\n",
" \n",
" actions = applicable_actions(state, job_shop)\n",
" \n",
" best_action = None\n",
" earliest_time = float('inf')\n",
" best_priority = -float('inf')\n",
" for a in actions:\n",
" if a.time < earliest_time:\n",
" best_action = a\n",
" earliest_time = a.time\n",
" best_priority = priority(a, state)\n",
" elif a.time == earliest_time:\n",
" p = priority(a, state)\n",
" if p > best_priority:\n",
" best_action = a\n",
" best_priority = p\n",
" \n",
" next_state = best_action.apply(state)\n",
" fringe.append(next_state)\n",
" \n",
" fringe.remove(state)"
]
},
{
"cell_type": "markdown",
"id": "4991bb88",
"metadata": {},
"source": [
"Now, we create a car manufacturing example as follows. It contains three jobs, each with three operations [`add_engine`, `add_wheels`, `inspect`]. The first two jobs is arrived at the beginning (time 0), while the third job arrives at time 10.\n",
"\n",
"| Job | Arrival | Operation | Machine | Duration |\n",
"| --- | --------- | ------- | --------- | --------- |\n",
"| 1 | 0 | `add_engine_1` | `engine_hoist` | 30 |\n",
"| | | `add_wheels_1` | `wheel_station` | 30 |\n",
"| | | `inspect_1` | `inspector` | 10 |\n",
"| 2 | 0 | `add_engine_2` | `engine_hoist` | 60 |\n",
"| | | `add_wheels_2` | `wheel_station` | 15 |\n",
"| | | `inspect_2` | `inspector` | 10 |\n",
"| 3 | 10| `add_engine_3` | `engine_hoist` | 20 |\n",
"| | | `add_wheels_3` | `wheel_station` | 30 |\n",
"| | | `inspect_3` | `inspector` | 10 |"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "f586bcba",
"metadata": {},
"outputs": [],
"source": [
"machines = ['engine_hoist', 'wheel_station', 'inspector']\n",
"\n",
"add_engine_1 = Operation('add_engine_1', 'engine_hoist', 30, None, None)\n",
"add_wheels_1 = Operation('add_wheels_1', 'wheel_station', 30, add_engine_1, None)\n",
"inspect_1 = Operation('inspect_1', 'inspector', 10, add_wheels_1, None)\n",
"add_engine_2 = Operation('add_engine_2', 'engine_hoist', 60, None, None)\n",
"add_wheels_2 = Operation('add_wheels_2', 'wheel_station', 15, add_engine_2, None)\n",
"inspect_2 = Operation('inspect_2', 'inspector', 10, add_wheels_2, None)\n",
"add_engine_3 = Operation('add_engine_3', 'engine_hoist', 20, None, None)\n",
"add_wheels_3 = Operation('add_wheels_3', 'wheel_station', 30, add_engine_3, None)\n",
"inspect_3 = Operation('inspect_3', 'inspector', 10, add_wheels_3, None)\n",
"\n",
"add_engine_1.succ = add_wheels_1\n",
"add_wheels_1.succ = inspect_1\n",
"add_engine_2.succ = add_wheels_2\n",
"add_wheels_2.succ = inspect_2\n",
"add_engine_3.succ = add_wheels_3\n",
"add_wheels_3.succ = inspect_3\n",
"\n",
"job_1 = Job('job_1', [add_engine_1, add_wheels_1, inspect_1])\n",
"job_2 = Job('job_2', [add_engine_2, add_wheels_2, inspect_2])\n",
"job_3 = Job('job_3', [add_engine_3, add_wheels_3, inspect_3])\n",
"job_3.arrival_time = 10\n",
"\n",
"job_shop = JobShop(machines, [job_1, job_2, job_3])"
]
},
{
"cell_type": "markdown",
"id": "5031cc97",
"metadata": {},
"source": [
"Below we show the gantt chart of the schedule obtained by the heuristic search with the **Shortest Processing Time** rule, whose priority function is `- action.operation.duration`."
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "6f6ce4ec",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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3U8w2ra9rT4NrNJQDE+4+w/rLghNjWxrZmlhCVYPwEOviwm7SEho+mV90/zq3Y6IiOxMI1ciIhKLvg8cX2f0ZbsMYFMosRpNMMq13VPACWb2bTNLMLNsM8uJcGyvAf3N7Ltmlhh6HGpmg+pWNLO2Zna3mfU1s7jQBSkuJzi3DOAR4DIzGxta3tXMBjYhhieBM8zsJDOLN7NWoQtVdHP3FQRT9+42syQzOwo4I2zdhUCr0IVBEoHbgeTd3U5TDpSIyIFGyZWIiMQcd1/i7tPqWfxj4JdmthW4g+BcpO3rrSQY8boB2ERwMYsREY5tKzCO4EIWXxNM3fs9u05QyoGewLsEl1+fA5QRTHnE3acQXLDiz8AW4EOCqXiNxbAKOAu4FdhAMMJ0Izv+rn8HOIzgGNxJ2PRKd99CcAwfJjifrRiodfXA3diOiIiEseBcWxEREREREdkb+uZJREREREQkApRciYiIiIiIRICSKxERERERkQhQciUiIiIiIhIBus9VjGjXrp337Nkz2mFQXFxMWlpatMOQMOqT2KM+iT3qk9ijPok96pPYoz7ZDQsWBM8DBjTrZprSJ9OnT893913eH1DJVYzo2bMn06bVd9XhfScvL4/c3NxohyFh1CexR30Se9QnsUd9EnvUJ7FHfbIbth+nvLxm3UxT+sTMVtS3TMmViIiIiIjEthtuiHYETaLkSkREREREYtsZZ0Q7gibRBS1ERERERCS2LViw47yrGKaRKxERERERiW1XXhk8N/M5V3tLI1ciIiIiIiIRoORKREREREQkApRciYiIiIiIRICSKxERERERkQjQBS1ERERERCS23X57tCNoEiVXIiIiIiIS2044IdoRNImmBYqIiIiISGybNSt4xDiNXImIiIiISGy7/vrgWfe5EhERERERafmUXImIiIiIiESAkisREREREZEIUHIlIiIiIiISAbqghYiIiIiIxLbf/jbaETSJkisREREREYltRx4Z7QiaRNMCRUREREQktn36afCIcRq5EhERERGR2HbrrcGz7nMlIiIiIiLS8im5EhERERERiQAlVyIiIiIiIhGgc65EZJ959cs/89qc+6IdRkQ880y0I5BwozcOYO2b34t2GFLHM29GO4LIGHrC9Qw78afRDkPCbJ17N0XzfxntMPbaAGDt8827jfRBd5Ax5M7m3YjUUHIlIiIi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vfaaN4U4JVciIiIiIiIBoORKREREREQkAJRciYiIiIiIBICSKxERERERkQDQUOwiIiIiIhLapk8PdgQNoporERERERGRAFByJSIiIiIioe2BB7wpxCm5EhERERGR0DZlijeFOCVXIiIiIiIiAaDkSkREREREJACUXImIiIiIiASAhmIXEREREZHQFhMT7AgaRMmViIiIiIiEtv/9L9gRNIiaBYqIiIiIiASAkisREREREQlt997rTSFOyZWIiIiIiIS2adO8KcQpuRIREREREQkAJVciIiIiIiIBoORKREREREQkADQUu4iIiIiIhLYWLYIdQYMouRIRERERkdD2xhvBjqBB1CxQREREREQkAJRciYiIiIhIaPvtb70pxKlZoIiIiIiIhLavvw52BA2imisREREREZEAUHIlIiIiIiISAEquREREREREAkB9rkREREREJLS1bx/sCBpEyZWIiIiIiIS2F14IdgQNomaBIiIiIiIiAaDkSkREREREQtv113tTiFOzQBERERERCW3z5wc7ggZpVM2VmR1tZhf777c0s85NE5aIiIiIiMjBpcHJlZndCdwK/NY/KwI4OHqWiYiIiIiINLHG1FydAZwG5AM45zYBCU0RlIiIiIiIyMGmMX2uSpxzzswcgJnFNVFMIiIiIiIie/XoEewIGqQxydVrZvY4kGxmlwKXAE82TVgiIiIiIiJ+TzwR7AgapMHJlXPuATM7CdgJ9ATucM5NbbLIREREREREDiKNGordn0wpoRIRkZDyRvZyzn/mw2CHERA3DDqRmwafFOwwpJKPP1zKJx8tD3YYB6xbzwhGjw52FNLcMt+6m6x37gl2GAes1cwKojsNIfrjucEOpU6NGS3wJ2a23MxyzWynme0ys51NGZyIiIiIiEjkTvBt2hHsMOrVmJqrvwATnXNLmioYERERERGRg1VjhmLfqsRKRERERESkZo2puZpjZq8CbwPFu2c6594MdFAiIiIiIiIHm8YkV4lAATC20jwHKLkSEREREZEmU5wK1imdiGAHUo/GDMV+cVMGIiIiIiIiUpPtI8JInXQyMcEOpB71Jldm9hvn3F/M7J94NVVVOOeua5LIREREREREDiINqbnaPYjFnKYMREREZH+lxsaz4Yz7+GT9Ei765Nlgh8PpXQbSJbElTy3+ip0lRbUud3X/0VzQayTt4pP5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GruturlLtcEufMUQtqugGSPbP41JrnxmZs5f1WVmPiCyacISERFpPjd+9V9u/Oq/Tbb9a794hWhf1esMbS/c1WT7k9Dx2ssLeO3lBU22/ZdfmEdERNWz/rt2FdeytEjjbX3qErY+dUmTbX/zv39BWGRMlXnluVuabH9NrTHJ1YfAq2b2uP/x5f55BxXn3EXBjkFERA4vc7bVPdywyP5au1q1n3JwK1oxM9ghBFRjkqtb8RKqK/2PpwJPBTwiERERERGRg1CDkyt/n6TH/JOIiIiIiEizKGhjxPTqQkT9iwZVg5MrM+sO/BnogzcCHwDOuVC4zpWIiIiIiByisgYaqZOOIy7YgdSjvksoV/YMXq1VGXA88BzwQlMEJSIiIiIicrBpTHIV45ybhndtrLXOubuAU5smLBEREREREU+7TypIvDf063UaM6BFsf9Cu8vN7BpgIxDfNGGJiIg03E9TuvPPMy4NdhhyiBo7vidjx/cMdhgHbPr06cEOQYIg7Yw7STvjzmCHceAOkouSN6bm6tdALHAdMBT4BXBhUwQlIiIiIiJysGnMaIHf+u/mARc3TTgiIiIiIiIHp3qTKzN7t67nnXOnBS4cERERERGRg1NDaq5GAeuBl4HZgDVpRCIiIiIiIpVNmBDsCBqkIclVOnAScB7wM+B94GXn3KKmDExERERERASAm28OdgQNUu+AFs65cufch865C4GRwApgun/EQBEREREREaGBA1qYWRTeNa3OAzoB/wDearqwRERERERE/HYPxR7ilxRoyIAWzwH9gA+Au51zPzR5VCIiIiIiIgeZhtRcnQ/k413n6jqzPeNZGOCcc4lNFJuIiIiIiMhBo97kyjnXmAsNi4iIiIiIHJaUOImIiIiIiARAgwa0EBERERERCZqzzw52BA2i5EpERERERELbVVcFO4IGUbNAEREREREJbQUF3hTiVHMlIiIiIiKh7ZRTvNsQv86Vaq5EREREREQCQMmViIiIiIhIACi5EhERERERCQAlVyIiIiIiIgGgAS1ERERERCS0XXRRsCNoECVXIiIiIiIS2g6S5ErNAkVEREREJLRlZnpTiFPNlYiIiIiIhLYzz/RudZ0rERERERGRQ5+SKxERERERkQBQciUiIiIiIhIASq5EREREREQCQANaiIiIiIhIaLvyymBH0CBKrkREREREJLSdc06w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\n",
"text/plain": [
"