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")