Getting started
はじめに
Amplify Schedはスケジューリング問題の定式化をサポートするライブラリです。Amplify Schedで定式化されたスケジューリング問題はAmplify Scheduling Engineにてスケジュールの最適化を行うことができます。
スケジューリング問題
スケジューリング問題とは、複数のジョブ (Job) とそれらを処理する複数のマシン (Machine) のスケジュールを決定する問題です。 1つのジョブは、指定されたマシンで指定された時間、複数の処理 (Task) を実行し、すべてのタスクが完了するとジョブが完了します。
Job
複数の Task から構成されます。Job 内の各 Task には順序関係が定められており、その順序で処理を行う必要があります。また同時に複数の Task を行うことはできません。Job 内の Task の順番を Process 1, Process 2, …と呼びます。
Task
Task は Job と Process から一意に決まります。Task の変数として、処理開始時刻、処理終了時刻、処理を行う Machine があります。 処理を行うことができる Machine ごとに、Task の処理時間を設定します。
Machine
Task を処理する機械です。複数の Task を同時に処理することはできません。
スケジューリング問題の評価尺度
Makespan
すべての Job の最後の処理終了時間(メイクスパン)を最小にするスケジュールを探索します。
Amplify Schedによるスケジューリング問題の定式化
Amplify Schedで下記の問題の定式化を行います。
Job name |
Process |
Machine name |
Processing Time |
---|---|---|---|
Job A |
0 |
Machine X |
10 |
Job A |
1 |
Machine Y |
20 |
Job A |
2 |
Machine Z |
15 |
Job B |
0 |
Machine Y |
10 |
Job B |
1 |
Machine Z |
20 |
Job B |
2 |
Machine X |
15 |
Job C |
0 |
Machine Z |
10 |
Job C |
1 |
Machine X |
20 |
Job C |
2 |
Machine Y |
15 |
Job D |
0 |
Machine Z |
10 |
Job D |
1 |
Machine Y |
20 |
Job D |
2 |
Machine X |
15 |
from amplify_sched import *
# define Model
model = Model()
# define Jobs
model.jobs.add("Job A")
model.jobs.add("Job B")
model.jobs.add("Job C")
model.jobs.add("Job D")
# define Machines
model.machines.add("Machine X")
model.machines.add("Machine Y")
model.machines.add("Machine Z")
# add Task to Jobs
model.jobs["Job A"].append(Task())
model.jobs["Job A"][0].processing_times["Machine X"] = 10
model.jobs["Job A"].append(Task())
model.jobs["Job A"][1].processing_times["Machine Y"] = 20
model.jobs["Job A"].append(Task())
model.jobs["Job A"][2].processing_times["Machine Z"] = 15
model.jobs["Job B"].append(Task())
model.jobs["Job B"][0].processing_times["Machine Y"] = 10
model.jobs["Job B"].append(Task())
model.jobs["Job B"][1].processing_times["Machine Z"] = 20
model.jobs["Job B"].append(Task())
model.jobs["Job B"][2].processing_times["Machine X"] = 15
model.jobs["Job C"].append(Task())
model.jobs["Job C"][0].processing_times["Machine Z"] = 10
model.jobs["Job C"].append(Task())
model.jobs["Job C"][1].processing_times["Machine X"] = 20
model.jobs["Job C"].append(Task())
model.jobs["Job C"][2].processing_times["Machine Y"] = 15
model.jobs["Job D"].append(Task())
model.jobs["Job D"][0].processing_times["Machine Z"] = 10
model.jobs["Job D"].append(Task())
model.jobs["Job D"][1].processing_times["Machine Y"] = 20
model.jobs["Job D"].append(Task())
model.jobs["Job D"][2].processing_times["Machine X"] = 15
# Enter your token for Amplify Scheduling Engine.
token = "xxxxxxxxxxxxxxxxxxxxxxxxxxx"
gantt = model.solve(token=token, timeout=1)
gantt.timeline()