Tips

本章ではAmplify Schedの機能の詳細を扱います。

from amplify_sched import *
import datetime

token = "xxxxxxxxxxxxxxxxxxxxxxxxx"

日時指定

スケジュールの開始日時と各処理時間を実時間を単位として指定できます。

下記ではスケジュールの開始日時を2023年5月1日、処理時間の単位を15分に設定しています。

model = Model()
model.start = datetime.datetime(2023, 5, 1, 9, 0, 0)
model.time_unit = datetime.timedelta(minutes=15)

model.jobs.add("Job A")
model.jobs.add("Job B")
model.jobs.add("Job C")
model.jobs.add("Job D")

model.machines.add("Machine X")
model.machines.add("Machine Y")
model.machines.add("Machine Z")

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

gantt = model.solve(token=token, timeout=1)
gantt.timeline(machine_view=True)

ガントチャート

得られたスケジュールをガントチャートで表示できます。ガントチャートはplotly.graph_objs.Figureを用いて出力します。

縦軸をJob名で描画

gantt.timeline()

縦軸をMachine名で描画

gantt.timeline(machine_view=True)

Processごとに分けて描画

gantt.timeline(separated_by_task=True)

グラフのサイズを指定して出力する

fig = gantt.timeline(height=400, width=1000)
# pngで出力
fig.write_image("image/gantt.png")
# htmlで出力
fig.write_html("image/gantt.html")