# 問題を定義する problem = pulp.LpProblem('Construction Project', pulp.LpMinimize)
# 変数を定義する a = pulp.LpVariable('a', lowBound=0, cat='Continuous') b = pulp.LpVariable('b', lowBound=0, cat='Continuous') c = pulp.LpVariable('c', lowBound=0, cat='Continuous') d = pulp.LpVariable('d', lowBound=0, cat='Continuous') e = pulp.LpVariable('e', lowBound=0, cat='Continuous') f = pulp.LpVariable('f', lowBound=0, cat='Continuous')
# 制約式を定義する
# 各作業の所要日数 problem += a >= 2 problem += b >= 3 problem += c >= 4 problem += d >= 2 problem += e >= 3 problem += f >= 4
# 作業A, B, Cは同時に開始することができる # a + 2 <= dは、作業Dを開始する前に、作業Aが完了している必要があることを表している # b + 3 <= cは、作業Cを開始する前に、作業Bが完了している必要があることを表している problem += a + 2 <= d problem += b + 3 <= c
# 作業Cが完了した後、作業Eを開始する # c + 4 <= eは、作業Eを開始する前に、作業Cが完了している必要があることを表している problem += c + 4 <= e
# 作業DとEは同時に開始することができる # d + 2 <= fは、作業Fを開始する前に、作業Dが完了している必要があることを表している # e + 3 <= fは、作業Fを開始する前に、作業Eが完了している必要があることを表している problem += d + 2 <= f problem += e + 3 <= f
# 結果を表示する print("Task Schedule:") print(f"\tTask A starts at day {start_a:.2f}") print(f"\tTask B starts at day {start_b:.2f}") print(f"\tTask C starts at day {start_c:.2f}") print(f"\tTask D starts at day {start_d:.2f}") print(f"\tTask E starts at day {start_e:.2f}") print(f"\tTask F starts at day {start_f:.2f}")
[実行結果]
Status: Optimal
Optimal Solution:
a: 2.00
b: 3.00
c: 6.00
d: 11.00
e: 10.00
f: 13.00
Task Schedule:
Task A starts at day 2.00
Task B starts at day 3.00
Task C starts at day 6.00
Task D starts at day 11.00
Task E starts at day 10.00
Task F starts at day 13.00