Otimização linear em Python: usando SciPy para programação linear

Nos posts anteriores mostrei como realizar a otimização em R (otimização linear com lpSolve , otimização quadrática com quadprog e otimização gradiente descendente não linear com nloptr ). Neste post mostro como modelar e resolver o problema de otimização linear abaixo – usando SciPy em Python:

No pacote SciPy em Python eu posso usar a função linprog para modelar e resolver este problema simples de otimização linear. Para isso, vou enunciá-lo na forma de notação de matriz vetorial – e transformá-lo em um problema de minimização:

Em Python eu posso resolver este problema da seguinte forma:

# configura a lista de custos com os valores dos coeficientes da função de custo
c = [-2,-3]

# configura a matriz de coeficiente de restrição A
A_ub = [[1,1],
        [2,1]]

# lista de restrições para limites superiores (restrições menores ou iguais)
b_ub =[10,15]

# além disso, preciso preparar uma tupla de limites para cada variável de otimização e resumi-las em uma lista
x1_bounds = (0,None)
x2_bounds = (0,None)

# agora eu uso o SciPy.optimize.linprog para modelar e resolver o problema em questão
from scipy.optimize import linprog
model_linear = linprog(c=c,
                      A_ub=A_ub,
                      b_ub = b_ub,
                      bounds = [x1_bounds,x2_bounds])

# solução de modelo de saída
print(str(model_linear))
     fun: -30.0
 message: 'Optimization terminated successfully.'
     nit: 1
   slack: array([ 0.,  5.])
  status: 0
 success: True
       x: array([  0.,  10.])

Esteja ciente, pois para usar linprog transformamos o problema na forma de um problema de minimização, o valor ótimo da função objetivo não é -30,0, mas 30,0.

Leave a Reply

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Close

Meta