Untitled
unknown
python
8 months ago
1.8 kB
4
Indexable
Never
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))
Leave a Comment