{ "cells": [ { "cell_type": "markdown", "source": [ "# Graph Matrix JSP Environment Example" ], "metadata": { "collapsed": false }, "id": "1316e71f33ce6068" }, { "cell_type": "code", "execution_count": 121, "id": "91390c73", "metadata": { "ExecuteTime": { "end_time": "2025-03-20T14:07:06.572993Z", "start_time": "2025-03-20T14:07:06.569181Z" } }, "outputs": [], "source": [ "from jsp_instance_utils.instances import ft06, ft06_makespan\n", "from graph_matrix_jsp_env.disjunctive_jsp_env import DisjunctiveGraphJspEnv\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 122, "id": "56178ca2", "metadata": { "ExecuteTime": { "end_time": "2025-03-20T14:07:06.579293Z", "start_time": "2025-03-20T14:07:06.574011Z" } }, "outputs": [], "source": [ "def main():\n", " env = DisjunctiveGraphJspEnv(\n", " jsp_instance=ft06,\n", " c_lb=ft06_makespan,\n", " reward_function=\"makespan\"\n", " )\n", "\n", " done = False\n", " info = {}\n", " while not done:\n", " # get valid action mask. sample expects it to be a numpy array of type int8\n", " mask = np.array(env.valid_action_mask()).astype(np.int8)\n", " action = env.action_space.sample(mask=mask)\n", " state, reward, terminated, truncated, info = env.step(action)\n", "\n", " done = terminated or truncated\n", "\n", " # console rendering\n", " env.render()\n", " print(f\"makespan: {env.get_makespan()}\")" ] }, { "cell_type": "code", "execution_count": 123, "id": "d72df605", "metadata": { "ExecuteTime": { "end_time": "2025-03-20T14:07:06.625781Z", "start_time": "2025-03-20T14:07:06.580298Z" } }, "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;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;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[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;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;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;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;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;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[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;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;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;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;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;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;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;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;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 32.7 65.5 \n", "makespan: 71\n" ] } ], "source": [ "if __name__ == '__main__':\n", " main()" ] } ], "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 }