Skip to main content

todo

Project description

Tests


Logo

Graph Job Shop Problem Gym Environment

Logo

About The Project

This provides an implementation OpenAi Gym Environment of the Job Shop Scheduling Problem (JSP) using the disjunctive graph approach. The environment offers multiple visualisation options, some of which are shown below

Github: https://github.com/Alexander-Nasuta/graph-jsp-env

PyPi: https://pypi.org/project/graph-jsp-env/

Quick Start

Install the Package

Install the package with pip:

   pip install graph-jsp-env

Minimal Working Example

the code below shows a minimal working example without any reinforcement learning

from graph_jsp_env.disjunctive_graph_jsp_env import DisjunctiveGraphJspEnv
import numpy as np

jsp = np.array([
    [
        [0, 1, 2, 3],  # job 0
        [0, 2, 1, 3]  # job 1
    ],
    [
        [11, 3, 3, 12],  # task durations of job 0
        [5, 16, 7, 4]  # task durations of job 1
    ]

])
env = DisjunctiveGraphJspEnv(jps_instance=jsp)

# loop over all actions
for i in range(env.total_tasks_without_dummies):
    _ = env.step(i)
    env.render()
# schedule is done when every action/node is scheduled
env.render(wait=None)  # with wait=None the window remains open till a button is pressed

Manual Scheduling

I recommend to do the schedule process manually once, before letting reinforcement agents do the work. To do so first install inquirer. This package will handle your input, that you will select in the console.

pip install inquirer

Then run the following code:

import inquirer
import numpy as np

from graph_jsp_env.disjunctive_graph_jsp_env import DisjunctiveGraphJspEnv
from graph_jsp_env.disjunctive_graph_logger import log

jsp = np.array([
    [
        [0, 1, 2, 3],  # job 0
        [0, 2, 1, 3],  # job 1
    ],
    [
        [11, 3, 3, 12],  # task durations of job 0
        [5, 16, 7, 4],  # task durations of job 1
    ]

])

env = DisjunctiveGraphJspEnv(
    jps_instance=jsp,
    scaling_divisor=40.0  # makespan of the optimal solution for this instance
)

done = False
log.info("each task/node corresponds to an action")

while not done:
    env.render(
        show=["gantt_console", "gantt_window", "graph_console", "graph_window"],
        # ,stack='vertically'
    )
    questions = [
        inquirer.List(
            "task",
            message="Which task should be scheduled next?",
            choices=[
                (f"Task {task_id}", task_id)
                for task_id, bol in enumerate(env.valid_action_mask(), start=1)
                if bol
            ],
        ),
    ]
    action = inquirer.prompt(questions)["task"] - 1  # note task are index 1 in the viz, but index 0 in action space
    n_state, reward, done, info = env.step(action)
    # note: gantt_window and graph_window use a lot of resources

log.info(f"the JSP is completely scheduled.")
log.info(f"makespan: {info['makespan']}")
log.info("press any key to close the window (while the window is focused).")
# env.render(wait=None)  # wait for keyboard input before closing the render window
env.render(
    wait=None,
    show=["gantt_console", "graph_console", "graph_window"],
    # stack='vertically'
)

Demonstrator (windows executable)

A windows .exe-demonstrator is available on sciebo. It needs a while before the first console Outputs appear. This demonstrator is essentially the manual Scheduling above with the ft06 JSP instance.

Project Structure

This project is still in development and will have some significant changes before version 1.0.0. This project ist structured according to James Murphy's testing guide and this PyPi-publishing-guide.

Getting Started

If you just want to use the environment, then only the Usage section is relevant for you. If you want to further develop the environment the follow the instructions in the Development section.

Usage

Install the package with pip:

   pip install graph-jsp-env

TODO: present all major features of the env with ray, stb3

Development

To run this Project locally on your machine follow the following steps:

  1. Clone the repo
    git clone https://github.com/Alexander-Nasuta/graph-jsp-env.git
    
  2. Install the python requirements_dev packages. requirements_dev.txt includes all the packages of specified requirements.txt and some additional development packages like mypy, pytext, tox etc.
    pip install -r requirements_dev.txt
    
  3. Install the modules of the project locally. For more info have a look at James Murphy's testing guide
    pip install -e .
    

Testing

For testing make sure that the dev dependencies are installed (requirements_dev.txt) and the models of this project are set up (i.e. you have run pip install -e .).

Then you should be able to run

mypy src
flake8 src
pytest

or everthing at once using tox.

tox

In this Section describes the used Setup and Development tools. This only relevant if you plan on further develop

Hardware

All the code was developed and tested locally on an Apple M1 Max 16" MacBook Pro (16-inch, 2021) with 64 GB Unified Memory.

The code should run perfectly fine on other devices and operating Systems (see Github tests).

Python Environment Management

Mac

On a Mac I recommend using Miniforge instead of more common virtual environment solutions like Anacond or Conda-Forge.

Accelerate training of machine learning models with TensorFlow on a Mac requires a special installation procedure, that can be found here. However, this repository provides only the gym environment and no concrete reinforcement learning agents. Todo: example project with sb3 and rl

Setting up Miniforge can be a bit tricky (especially when Anaconda is already installed). I found this guide by Jeff Heaton quite helpful.

Windows

On a Windows Machine I recommend Anacond, since Anacond and Pycharm are designed to work well with each other.

IDEA

I recommend to use Pycharm. Of course any code editor can be used instead (like VS code or Vim).

This section goes over a few recommended step for setting up the Project properly inside Pycharm.

PyCharm Setup

  1. Mark the src directory as Source Root.
   right click on the 'src' -> 'Mark directory as' -> `Source Root`
  1. Mark the resources directory as Resource Root.
   right click on the 'resources' -> 'Mark directory as' -> `Resource Root`
  1. Mark the tests directory as Test Source Root.
   right click on the 'tests' -> 'Mark directory as' -> `Test Source Root`

afterwards your project folder should be colored in the following way:

  1. (optional) When running a script enable Emulate terminal in output console
Run (drop down) | Edit Configurations... | Configuration | ☑️ Emulate terminal in output console

License

Distributed under the MIT License. See LICENSE.txt for more information.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

graph-jsp-env-0.1.0.tar.gz (27.0 kB view details)

Uploaded Source

Built Distribution

graph_jsp_env-0.1.0-py3-none-any.whl (23.8 kB view details)

Uploaded Python 3

File details

Details for the file graph-jsp-env-0.1.0.tar.gz.

File metadata

  • Download URL: graph-jsp-env-0.1.0.tar.gz
  • Upload date:
  • Size: 27.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.15

File hashes

Hashes for graph-jsp-env-0.1.0.tar.gz
Algorithm Hash digest
SHA256 30d9bf62bac1488987ff7445c05caeaab724d8e4b5e854c1261dd9b0903bbd9f
MD5 2877c82d59f3217ceeeac0c14b5bccff
BLAKE2b-256 ec028314c619cbcf139aa02c81c2acb45cef7a27d0498b849882bf43d24cc05a

See more details on using hashes here.

File details

Details for the file graph_jsp_env-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for graph_jsp_env-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 849033eeb8a76d4c0bca328fd3323e21b8d901072412e4ae7329265dc0099454
MD5 41cc684ae3fecc06ca5de54e7a1539f9
BLAKE2b-256 b90e72152dfd13d685fd20fbd3e342bc0f52c307c8307e5e453b57db500d8401

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page