{ "cells": [ { "cell_type": "markdown", "source": [ "# OR-Tools " ], "metadata": { "collapsed": false }, "id": "84274c1d3d525140" }, { "cell_type": "code", "execution_count": 1, "id": "7cd1f812", "metadata": { "ExecuteTime": { "end_time": "2025-03-20T14:07:20.806162Z", "start_time": "2025-03-20T14:07:20.428224Z" } }, "outputs": [], "source": [ "from jsp_instance_utils.instances import ft06, ft06_makespan\n", "from jsp_instance_utils.jsp_or_tools_solver import solve_jsp" ] }, { "cell_type": "code", "execution_count": 2, "id": "7fe0d3db", "metadata": { "ExecuteTime": { "end_time": "2025-03-20T14:07:20.921691Z", "start_time": "2025-03-20T14:07:20.807179Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " ╔═══════════════════════════════════════════════════════╗\n", "Job 0 ║ \u001B[38;2;76;242;206m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█ \u001B[38;2;25;149;242m█\u001B[38;2;25;149;242m█\u001B[38;2;25;149;242m█\u001B[38;2;25;149;242m█\u001B[38;2;25;149;242m█\u001B[38;2;25;149;242m█ \u001B[38;2;178;242;149m█\u001B[38;2;178;242;149m█\u001B[38;2;178;242;149m█\u001B[38;2;178;242;149m█\u001B[38;2;178;242;149m█\u001B[38;2;178;242;149m█\u001B[38;2;178;242;149m█ \u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█ \u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█ \u001B[0m║ Machine 0 \u001B[38;2;127;0;255m█\u001B[0m\n", "Job 1 ║\u001B[38;2;25;149;242m█\u001B[38;2;25;149;242m█\u001B[38;2;25;149;242m█\u001B[38;2;25;149;242m█\u001B[38;2;25;149;242m█\u001B[38;2;25;149;242m█\u001B[38;2;25;149;242m█\u001B[38;2;25;149;242m█\u001B[38;2;76;242;206m█\u001B[38;2;76;242;206m█\u001B[38;2;76;242;206m█\u001B[38;2;76;242;206m█\u001B[38;2;76;242;206m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█ \u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;178;242;149m█\u001B[38;2;178;242;149m█\u001B[38;2;178;242;149m█\u001B[38;2;178;242;149m█ \u001B[0m║ Machine 1 \u001B[38;2;25;149;242m█\u001B[0m\n", "Job 2 ║\u001B[38;2;76;242;206m█\u001B[38;2;76;242;206m█\u001B[38;2;76;242;206m█\u001B[38;2;76;242;206m█\u001B[38;2;76;242;206m█\u001B[38;2;178;242;149m█\u001B[38;2;178;242;149m█\u001B[38;2;178;242;149m█\u001B[38;2;178;242;149m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█ \u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;25;149;242m█ \u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[0m║ Machine 2 \u001B[38;2;76;242;206m█\u001B[0m\n", "Job 3 ║ \u001B[38;2;25;149;242m█\u001B[38;2;25;149;242m█\u001B[38;2;25;149;242m█\u001B[38;2;25;149;242m█\u001B[38;2;25;149;242m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█ \u001B[38;2;76;242;206m█\u001B[38;2;76;242;206m█\u001B[38;2;76;242;206m█\u001B[38;2;76;242;206m█\u001B[38;2;76;242;206m█\u001B[38;2;178;242;149m█\u001B[38;2;178;242;149m█\u001B[38;2;178;242;149m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█ \u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█ \u001B[0m║ Machine 3 \u001B[38;2;178;242;149m█\u001B[0m\n", "Job 4 ║ \u001B[38;2;76;242;206m█\u001B[38;2;76;242;206m█\u001B[38;2;76;242;206m█\u001B[38;2;76;242;206m█\u001B[38;2;76;242;206m█\u001B[38;2;76;242;206m█\u001B[38;2;76;242;206m█\u001B[38;2;76;242;206m█\u001B[38;2;76;242;206m█\u001B[38;2;25;149;242m█\u001B[38;2;25;149;242m█\u001B[38;2;25;149;242m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█ \u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█ \u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█ \u001B[38;2;178;242;149m█ \u001B[0m║ Machine 4 \u001B[38;2;255;149;78m█\u001B[0m\n", "Job 5 ║ \u001B[38;2;25;149;242m█\u001B[38;2;25;149;242m█\u001B[38;2;25;149;242m█\u001B[38;2;178;242;149m█\u001B[38;2;178;242;149m█\u001B[38;2;178;242;149m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;255;0;0m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;127;0;255m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;255;149;78m█\u001B[38;2;76;242;206m█ \u001B[0m║ Machine 5 \u001B[38;2;255;0;0m█\u001B[0m\n", " ╚╦════╤════╤════╤════╤════╦════╤════╤════╤════╤════╦════╝\n", " 0.0 25.5 50.9 \n" ] } ], "source": [ "makespan, status, *_ = solve_jsp(jsp_instance=ft06, plot_results=True)" ] }, { "cell_type": "code", "execution_count": 3, "id": "4256f487", "metadata": { "ExecuteTime": { "end_time": "2025-03-20T14:07:20.926407Z", "start_time": "2025-03-20T14:07:20.922918Z" } }, "outputs": [], "source": [ "assert status == \"OPTIMAL\"\n", "assert makespan == ft06_makespan" ] }, { "cell_type": "code", "execution_count": 4, "id": "7756ff00", "metadata": { "ExecuteTime": { "end_time": "2025-03-20T14:07:20.931369Z", "start_time": "2025-03-20T14:07:20.927447Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "makespan: 55.0 (OPTIMAL solution)\n" ] } ], "source": [ "print(f\"makespan: {makespan} ({status} solution)\")" ] } ], "metadata": { "jupytext": { "cell_metadata_filter": "-all", "main_language": "python", "notebook_metadata_filter": "-all" }, "kernelspec": { "name": "python3", "language": "python", "display_name": "Python 3 (ipykernel)" } }, "nbformat": 4, "nbformat_minor": 5 }