Graph JSP Environment Example¶
[4]:
from jsp_instance_utils.instances import ft06, ft06_makespan
from graph_jsp_env.disjunctive_graph_jsp_env import DisjunctiveGraphJspEnv
import numpy as np
[5]:
def main():
env = DisjunctiveGraphJspEnv(
jps_instance=ft06,
reward_function_parameters={
"scaling_divisor": ft06_makespan
},
)
done = False
info = {}
while not done:
# get valid action mask. sample expects it to be a numpy array of type int8
mask = np.array(env.valid_action_mask()).astype(np.int8)
action = env.action_space.sample(mask=mask)
state, reward, terminated, truncated, info = env.step(action)
done = terminated or truncated
# console rendering
env.render(show=["gantt_console", "graph_console"])
print(f"makespan: {info['makespan']}")
[6]:
if __name__ == '__main__':
main()
Job 0 ●-●-●-●-●-● Machine 0 █
Job 1 ●-●-●-●-●-● Machine 1 █
Job 2 ●-●-●-●-●-● Machine 2 █
Job 3 ●-●-●-●-●-● Machine 3 █
Job 4 ●-●-●-●-●-● Machine 4 █
Job 5 ●-●-●-●-●-● Machine 5 █
╔═══════════════════════════════════════════════════════╗
Job 0 ║ ████ ██████████ ███ ████ ║ Machine 0 █
Job 1 ║ ██████████████████ ███████████████████ ║ Machine 1 █
Job 2 ║ ███████ ████████████████████ ║ Machine 2 █
Job 3 ║████████ ███████ ██████████████║ Machine 3 █
Job 4 ║████████████████████ ║ Machine 4 █
Job 5 ║ █████ ███████████████████ ║ Machine 5 █
╚╦════╤════╤════╤════╤════╦════╤════╤════╤════╤════╦════╝
0.0 31.8 63.6
makespan: 69