在上一篇有关Google使用Python的ortools模块中的文章中,我解决了以下线性优化问题:
我以前的文章中编写的代码可以减少到更少的代码行,从而实现精益代码。在本文中,我将分享我以前的ortools-script的精简版本。
再次,我从ortools.linear_solver导入pywraplp:
from ortools.linear_solver import pywraplp
接下来,我创建一个求解器实例(使用GLOP求解器),并将其引用存储到引用处理程序中:
solver = pywraplp.Solver.CreateSolver('linear_programming_examples', 'GLOP')
我现在必须声明相关的优化变量。在此示例中,优化变量为x,y和z:
#声明变量x,下限为0,无上限 x = Solver.NumVar(0,Solver.Infinity(),“ x”) #声明变量y,下限为0,无上限 y = Solver.NumVar(0,Solver.infinity(),“ y”) #声明变量z,下限为0,无上限 z = Solver.NumVar(0,Solver.infinity(),“ z”)
现在,我可以通过指定目标函数和所有相关约束来对问题建模。在下面的代码行中,这是以非常精简的方式实现的:
#声明为最大定义目标函数 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> >
该模型现已完成,可以解决:
solver.Solve()
x的最佳解决方案输出如下:
print("x_opt: ", x.solution_value())
x_opt: 6.666666666666667
y的最优解输出如下:
print("y_opt: ", y.solution_value())
y_opt: 0.0
y的最优解输出如下:
print("z_opt: ", z.solution_value())
z_opt: 6.666666666666667
最佳目标函数值输出如下:
print("optimal value: " + str(x.solution_value()+2*y.solution_value()+3*z.solution_value()))
optimal value: 26.666666666666668
专业领域为优化和仿真的工业工程师(R,Python,SQL,VBA)
Leave a Reply