{ "cells": [ { "cell_type": "markdown", "source": [ "# Graph JSP Environment Example" ], "metadata": { "collapsed": false }, "id": "176ef8c2bf9c370d" }, { "cell_type": "code", "execution_count": 4, "id": "e5d7469c", "metadata": { "ExecuteTime": { "end_time": "2025-03-20T14:06:32.926914Z", "start_time": "2025-03-20T14:06:32.921568Z" } }, "outputs": [], "source": [ "from jsp_instance_utils.instances import ft06, ft06_makespan\n", "from graph_jsp_env.disjunctive_graph_jsp_env import DisjunctiveGraphJspEnv\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 5, "id": "ccb42bf5", "metadata": { "ExecuteTime": { "end_time": "2025-03-20T14:06:32.938151Z", "start_time": "2025-03-20T14:06:32.932725Z" } }, "outputs": [], "source": [ "def main():\n", " env = DisjunctiveGraphJspEnv(\n", " jps_instance=ft06,\n", " reward_function_parameters={\n", " \"scaling_divisor\": ft06_makespan\n", " },\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(show=[\"gantt_console\", \"graph_console\"])\n", " print(f\"makespan: {info['makespan']}\")" ] }, { "cell_type": "code", "execution_count": 6, "id": "0351dedb", "metadata": { "ExecuteTime": { "end_time": "2025-03-20T14:06:32.967717Z", "start_time": "2025-03-20T14:06:32.940230Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Job 0 \u001B[38;2;76;242;206m●\u001B[0m-\u001B[38;2;127;0;255m●\u001B[0m-\u001B[38;2;25;149;242m●\u001B[0m-\u001B[38;2;178;242;149m●\u001B[0m-\u001B[38;2;255;0;0m●\u001B[0m-\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[0m-\u001B[38;2;76;242;206m●\u001B[0m-\u001B[38;2;255;149;78m●\u001B[0m-\u001B[38;2;255;0;0m●\u001B[0m-\u001B[38;2;127;0;255m●\u001B[0m-\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[0m-\u001B[38;2;178;242;149m●\u001B[0m-\u001B[38;2;255;0;0m●\u001B[0m-\u001B[38;2;127;0;255m●\u001B[0m-\u001B[38;2;25;149;242m●\u001B[0m-\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[0m-\u001B[38;2;127;0;255m●\u001B[0m-\u001B[38;2;76;242;206m●\u001B[0m-\u001B[38;2;178;242;149m●\u001B[0m-\u001B[38;2;255;149;78m●\u001B[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[0m-\u001B[38;2;25;149;242m●\u001B[0m-\u001B[38;2;255;149;78m●\u001B[0m-\u001B[38;2;255;0;0m●\u001B[0m-\u001B[38;2;127;0;255m●\u001B[0m-\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[0m-\u001B[38;2;178;242;149m●\u001B[0m-\u001B[38;2;255;0;0m●\u001B[0m-\u001B[38;2;127;0;255m●\u001B[0m-\u001B[38;2;255;149;78m●\u001B[0m-\u001B[38;2;76;242;206m●\u001B[0m Machine 5 \u001B[38;2;255;0;0m█\u001B[0m\n", " ╔═══════════════════════════════════════════════════════╗\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;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[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;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;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;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;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;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;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 31.8 63.6 \n", "makespan: 69\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 }