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.
Cientista de dados com foco em simulação, otimização e modelagem em R, SQL, VBA e Python
Leave a Reply