fork download
  1.  
Success #stdin #stdout 0.03s 9548KB
stdin
# Datos del problema
N = 10  # número de objetos
M = 3   # número de mochilas
P = [68, 33, 45, 35, 26, 47, 41, 59, 53, 24]  # pesos de los objetos
V = [40, 34, 47, 45, 22, 26, 44, 22, 40, 20]  # valores de los objetos
K = [128, 118, 121]  # capacidades de las mochilas
 
# Crear el problema de maximización
problem = LpProblem("Multi-Knapsack-Problem", LpMaximize)
 
# Variables de decisión: x[i][j] indica si el objeto i está en la mochila j
x = [[LpVariable(f"x_{i}_{j}", cat="Binary") for j in range(M)] for i in range(N)]
 
# Función objetivo: maximizar el valor total
problem += lpSum(V[i] * x[i][j] for i in range(N) for j in range(M))
 
# Restricciones de capacidad para cada mochila
for j in range(M):
    problem += lpSum(P[i] * x[i][j] for i in range(N)) <= K[j], f"Capacidad_mochila_{j}"
 
# Restricción de unicidad: cada objeto debe estar en una única mochila
for i in range(N):
    problem += lpSum(x[i][j] for j in range(M)) <= 1, f"Unicidad_objeto_{i}"
 
# Resolver el problema
problem.solve()
 
# Imprimir el valor óptimo de la función objetivo
valor_optimo = problem.objective.value()
print(f"Valor óptimo de la función objetivo: {valor_optimo} €")
 
# Imprimir la asignación óptima de los objetos
for i in range(N):
    for j in range(M):
        if x[i][j].value() == 1:
            print(f"Objeto {i+1} asignado a la mochila {j+1}")
stdout
Standard output is empty