解説
AIの予定は全部足せば何分?依存関係と並行できる作業を分けよう
合計85分の架空の作業が、別担当で並行できる条件では65分になる例。Pythonの依存順序とタイムラインで、開始条件や人員の前提を確認。

AIが作った作業予定の分数を足したら85分。でも、別の担当者が並行して進めるなら、終わるまでの時間は同じとは限らないよ。
今回は架空の四つの作業で、何が終わったら次を始められるかを整理する。BとCは別の担当で同時に進められる、という前提の例だよ。
作業の合計と、終了までの時間
| 作業 | 所要時間 | 先に完了が必要なもの |
|---|---|---|
| A:準備 | 30分 | なし |
| B:デザイン | 20分 | A |
| C:文章 | 25分 | A |
| D:確認 | 10分 | BとC |
単純な合計は30+20+25+10で85分。一方、BとCが並行できる場合は、Aの30分のあとに長いほうの25分、そのあとDの10分で、最短の計算は65分になる。
同時にできるという前提が必要

BとCを同じ一人が担当し、同時には進められないなら、この65分の計算はそのまま使えない。必要な人員、道具、承認待ちなどの条件も確認する必要があるね。
ここで見るのは依存関係から決まる開始可能時刻。現実の仕事が必ず65分で終わるという見積もりではないよ。
Pythonで開始・終了の条件を確かめる
from graphlib import TopologicalSorter
minutes = {"A": 30, "B": 20, "C": 25, "D": 10}
depends = {"A": set(), "B": {"A"}, "C": {"A"}, "D": {"B", "C"}}
start, finish = {}, {}
for name in TopologicalSorter(depends).static_order():
start[name] = max((finish[dep] for dep in depends[name]), default=0)
finish[name] = start[name] + minutes[name]
for name in ["A", "B", "C", "D"]:
print(name, start[name], finish[name])
print("sum", sum(minutes.values()))
print("finish", max(finish.values()))
期待する開始・終了はAが0・30、Bが30・50、Cが30・55、Dが55・65。合計は85、最終終了は65になる。
TopologicalSorterは、先に必要な作業を考慮した順序を求めるために使っている。担当者の空き時間まで自動的に調整する機能ではないよ。
両方が終わるなら、遅いほうを待つ
Dの開始を、Bが終わる50分にしてしまうと、まだCが終わっていない。複数の前提がある場合は、全部がそろった時刻を使う必要がある。
どの経路が終了時刻を決めるかを見る考え方は、クリティカルパスと呼ばれる。今回の条件ではA→C→Dが65分で、短い側のA→B→Dより後に終わる。
AIへ頼むときは、順序と資源の条件も渡す
作業名・時間に加えて、前提となる作業、同時に使える担当者、待ち時間などを指定する。回答が出たら、開始時刻が前提の終了より前になっていないかを、表へ戻して確認しよう。
依存関係が循環していれば、そのままでは開始順序を作れない。例のライブラリも循環を検出するとエラーになるため、無理に順番を作る前に条件を見直したいね。
編集部ではPython 3.12で四作業の時刻、85と65、循環時のエラーを確認した。実際のAIの予定作成能力や人員配置を検証した結果ではないよ。余裕を含める考え方は作業・準備・休憩の分数、時間帯が重なる集計は区間の重なりも参考になるね。

みんなのコメント 0
感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。
最初のコメントをどうぞ。