Em um post anterior no módulo ortools do Google em Python resolvi o problema de otimização linear indicado abaixo:
O código escrito no meu post anterior pode ser reduzido a menos linhas de código, resultando em código enxuto. Neste post vou compartilhar uma versão mais enxuta do meu script ortools anterior.
Novamente, começo importando pywraplp de ortools.linear_solver:
from ortools.linear_solver import pywraplp
Em seguida, crio uma instância de solucionador (usando o solucionador GLOP) e armazeno sua referência em um manipulador de referência:
solver = pywraplp.Solver.CreateSolver('linear_programming_examples', 'GLOP')
Agora tenho que declarar variáveis de otimização relevantes. Neste exemplo, as variáveis de otimização são x, y e z:
x = solver.NumVar(0, solver.infinity(), "x") y = solver.NumVar(0, solver.infinity(), "y") z = solver.NumVar(0, solver.infinity(), "z")
Agora posso modelar o problema especificando as funções objetivo e todas as restrições relevantes. Nas linhas de código a seguir isso é realizado de uma maneira muito enxuta:
solver.Maximize(x+2*y+3*z) solver.Add(2*x+y+z <= 20) solver.Add(x+y+z <= 15) solver.Add(x-y-z >= 0)
<ortools.linear_solver.pywraplp.Constraint; proxy of <Swig Object of type 'operations_research::MPConstraint *' at 0x000001B9AEC956C0> >
O modelo agora está completo e pode ser resolvido:
solver.Solve()
A solução ótima para x é exibida abaixo:
print("x_opt: ", x.solution_value())
x_opt: 6.666666666666667
A solução ótima para y é apresentada abaixo:
print("y_opt: ", y.solution_value())
y_opt: 0,0
A solução ótima para z é apresentada abaixo:
print("z_opt: ", z.solution_value())
z_opt: 6.666666666666667
O valor ótimo da função objetivo é gerado abaixo:
print("valor ideal: " + str(x.solution_value()+2*y.solution_value()+3*z.solution_value()))
valor ideal: 26,666666666666668
Cientista de dados com foco em simulação, otimização e modelagem em R, SQL, VBA e Python
Leave a Reply