Hola, estoy intentando resolver un problema típico de "Blending Problem"
con Pulp y no consigo poner bien las variables (concretamente el
diccionario de variables)

Este es el diccionario que quiero crear:

num_soldados = LpVariable.dicts("soldiers", soldados, lowBound=0,
cat='Integer')

pero me gustaría poner un límite superior para cada variable que tengo en
un diccionario llamado poblacion.

He intentado poner la restricción dentro de la definición del diccionario
de variables así:

num_soldados = LpVariable.dicts("soldiers", soldados, lowBound=0,
upBound=poblacion[soldados], cat='Integer')

y también he intentado ponerlo al agregar el resto de restricciones del
problema:

prob += (num_soldados[i] < poblacion[i]  for i in soldados

y en ambos me da error. ¿cómo puedo poner un límite superior a las
variables?

A continuación pongo el código completo que no me da error por si sirve de
ayuda:


from pulp import *

# Declarar variables
soldados = ['Feng', 'Liu', 'Zhao', 'Jian']
presupuesto = 10000

#Diccionario con los costes de cada tipo de soldado
coste = {'Feng':13,
          'Liu':21,
          'Zhao':17,
          'Jian':100}

#Diccionario con la fuerza de cada tipo de soldado
fuerza = {'Feng':6,
          'Liu':10,
          'Zhao':8,
          'Jian':40}

#Diccionario con la población máxima de cada tipo de soldado
poblacion = {'Feng':1000,
          'Liu':400,
          'Zhao':500,
          'Jian':150}

#Crear la variable 'prob' que contiene los datos del problema
prob = LpProblem ("A Blending Problem", LpMaximize)

#Crear un diccionario llamado "num_soldados" donde se definen las variables
num_soldados = LpVariable.dicts("soldiers", soldados, lowBound=0,
cat='Integer')

#Función objetivo
prob += lpSum(fuerza[i]*num_soldados[i] for i in soldados), "Fuerza total
del ejército"

#Agregar las restricciones al 'prob'
prob += lpSum(coste[i]*num_soldados[i] for i in soldados) <= presupuesto


#Resolver el problema
status = prob.solve()
LpStatus[status]

# imprimir resultados
for v in prob.variables():
    print(v.name, "=", v.varValue)

print("La fuerza total del ejército es: ", value(prob.objective))
_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es

Responder a