Python中简单线性优化ortools模型的精益编码

在上一篇有关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

Leave a Reply

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

Close

功能