{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Solving the Flexible Job-Shop Scheduling Problem (FJSP)\n", "\n", "The following notebook explains the FJSP and explains the solution construction process using an encoder-decoder architecture based on a Heterogeneous Graph Neural Network (HetGNN)\n", "\n", "\"Open" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "! pip install torch_geometric" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The autoreload extension is already loaded. To reload it, use:\n", " %reload_ext autoreload\n" ] } ], "source": [ "%load_ext autoreload\n", "%autoreload 2\n", "\n", "import torch\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from IPython.display import display, clear_output\n", "import time\n", "import networkx as nx\n", "import matplotlib.pyplot as plt\n", "from rl4co.envs import FJSPEnv\n", "from rl4co.models.zoo.l2d import L2DModel\n", "from rl4co.models.zoo.l2d.policy import L2DPolicy\n", "from rl4co.models.zoo.l2d.decoder import L2DDecoder\n", "from rl4co.models.nn.graph.hgnn import HetGNNEncoder\n", "from rl4co.utils.trainer import RL4COTrainer" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "generator_params = {\n", " \"num_jobs\": 5, # the total number of jobs\n", " \"num_machines\": 5, # the total number of machines that can process operations\n", " \"min_ops_per_job\": 1, # minimum number of operatios per job\n", " \"max_ops_per_job\": 2, # maximum number of operations per job\n", " \"min_processing_time\": 1, # the minimum time required for a machine to process an operation\n", " \"max_processing_time\": 20, # the maximum time required for a machine to process an operation\n", " \"min_eligible_ma_per_op\": 1, # the minimum number of machines capable to process an operation\n", " \"max_eligible_ma_per_op\": 2, # the maximum number of machines capable to process an operation\n", "}" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "env = FJSPEnv(generator_params=generator_params)\n", "td = env.reset(batch_size=[1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Visualize the Problem\n", "\n", "Below we visualize the generated instance of the FJSP. Blue nodes correspond to machines, red nodes to operations and yellow nodes to jobs. A machine may process an operation if there exists an edge between the two. \n", "\n", "The thickness of the connection between a machine and an operation node specifies the processing time the respective machine needs to process the operation (thicker line := longer processing).\n", "\n", "Each operation belongs to exactly one job, where an edge between a job and an operation node indicates that the respective operation belongs to the job. The number above an operation-job edge specifies the precedence-order in which the operations of a job need to be processed. A job is done when all operations belonging to it are scheduled. The instance is solved when all jobs are fully scheduled.\n", "\n", "Also note that some operation nodes are not connected. These operation nodes are padded, so that all instances in a batch have the same number of operations (where we determine the maximum number of operations as num_jobs * max_ops_per_job). " ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "jupyter": { "source_hidden": true } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxoAAAH4CAYAAADNU5vyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC8EUlEQVR4nOzde3zT5d0//lfS9HxM0wMFNLRNT2mnCB5QOch2c5ybwjanN/qzExggg7nd907KNnff8p2b9+amYgHrwNvbwm6nTrZbJ4hIFUXxiG1a2rShFQrNoekpadocPr8/Yj5r2rT0kDRJ83o+Hn3QNp9cnysQrnzen+t9XW+JIAgCiIiIiIiI/Ega7A4QEREREdH0w0CDiIiIiIj8joEGERERERH5HQMNIiIiIiLyOwYaRERERETkdww0iIiIiIjI7xhoEBERERGR3zHQICIiIiIiv2OgQUREREREfsdAg4imnf3790MikeDs2bMh14+bbroJN91005T3JVjnHY/29nZ885vfhEKhgEQiwR/+8Idxt1FeXo6kpCT/d46IiMaNgQYRhbyvf/3rSEhIQE9Pz4jHrFu3DjExMTCZTFPYs9Ci0Wjw4IMPBj3Amqgf/OAHeO211/Czn/0Mzz77LFauXOnzOKvVigcffBBvvvnm1HZwkAcffBASicTn1+7du8XjJBIJvve973k912Aw4Pvf/z6Ki4sRHx+PrKwsXHvttfjJT36C3t5e8bjy8nKvdlNSUnDllVfid7/7Hfr7+6fstRIRTZQs2B0gIrqUdevW4W9/+xteeukl/H//3/837HGr1YqXX34ZK1euhEKhwF133YXbb78dsbGxQejt6A4fPhywtjUaDX71q1/hpptuwpw5c6bsvP7yxhtv4JZbbsG///u/j3qc1WrFr371KwAI+ixNRUXFsBmU6667bsTjOzo6cPXVV6O7uxv33HMPiouLYTKZcPr0aVRUVGDLli1e7cXGxqKyshIA0NnZiRdeeAH//u//jlOnTuHgwYOBeVFERH7CQIOIQt7Xv/51JCcno6qqymeg8fLLL8NisWDdunUAgKioKERFRU11N8ckJiYmos47Hnq9HmlpacHuxrh885vfREZGxpiPf/rpp9Ha2ooTJ07ghhtu8Hqsu7t72L+TTCbDnXfeKf5877334rrrrsOf//xn/P73v8fMmTMn9wKIiAKIqVNEFPLi4+Oxdu1aHD16FHq9ftjjVVVVSE5Oxte//nUAvtdGfPDBB1ixYgUyMjIQHx+P3Nxc3HPPPeLjb775JiQSybB0nLNnz0IikWD//v3i706fPo3y8nLk5eUhLi4OM2bMwD333DOmtK2hayXmzJkzYgqOpy8tLS249957UVRUhPj4eCgUCnzrW9/yen379+/Ht771LQDA0qVLh7Xha42GXq/H+vXrkZ2djbi4OFx55ZV45plnfL7+//qv/8LevXuRn5+P2NhYXHPNNTh16tQlXy8ANDc341vf+hbS09ORkJCABQsW4P/+7/+8+i6RSCAIAnbt2iX23ZezZ88iMzMTAPCrX/1KPPbBBx/0Ou78+fO49dZbkZSUhMzMTPz7v/87nE6n1zEulwt/+MMfUFpairi4OGRnZ2PTpk0wm81jel0T0dTUhKioKCxYsGDYYykpKYiLixv1+VKpVPx3DNcUOSKKHJzRIKKwsG7dOjzzzDP43//9X6+c946ODrz22mu44447EB8f7/O5er0ey5cvR2ZmJn76058iLS0NZ8+exYsvvjihvhw5cgTNzc34zne+gxkzZqC2thZ79+5FbW0tTp48OeJFsi9/+MMfvPLyAeDRRx/FJ598AoVCAQA4deoU3nnnHdx+++2YPXs2zp49i4qKCtx0003QaDRISEjA4sWLsX37djz22GO4//77UVJSAgDin0P19fXhpptuglarxfe+9z3k5ubi+eefR3l5OTo7O/H973/f6/iqqir09PRg06ZNkEgk+O1vf4u1a9eiubkZ0dHRI76+9vZ23HDDDbBardi+fTsUCgWeeeYZfP3rX8df/vIXrFmzBosXL8azzz6Lu+66C8uWLfM5a+WRmZkpphitWbMGa9euBQBcccUV4jFOpxMrVqzAddddh//6r//C66+/jt/97nfIz8/Hli1bxOM2bdqE/fv34zvf+Q62b98OnU6HJ554Ah9//DFOnDgx6uvy6Ojo8Po5KioKcrl8xOOVSiWcTieeffZZ3H333Zds35empiYAEN8fFFmcTifsdnuwu0F+EhMTA6l0+t73Z6BBRGHhy1/+MnJyclBVVeUVaDz//POw2+1i2pQv77zzDsxmMw4fPoyrr75a/P1DDz00ob7ce++9+Ld/+zev3y1YsAB33HEH3n77bSxatGjMbd16661ePz///PP46KOP8B//8R/40pe+BAD46le/im9+85tex33ta1/D9ddfjxdeeAF33XUX8vLysGjRIjz22GNYtmzZJdcu7N27F3V1dfif//kf8e9u8+bNWLJkCXbs2IF77rkHycnJ4vGtra1obGwUL6KLiopwyy234LXXXsPNN9884nkefvhhtLe346233sLChQsBABs3bsQVV1yBH/7wh7jllluQl5eHvLw83HXXXSgsLPRKFRoqMTER3/zmN7FlyxZcccUVPo+12Wz49re/jZ///Ofi65o3bx6efvppMdB4++23UVlZieeeew7/+q//Kj536dKlWLlyJZ5//nmv34+kqKjI62elUjnqTMM999yDRx99FOXl5Xj44Ydx0003YfHixVi9ejVSU1N9PsdoNAIAurq68L//+7/461//iiuuuGLYuWl6EwQBFy9eRGdn56TasVgkaG2NwcCABDExAi6/fACJiYJ/OknjJpVKkZubGxbprRPBQIOIwkJUVBRuv/12PProozh79qy42LmqqgrZ2dn4yle+MuJzPXn/f//733HllVeO6U71aAbPnNhsNvT29oqpMB999NG4Ao3BNBoN7rnnHtxyyy3YsWOHz/PZ7XZ0d3dDpVIhLS0NH330Ee66665xn+uVV17BjBkzcMcdd4i/i46Oxvbt23HHHXfg+PHjXgHEt7/9ba879Z7X2NzcfMnzXHvttWKQAQBJSUn47ne/i5/97GfQaDQoKysbd/8vZfPmzV4/L1q0CM8++6z48/PPP4/U1FQsW7ZMvJAHgPnz5yMpKQnHjh0bU6DxwgsvICUlRfx5pFk1j+zsbHz66af4j//4D7z00kvYvXs3du/ejZiYGOzYsQM7duzwmhGzWCxiqpjHDTfc4PVaKDJ4goysrCwkJCSMa+a0rk6Cp56KwmuvSaHTSSAI/3yuRCIgN1fAihUubNzoREkJg46p4nK50NbWhgsXLuDyyy8f179puGCgQURhY926dXj00UdRVVWF+++/H+fOncNbb72F7du3j7r4e8mSJfjGN76BX/3qV3j00Udx00034dZbb8W//uu/Tmhnqo6ODvzqV7/CwYMHh60Z6erqGnd7gHsh8Nq1azFr1iz893//t9cHTl9fH379619j3759OH/+PAThnxcCEz1fS0sLCgoKhk3Ze1KtWlpavH5/+eWXe/3sCToutZ6hpaXF5y5Mg8/j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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Create a bipartite graph from the adjacency matrix\n", "G = nx.Graph()\n", "proc_times = td[\"proc_times\"].squeeze(0)\n", "job_ops_adj = td[\"job_ops_adj\"].squeeze(0)\n", "order = td[\"ops_sequence_order\"].squeeze(0) + 1\n", "\n", "num_machines, num_operations = proc_times.shape\n", "num_jobs = job_ops_adj.size(0)\n", "\n", "jobs = [f\"j{i+1}\" for i in range(num_jobs)]\n", "machines = [f\"m{i+1}\" for i in range(num_machines)]\n", "operations = [f\"o{i+1}\" for i in range(num_operations)]\n", "\n", "# Add nodes from each set\n", "G.add_nodes_from(machines, bipartite=0)\n", "G.add_nodes_from(operations, bipartite=1)\n", "G.add_nodes_from(jobs, bipartite=2)\n", "\n", "# Add edges based on the adjacency matrix\n", "for i in range(num_machines):\n", " for j in range(num_operations):\n", " edge_weigth = proc_times[i][j]\n", " if edge_weigth != 0:\n", " G.add_edge(f\"m{i+1}\", f\"o{j+1}\", weight=edge_weigth)\n", "\n", "\n", "# Add edges based on the adjacency matrix\n", "for i in range(num_jobs):\n", " for j in range(num_operations):\n", " edge_weigth = job_ops_adj[i][j]\n", " if edge_weigth != 0:\n", " G.add_edge(f\"j{i+1}\", f\"o{j+1}\", weight=3, label=order[j])\n", "\n", "\n", "widths = [x / 3 for x in nx.get_edge_attributes(G, 'weight').values()]\n", "\n", "plt.figure(figsize=(10,6))\n", "# Plot the graph\n", "\n", "machines = [n for n, d in G.nodes(data=True) if d['bipartite'] == 0]\n", "operations = [n for n, d in G.nodes(data=True) if d['bipartite'] == 1]\n", "jobs = [n for n, d in G.nodes(data=True) if d['bipartite'] == 2]\n", "\n", "pos = {}\n", "pos.update((node, (1, index)) for index, node in enumerate(machines))\n", "pos.update((node, (2, index)) for index, node in enumerate(operations))\n", "pos.update((node, (3, index)) for index, node in enumerate(jobs))\n", "\n", "edge_labels = {(u, v): d['label'].item() for u, v, d in G.edges(data=True) if d.get(\"label\") is not None}\n", "nx.draw_networkx_edge_labels(G, {k: (v[0]+.12, v[1]) for k,v in pos.items()}, edge_labels=edge_labels, rotate=False)\n", "\n", "nx.draw_networkx_nodes(G, pos, nodelist=machines, node_color='b', label=\"Machine\")\n", "nx.draw_networkx_nodes(G, pos, nodelist=operations, node_color='r', label=\"Operation\")\n", "nx.draw_networkx_nodes(G, pos, nodelist=jobs, node_color='y', label=\"jobs\")\n", "nx.draw_networkx_edges(G, pos, width=widths, alpha=0.6)\n", "\n", "plt.title('Visualization of the FJSP')\n", "plt.legend(bbox_to_anchor=(.95, 1.05))\n", "plt.axis('off')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Build a Model to Solve the FJSP\n", "\n", "In the FJSP we typically encode Operations and Machines separately, since they pose different node types in a k-partite Graph. Therefore, the encoder for the FJSP returns two hidden representations, the first containing machine embeddings and the second containing operation embeddings:" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [], "source": [ "# Lets generate a more complex instance\n", "\n", "generator_params = {\n", " \"num_jobs\": 10, # the total number of jobs\n", " \"num_machines\": 5, # the total number of machines that can process operations\n", " \"min_ops_per_job\": 4, # minimum number of operatios per job\n", " \"max_ops_per_job\": 6, # maximum number of operations per job\n", " \"min_processing_time\": 1, # the minimum time required for a machine to process an operation\n", " \"max_processing_time\": 20, # the maximum time required for a machine to process an operation\n", " \"min_eligible_ma_per_op\": 1, # the minimum number of machines capable to process an operation\n", " \"max_eligible_ma_per_op\": 5, # the maximum number of machines capable to process an operation\n", "}\n", "\n", "env = FJSPEnv(generator_params=generator_params)\n", "td = env.reset(batch_size=[1])" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "torch.Size([1, 60, 32])\n", "torch.Size([1, 5, 32])\n" ] } ], "source": [ "encoder = HetGNNEncoder(embed_dim=32, num_layers=2)\n", "(ma_emb, op_emb), init = encoder(td)\n", "print(ma_emb.shape)\n", "print(op_emb.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The decoder return logits over a composite action-space of size (1 + num_jobs * num_machines), where each entry corresponds to a machine-job combination plus one **waiting**-operation. The selected action specifies, which job is processed next by which machine. To be more precise, the next operation of the selected job is processed. This operation can be retrieved from __td[\"next_op\"]__" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tensor([[ 0, 4, 8, 13, 19, 25, 31, 37, 42, 46]])" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# next operation per job\n", "td[\"next_op\"]" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "torch.Size([1, 51])\n" ] } ], "source": [ "decoder = L2DDecoder(env_name=env.name, embed_dim=32)\n", "logits, mask = decoder(td, (ma_emb, op_emb), num_starts=0)\n", "# (1 + num_jobs * num_machines)\n", "print(logits.shape)" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [], "source": [ "def make_step(td):\n", " logits, mask = decoder(td, (ma_emb, op_emb), num_starts=0)\n", " action = logits.masked_fill(~mask, -torch.inf).argmax(1)\n", " td[\"action\"] = action\n", " td = env.step(td)[\"next\"]\n", " return td" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Visualize solution construction\n", "\n", "Starting at $t=0$, the decoder uses the machine-operation embeddings of the encoder to decide which machine-**job**-combination to schedule next. Note, that due to the precedence relationship, the operations to be scheduled next are fixed per job. Therefore, it is sufficient to determine the next job to be scheduled, which significantly reduces the action space. \n", "\n", "After some operations have been scheduled, either all the machines are busy or all the jobs have been scheduled with their currently active operation. In this case, the environment transitions to a new time step $t$. The new $t$ will be equal to the first time step where a machine finishes an operation in the partial schedule. When an operation is finished, the machine that has processed it is immediately ready to process the next operation. Also, the next operation of the respective job can then be scheduled.\n", "\n", "The start time of an operation is always equal to the time step in which it is scheduled. The finish time of an operation is equal to its start time plus the processing time required by the machine on which it is being processed.\n", "\n", "The figure below visualises this process. " ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/luttmann/opt/miniconda3/envs/rl4co_pypi/lib/python3.12/site-packages/matplotlib/axes/_axes.py:2316: DeprecationWarning: __array_wrap__ must accept context and return_scalar arguments (positionally) in the future. (Deprecated NumPy 2.0)\n", " dx = [convert(x0 + ddx) - x for ddx in dx]\n" ] }, { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "env.render(td, 0)\n", "# Update plot within a for loop\n", "while not td[\"done\"].all():\n", " # Clear the previous output for the next iteration\n", " clear_output(wait=True)\n", "\n", " td = make_step(td)\n", " env.render(td, 0)\n", " # Display updated plot\n", " display(plt.gcf())\n", " \n", " # Pause for a moment to see the changes\n", " time.sleep(.4)" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [], "source": [ "if torch.cuda.is_available():\n", " accelerator = \"gpu\"\n", " batch_size = 256\n", " train_data_size = 2_000\n", " embed_dim = 128\n", " num_encoder_layers = 4\n", "else:\n", " accelerator = \"cpu\"\n", " batch_size = 32\n", " train_data_size = 1_000\n", " embed_dim = 64\n", " num_encoder_layers = 2" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Policy: neural network, in this case with encoder-decoder architecture\n", "policy = L2DPolicy(embed_dim=embed_dim, num_encoder_layers=num_encoder_layers, env_name=\"fjsp\")\n", "\n", "# Model: default is AM with REINFORCE and greedy rollout baseline\n", "model = L2DModel(env,\n", " policy=policy, \n", " baseline=\"rollout\",\n", " batch_size=batch_size,\n", " train_data_size=train_data_size,\n", " val_data_size=1_000,\n", " optimizer_kwargs={\"lr\": 1e-4})\n", "\n", "trainer = RL4COTrainer(\n", " max_epochs=3,\n", " accelerator=accelerator,\n", " devices=1,\n", " logger=None,\n", ")\n", "\n", "trainer.fit(model)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Solving the Job-Shop Scheduling Problem (JSSP)" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [], "source": [ "import gc\n", "from rl4co.envs import JSSPEnv\n", "from rl4co.models.zoo.l2d.model import L2DPPOModel\n", "from rl4co.models.zoo.l2d.policy import L2DPolicy4PPO\n", "from torch.utils.data import DataLoader\n", "import json\n", "import os" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Lets generate a more complex instance\n", "\n", "generator_params = {\n", " \"num_jobs\": 15, # the total number of jobs\n", " \"num_machines\": 15, # the total number of machines that can process operations\n", " \"min_processing_time\": 1, # the minimum time required for a machine to process an operation\n", " \"max_processing_time\": 99, # the maximum time required for a machine to process an operation\n", "}\n", "\n", "env = JSSPEnv(\n", " generator_params=generator_params, \n", " _torchrl_mode=True, \n", " stepwise_reward=True\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Train on synthetic data and test on Taillard benchmark" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Policy: neural network, in this case with encoder-decoder architecture\n", "policy = L2DPolicy4PPO(\n", " embed_dim=embed_dim, \n", " num_encoder_layers=num_encoder_layers, \n", " env_name=\"jssp\",\n", " het_emb=False\n", ")\n", "\n", "model = L2DPPOModel(\n", " env=env,\n", " policy=policy,\n", " batch_size=batch_size,\n", " train_data_size=train_data_size,\n", " val_data_size=1_000,\n", " optimizer_kwargs={\"lr\": 1e-4}\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "CHECKPOINT_PATH = \"last.ckpt\"\n", "device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n", "try:\n", " model = L2DPPOModel.load_from_checkpoint(CHECKPOINT_PATH)\n", "except FileNotFoundError:\n", "\n", " trainer = RL4COTrainer(\n", " max_epochs=1,\n", " accelerator=accelerator,\n", " devices=1,\n", " logger=None,\n", " )\n", "\n", " trainer.fit(model)\n", "finally:\n", " model = model.to(device)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%%bash\n", "\n", "# Check if the folder exists\n", "if [ -d \"JSPLIB\" ]; then\n", " echo \"Found JSPLIB\"\n", "else\n", " echo \"Cloning JSPLIB\"\n", " git clone https://github.com/tamy0612/JSPLIB.git\n", "fi\n", "\n", "exit 0\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def prepare_taillard_data(nj, nm):\n", " fp = f\"taillard/{nj}x{nm}\"\n", " if os.path.exists(fp):\n", " pass\n", " else:\n", " os.makedirs(fp)\n", " with open('JSPLib/instances.json', 'r') as file:\n", " data = json.load(file)\n", "\n", " instances = [x for x in data if \"ta\" in x[\"name\"] and x[\"jobs\"] == nj and x[\"machines\"] == nm]\n", "\n", " for instance in instances:\n", " os.popen(f\"cp JSPLIB/{instance['path']} {fp}/{instance['name']}.txt\") \n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# path to taillard instances\n", "FILE_PATH = \"taillard/{nj}x{nm}\"\n", "\n", "results = {}\n", "instance_types = [(15, 15), (20, 15), (20, 20), (30, 15), (30, 20)]\n", "\n", "for instance_type in instance_types:\n", " nj, nm = instance_type\n", " prepare_taillard_data(nj, nm)\n", " dataset = env.dataset(batch_size=[10], phase=\"test\", filename=FILE_PATH.format(nj=nj, nm=nm))\n", " dl = DataLoader(dataset, batch_size=5, collate_fn=dataset.collate_fn)\n", " rewards = []\n", " \n", " for batch in dl:\n", " td = env.reset(batch).to(device)\n", " # use policy.generate to avoid grad calculations which can lead to oom \n", " out = model.policy.generate(td, env=env, phase=\"test\", decode_type=\"multistart_sampling\", num_starts=100, select_best=True)\n", " rewards.append(out[\"reward\"])\n", "\n", " reward = torch.cat(rewards, dim=0).mean().item()\n", " results[instance_type] = reward\n", "\n", " print(\"Done evaluating instance type %s with reward %s\" % (instance_type, reward))\n", "\n", " # avoid ooms due to cache not being cleared \n", " model.rb.empty()\n", " gc.collect()\n", " torch.cuda.empty_cache()" ] } ], "metadata": { "kernelspec": { "display_name": "rl4co_pypi", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.5" } }, "nbformat": 4, "nbformat_minor": 4 }