{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## How Solutions are Represented\n", "A solution to the JSSP can be defined as a sequence of operations for each machine. The `Schedule` class maintains a list of `ScheduledOperations` for each machine, which stores the operation, the time it starts to be processed and the machine in which it is going to be processed.\n", "\n", "The `Schedule` class is initialized with a `JobShopInstance`, which describes the JSSP you're working with. You can optionally pass a predefined schedule, a list of lists where each sublist represents the operations scheduled on a particular machine. In order to create a posible solution for this instance we can do it manually as follows:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, the operations from the previous example are organized by their respective machines." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from job_shop_lib import JobShopInstance, Operation\n", "\n", "CPU = 0\n", "GPU = 1\n", "DATA_CENTER = 2\n", "\n", "job_1 = [Operation(CPU, 1), Operation(GPU, 1), Operation(DATA_CENTER, 7)]\n", "job_2 = [Operation(GPU, 5), Operation(DATA_CENTER, 1), Operation(CPU, 1)]\n", "job_3 = [Operation(DATA_CENTER, 1), Operation(CPU, 3), Operation(GPU, 2)]\n", "\n", "jobs = [job_1, job_2, job_3]\n", "\n", "instance = JobShopInstance(\n", " jobs,\n", " name=\"Example\",\n", " # Any extra parameters are stored inside the\n", " # metadata attribute as a dictionary:\n", " lower_bound=7,\n", ")" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from job_shop_lib import ScheduledOperation, Schedule\n", "\n", "cpu_operations = []\n", "gpu_operations = []\n", "data_center_operations = []\n", "\n", "# Split the operations into three lists, one for each machine\n", "for job in instance.jobs:\n", " for operation in job:\n", " if operation.machine_id == CPU:\n", " cpu_operations.append(operation)\n", " elif operation.machine_id == GPU:\n", " gpu_operations.append(operation)\n", " elif operation.machine_id == DATA_CENTER:\n", " data_center_operations.append(operation)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note, that since each job does not have more than one operation for the same machine, we don't have to worry about the order of the operations in the list. However, we have to take into account the start time of each operation. In this case, we add to the last start time of the previous machine the maximum job duration of the instance. Of course, the solution will not be optimal, but it is a valid solution for the instance." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# Schedule the operations as they are ordered in the instance\n", "def schedule_operations(operations, machine_id, start_time=0):\n", " machine_schedule = []\n", " for operation in operations:\n", " machine_schedule.append(\n", " ScheduledOperation(operation, start_time, machine_id)\n", " )\n", " start_time += 7\n", "\n", " return machine_schedule\n", "\n", "\n", "cpu_schedule = schedule_operations(cpu_operations, CPU)\n", "gpu_schedule = schedule_operations(gpu_operations, GPU, start_time=5)\n", "data_center_schedule = schedule_operations(\n", " data_center_operations, DATA_CENTER, start_time=10\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we can create a `Schedule` object with the instance and the solution." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "instance_schedule = [cpu_schedule, gpu_schedule, data_center_schedule]\n", "schedule = Schedule(instance, instance_schedule)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Is the schedule complete? True\n", "Makespan: 25\n" ] } ], "source": [ "print(f\"Is the schedule complete? {schedule.is_complete()}\")\n", "print(\"Makespan:\", schedule.makespan())" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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9OrVC0888QReeeUVAMDUqVORmZmJDz74AK6urgBqPk5uv/12tG7dGgsWLMB3332H559/HkFBQXjnnXdw/fXXY+HChfj444/xyCOPoFu3bujTp0+F17/wwguwWCx47LHHkJaWhldffRX9+vVDfHw8vL29q2zzfffdhw8++ADjx4/H9OnTkZSUhDfeeAO7du3C1q1bK1yVri6//vorvvrqKzzwwAPw9/fH0qVLceuttyI5ORnBwcEAgPvvvx9ffPEFpk2bhpiYGJw7dw6//vor9u/fj86dO+OJJ56ocsxkZWXh3//+N0aPHo1JkyYhOzsb7733HgYOHIjt27ejY8eOFfKsWrUK2dnZuO+++2CxWLBo0SLccsstOHLkSHn7du/ejWuuuQbu7u6YPHkyGjVqhMTERHz77bd44YUXAACnT5/GVVddBYvFgmnTpiE0NBTff/89Jk6ciKysLMycObPGx4oQUk1qu1Il5iMzM1MBUMOHD6/0vfT0dHXmzJnyr39ePbK+iqaUUp988okCoH755Zfyx8qutkyYMKHCc0eMGKGCg4MrPObr66vGjh1byfvSSy9d8ipiGd98840CoJYsWXLJ5yr1f1eiWrdurQoKCsoff+211xQAtWfPnvLHbLV5/vz5ymKxqGPHjpU/NnbsWAVAPf7445WeP2TIkCqvItrC1hW+r7/+WgFQzz//fIXHR44cqSwWizp8+HD5YwCUi4uL2rdvX7V/HmxcyQSg7rvvvgrPnTNnjnJxcVG//PKLWr16tQKgXn311QrPqek4mTx5cvljxcXFqkGDBspisagFCxaUP56enq68vb0rjJWyfqxfv36FK8mff/65AqBee+218sesryj+73//UwDUxx9/XCHnDz/8YPNxa6q6oujh4VGhL/78808FQL3++uvljwUEBKipU6de1F/VmCkuLq4wZpX6+9iEh4dXON/KrigGBwdXuEJadq58++235Y/16dNH+fv7VxjPSqkKV6onTpyo6tWrV+mq8B133KECAgJs9jkhRA/GmABGriiysrIA2L6y1bdvX4SGhpZ/LVu2rPx7/7w6k5+fj7Nnz+Kqq64CAMTFxVVy3X///RX+f8011+DcuXPlP18XZb6aXE0EgPHjx8PDw6NCPgA4cuRI+WP/bHNubi7Onj2Lq6++Gkop7Nq1q5JzypQpNcpQXf773//C1dUV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6fETJ07A31/vGyIhhBBCCKkd7NrC7/bbb0dAQACWL18Of39/7N69G6GhoRg2bBiioqKwYsUKZ2SthDO2ACoqKoK7u7sWl9l8N/qMRlF+sRYXAPy3YJXYtprNpztb69dfQUHN33qqxNNioc9ODk6ZLnbcAUDhyXZwc9W30HNxiadWX0nwPrHHT/J7CrfwMw52XVFcvHgxtm7dipiYGOTn5+POO+8sv+28cOFC3RkvK/v376fPTnre1VGbC5DdVrP5dGcbEqh3YX767EfyuAOA/ccHyfYJPn6SsxHjYNennhs0aIA///wTn376KXbv3o2cnBxMnDgRY8aMqfDhFiNy4cIF+uzEP9RPmwuQ3Vaz+XRnq+um7yoHfY4hedwBwIWCurJ9go+f5GzEONi9YaibmxvuuusunVlEoHuOpZl855IztLkA2W01m093tlNFeveMpc9+JI87APD3SZXtE3z8JGcjxsHuQjEhIQGbNm1CWloaSktLK3zv6aefdjhYbSF93SnJvj1cR/GK9elfRzGTPiE+yeMOABrrXveQ6yiK8RFjYNccxXfffRetW7fG008/jS+++AJr1qwp//r66681R7y87N69mz476Xt/D20uQHZbzebTne22oDD6hPgkjzsA2J10i2yf4OMnORsxDnZdUXz++efxwgsv4LHHHtOdhxBCCCGECMGuK4rp6em47bbbHP7hv/zyC4YOHYrIyEhYLBYRVyOjo6Pps5N9GxK0uQDZbTWbT3e2P3L03oqlz34kjzsAiArbJton+fhJzkaMg12F4m233YYff/zR4R+em5uLDh06YNmyZQ67dGE935K+6uPiZtdwqhLJbTWbT3c2F1joE+KTPO4AQCm92x/q9kk+fpKzEeNg12/2Zs2a4amnnsK4ceOwePFiLF26tMJXdRk8eDCef/55jBgxwp4YTuH48eP02Unr65pqcwGy22o2n+5s3f30LrBLn/1IHncAcPxMV9k+wcdPcjZiHOyao7h8+XL4+flhy5Yt2LJlS4XvWSwWTJ8+XUs4awoKClBQ8H/LQmRlZTnl5xBCCCGEEDu38HMGFosFa9aswfDhw6t8zrx58/DMM89UelznFkAFBQXw9PTU4jKbb2jAXcjP1re+27oLH4ltq9l8urO1e2MJcjXexvJ1caHPTvbfN03suAOAC8c7wtM9T5uvoMhHq6+o7h6x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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from job_shop_lib.visualization import plot_gantt_chart\n", "\n", "_ = plot_gantt_chart(schedule)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[[O(m=0, d=1, j=0, p=0), O(m=0, d=1, j=1, p=2), O(m=0, d=3, j=2, p=1)],\n", " [O(m=1, d=1, j=0, p=1), O(m=1, d=5, j=1, p=0), O(m=1, d=2, j=2, p=2)],\n", " [O(m=2, d=7, j=0, p=2), O(m=2, d=1, j=1, p=1), O(m=2, d=1, j=2, p=0)]]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "raw_solution = [cpu_operations, gpu_operations, data_center_operations]\n", "raw_solution" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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Tz/hP//5D7p162bt8WhKeWmFsLZJ4JFYtvXVtrUVt8QX22zrom0j5lx30W3Shjqdo+jl5QVvb29rj0VzWvZtIqzd1dWDbbZVcf78ebbZZlvJdlYXXbZJG+o0UXzzzTcxa9YsFBeLuZI8ERERESmv1pfHadu2bbVzEc+cOQNJkhAeHg57e/tq901IUOecB9GXxxniF4uibDGT5asfdENehZiXvj1sbdnWUfvYxKfh5OQkpH39+nW22a737aLzHeHkkCekfb3UQ0ibl8fRjlqfo3irNZj1qmXfJtj/5WEh7XtcPfBT3jW22VbcuXPn0Lx5c7bZZlsh57O6ICpkq+7apA21nijOnj1byXFokm+4uPV3g43iljJkW1/t/Hxx77hmm21dtIuDdNkmbajTOYrx8fHYv39/jdv379+PgwcPyh6UVhRkFwlr51aIW9KNbX21HR0d2WabbQU5GcW87Cy6TdpQp4liXFwcLly4UOP2S5cuIS4uTvagtOL3NeKuP/VDjrj1OdnWV7tFixZss822gpqHbtFlm7ShThPF48ePo127djVub9u2LY4fPy57UFrR7/l7hbWf8A1km21VHDp0iG222VZQwpnRumyTNtRpoujg4IDMzMwat1++fBl2dnW6hjcRERER3WXqNFHs27cvZs6ciby8/53bkJubi3/961/o06eP1QZ3t0v+XdwFWhOLC9hmWxXBwcFss822km2fI7pskzbU6fDfu+++ix49eiAsLAxt27YFACQmJiIgIACfffaZVQd4Nyu+dl1YO1/QNfXY1l9br28wYJtttTjYi3vHtcg2aUOdjig2aNAAR44cwcKFCxEdHY327dtjyZIlOHr0KEJCQqw9xrtWzENRwto93DzZZlsVZ8+eZZttthWUmtFdl23ShjqfUOji4oJJkyZZcyxEREREdBep9RJ+lhw/fhxpaWkoKyurdvvDDz8se2C1IXoJv0eDxyE/o1D1LgDkftgd2eXlQto+dnZs66h9dMJTcHFxEdIuKipim+163y441xUujmIugVVU4iOkzSX8tKNOLz2fPXsWMTExaNmyJQYOHIghQ4ZgyJAhGDp0KIYOHWrtMd61mnYPF9Zu5+LGNtuquHjxIttss62gS9ltdNkmbajTRPHZZ59Fo0aNkJWVBWdnZxw7dgy//vorOnTogN27d1t5iHevgCa+wtqhRnEn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bbbZtrp9hfnC2iF+B9hWmV63c9IGThRlOHr0KNtss8221T3q7SesnXRuCNsq0+t2TtrAiSIRERERWcSJogzh4eFss80221a3tyBPWDs84A+21W7rdDsnbeBEUYby8nK22WabbatztBG3azZVOLKtMr1u56QNnCjKcPHiRbbZZpttq2vv4iasfelqW7ZVptftnLSBE0UiIiIisqheLOHXE4OFrMzyY+k62Nur3wUAk8nENtts19N29AeLUCKZhbRPPLIW9nZiLsJsKnfUZbvC55jutnMu4acdPKIow8mTJ9lmm222ra6/p7ew9qlLfdlWmV63c9IGThRlKC4uZpttttm2Oh87MUeXAKC4RNwkVbdtnW7npA2cKMrg6urKNttss211maYyYW1Xpyy21W7rdDsnbeBEUYaIiAi22WabbavbnZ8rrB0R9Cvbard1up2TNnCiKMPhw4fZZptttq1upI+/sPbhs8PYVrut0+2ctIETRSIiIiKyiBNFGUJDQ9lmm222rW5/Yb6wdohfPNsq0+t2TtrAiSIRERERWcSJogxpaWlss80221bX2VXcBYgvXOnItsr0up2TNnCiSEREREQWcQk/GTYXfwZHR0fVuwBQUlLCNtts19N26w8Xo9BcIaR9bOgXcLAvFNIuNbnqsl3meUR32zmX8NMOHlGUISUlhW222Wbb6nq6ewprp1zuwbbabZ1u56QNnCjKUFgo5n+fbLPNdv1uB9gbhbULr4u7hqNu2zrdzkkbOFGUwdnZmW222Wbb6rLLTcLazo7X2Fa7rdPtnLSB5yjK8GPpOtjbq98FAJPJxDbbbNfTdvQHi1AimYW0TzyyFvZ2JULapnJHXbYrfI7pbjvnOYrawSOKMiQkJLDNNttsW91o3wBh7T9THmNbZXrdzkkbOFEkIiIiIos4UZShYcOGbLPNNttWd6ioQFi7ge+fbKtMr9s5aQMnijLY2dmxzTbbbFtdiVnM+YkAYG8r5jw9Pbf1up2TNnCiKMO5c+fYZptttq2um5uHsPa5zK5sq93W6XZO2sCJIhERERFZxMvjyPB94Vph16AqLi5mm22262m73bIlyK0oF9I+MvgrODvkCmkXl3rqsl3inqi77ZyXx9EOHlGUIS0tjW222Wbb6rq4invivHClE9sq0+t2TtrAiaIMeXl5bLPNNttW18DoIKydVxTMttpt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k7hr2um1rdftnLSBE0UZ0tPT2Wabbbatro2zm7B2enZrttVu63Q7J23gRJGIiIiILOISfjL8VPYl7OzEXBi3vLycbbbZrqftZh+8D5OgXfPJRz+Fna1JSLu8wl6XbbPvcd1t51zCTzt4RFGGY8eOsc0222xb3cNePsLaJ9IeYltlet3OSRs4UZRBrycgs80228rytFX/FZJK18s82FaZXrdz0gZOFGUQebicbbbZrr/t9LJSYW1358tsq93W6XZO2sCJogzh4eFss80221b3e2GesHaY/z62VabX7Zy0gRNFGY4cOcI222yzbXXDvP2FtY+eG8q2yvS6nZM2cKJIRERERBZxoihDWFgY22yzzbbV/cGXnvXV1ul2TtrAiaIMFRUVbLPNNttWZ28wCGtXmI1sq93W6XZO2sCJogwXL15km2222ba6Di7i3ol68Wo7ttVu63Q7J23gRJGIiIiILOISfjL8p+QLGI1iXq4oKytjm22262m75YeLUGw2C2kff+T/YLS7LqRdVu6ky3a5d5LutnMu4acdPKIow+nTp9lmm222ra6Ph7ewdvKl3myrTK/bOWkDJ4oyFBUVsc0222xbna+duCX8ikrErTOt27ZOt3PSBk4UZXB1dWWbbbbZtrosU5mwtqvTFbbVbut0Oydt4ERRhsjISLbZZpttq/slP0dYOyJoF9sq0+t2TtrAiaIMiYmJbLPNNttW95hPgLD24bMj2FaZXrdz0gY70QOwhu/z/k/Iu6b279+vepOI6r/ejSPwyqh/CGnv378fNoH/EtI2nNdnG+f5XEJ3Lx5RlCEkJIRtttlmm2222aZ6ixNFGWxsxP342GabbbbZZlvLbdIGbiEynD9/nm222WabbbbZpnqLE0UiIiIisqheLOEnagmg69evw8nJSfUu22yzzTbbbGu5Lfr5m2qPRxRlSE1NZZttttlmm222qd7iRFGGgoICttlmm2222Wab6i1OFGUQ9VIB22yzzTbbbGu9TdrAcxRlMJlMsLe3V73LNttss80221pui37+ptrjEUUZEhIS2GabbbbZZpttqrc0vYRf5cHQ/Px8If2ioiK22WabbbbZZvsOVTY1/KKmbmh6opidnQ2ASxARERFpUXZ2Njw8PEQPg25B0xNFb29vAEBaWprqG1p+fj5CQkJw4cIF1c+vYJttttlmm20tt/Py8hAa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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from job_shop_lib.dispatching import Dispatcher\n", "\n", "optimized_schedule = Dispatcher.create_schedule_from_raw_solution(\n", " instance, raw_solution\n", ")\n", "_ = plot_gantt_chart(optimized_schedule)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "job-shop-lib-gOF0HMZJ-py3.11", "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.11.8" } }, "nbformat": 4, "nbformat_minor": 2 }