En una publicación anterior demostré cómo resolver un problema de optimización lineal en Python, usando SciPy.optimize con la función linprog. En esta publicación, quiero proporcionar un ejemplo de codificación en Python, usando el módulo PuLP para resolver el siguiente problema:
Este problema es lineal y se puede resolver usando Pulp en Python. La sintaxis de modelado es bastante diferente de SciPy.optimize, como puede ver en el siguiente ejemplo de codificación:
# importando PuLP (se puede instalar con pip install, por ejemplo, en el indicador de anaconda) import pulp # use la función LpProblem para inicializar una declaración de nuestro problema de optimización lineal linearProblem = pulp.LpProblem ("some title", pulp.LpMaximize) # maximizamos, y por lo tanto usamos LpMaximize como parámetro # usando el módulo PuLP, las variables de optimización deben declararse con la función LpVariable x1 = pulp.LpVariable ("x1", lowBound = 0) # x1 solo tiene límite inferior, sin límite superior x2 = pulp.LpVariable ("x2", lowBound = 0) # x2 solo tiene límite inferior, sin límite superior # usando el operador + = podemos agregar la función objetivo al problema declarado linearProblem + = 2 * x1 + 3 * x2 # el mismo enfoque es válido para agregar restricciones linearProblem + = x1 + x2 <= 10 linearProblem + = 2 * x1 + x2 <= 15 # podemos revisar nuestro problema ahora linearProblem
some_title: MAXIMIZAR 2 * x1 + 3 * x2 + 0 SUJETO A _C1: x1 + x2 <= 10 _C2: 2 x1 + x2 <= 15 VARIABLES x1 continuo x2 continuo
Como podemos ver, la función objetivo es 2 X1 + 3 X2, como se documenta en el enunciado inicial del problema matemático en sintaxis escalar. Las restricciones están marcadas con _C1 y _C2. Ellos también son consistentes con el enunciado del problema matemático al comienzo de esta publicación. Además, es correcto que X1 y X2 son variables de optimización continuas y no discretas.
Ahora podemos resolver el problema, usando PuLP en Python:
# resuelva el problema, utilizando el solucionador PuLP estándar para problemas de optimización lineal continua solution = linearProblem.solve () # ver si la ejecución de la optimización fue exitosa, usando LpStatus del módulo PuLP pulp.LpStatus [solution]
'Óptimo'
La solución es óptima. Veamos el valor óptimo de la función objetivo:
# se accede al valor óptimo de la función objetivo con la función valor de la siguiente manera pulp.value(linearProblem.objective)
30,0
# También se accede a la solución óptima para x1 con la función value (pero ya tenemos x1 como manejador) pulp.value(x1)
0.0
# por último, a continuación muestro la solución óptima para x2 pulp.value(x2)
10.0
En mi blog también puede encontrar publicaciones que demuestran la programación lineal en R, usando lpSolve y FuzzyLP (por ejemplo, con crispLP o FCLP.sampledBeta). Además, he proporcionado ejemplos de optimización cuadrática con quadprog en R y cvxopt en Python. Por último, resolví problemas de optimización no lineal con descenso de gradiente en R, usando el paquete nloptr.
Ingeniero industrial especializado en optimización y simulación (R, Python, SQL, VBA)
Leave a Reply