import pulp
# Data biaya
costs = [
[45, 50, 55, 60, 65],
[52, 48, 47, 55, 58],
[50, 46, 54, 57, 56],
[47, 53, 51, 49, 59],
[55, 52, 50, 48, 46]
]
# Nama divisi dan proyek
divisions = ['D1', 'D2', 'D3', 'D4', 'D5']
projects = ['P1', 'P2', 'P3', 'P4', 'P5']
# Problem
prob = pulp.LpProblem("Assignment_Problem", pulp.LpMinimize)
# Variabel
x = pulp.LpVariable.dicts("x",
((i, j) for i in range(5) for j in range(5)),
cat='Binary')
# Fungsi objektif
prob += pulp.lpSum(costs[i][j] * x[i, j] for i in range(5) for j in range(5))
# Kendala: setiap divisi hanya satu proyek
for i in range(5):
prob += pulp.lpSum(x[i, j] for j in range(5)) == 1
# Kendala: setiap proyek hanya satu divisi
for j in range(5):
prob += pulp.lpSum(x[i, j] for i in range(5)) == 1
# Solve
prob.solve()
# Output
print("Status:", pulp.LpStatus[prob.status])
print("Total Biaya Minimum =", pulp.value(prob.objective), "juta\n")
print("Penugasan Optimal:")
for i in range(5):
for j in range(5):
if pulp.value(x[i, j]) == 1:
print(f"{divisions[i]} -> {projects[j]} (Biaya: {costs[i][j]})")