Untitled
unknown
python
2 years ago
1.8 kB
11
Indexable
import pulp
# Define parameters
N = 4 # Number of instruments
P = 10 # Number of plates
M = 8 # Number of tasks
transport_time = 5 # Time for robot transport between instruments
# Define task durations for each instrument
task_durations = [
[10, 15, 20, 25], # Instrument 1
[12, 18, 22, 27], # Instrument 2
[14, 20, 25, 30], # Instrument 3
[16, 22, 27, 32] # Instrument 4
]
# Create ILP problem
prob = pulp.LpProblem("Plate_Scheduling", pulp.LpMinimize)
# Define decision variables
# Binary variable indicating whether plate p is processed on instrument n at time t
x = pulp.LpVariable.dicts("x", ((p, n, t) for p in range(1, P + 1) for n in range(N + 1) for t in range(1, M + 1)), cat='Binary')
# Define objective function: minimize total completion time
prob += pulp.lpSum(t * x[p, n, t] for p in range(1, P + 1) for n in range(1, N + 1) for t in range(1, M + 1))
# Constraints
# Each plate must be processed only once
for p in range(1, P + 1):
prob += pulp.lpSum(x[p, n, t] for n in range(1, N + 1) for t in range(1, M + 1)) == 1
# Task precedence constraint
for p in range(1, P + 1):
for t in range(1, M):
prob += pulp.lpSum(x[p, n, t] for n in range(1, N + 1)) <= pulp.lpSum(x[p, n, t + 1] for n in range(1, N + 1))
# Instrument availability constraint
for t in range(1, M + 1):
for n in range(1, N + 1):
prob += pulp.lpSum(x[p, n, t] for p in range(1, P + 1)) <= 1
# Solve the problem
prob.solve()
# Output results
print("Optimal Schedule:")
for p in range(1, P + 1):
for t in range(1, M + 1):
for n in range(1, N + 1):
if pulp.value(x[p, n, t]) == 1:
print(f"Plate {p} on Instrument {n} at time {t}")
# Print total completion time
print("Total Completion Time:", pulp.value(prob.objective))Editor is loading...
Leave a Comment