PuLP(Python)中的连续线性优化

在上一篇文章中,我演示了如何通过linprog函数使用SciPy.optimize解决Python中的线性优化问题。在本文中,我想提供一个使用PuLP模块解决以下问题的Python编码示例:

这个问题是线性的,可以在Python中使用Pulp解决。从下面的编码示例中可以看出,建模语法与SciPy.optimize完全不同。

#导入PuLP(可以通过pip install进行安装,例如在anaconda提示符下) 
import pulp

 #使用LpProblem函数初始化我们的线性优化问题的声明 
linearProblem = pulp.LpProblem("some title",pulp.LpMaximize) # we maximize, and thus use LpMaximize as parameter

 #使用PuLP模块优化变量必须通过LpVariable函数声明 
x1 = pulp.LpVariable("x1",lowBound = 0) # x1 has only lower bound, no upper bound
x2 = pulp.LpVariable("x2",lowBound = 0) # x2 has only lower bound, no upper bound

 #使用+ =运算符,我们可以将目标函数添加到声明的问题中 
linearProblem += 2*x1 + 3*x2 

 #相同的方法对添加约束有效 
linearProblem += x1 + x2 <= 10
linearProblem += 2*x1 + x2 <= 15

 #我们现在可以检查我们的问题 
linearProblem
some_title:
MAXIMIZE
2*x1 + 3*x2 + 0
SUBJECT TO
_C1: x1 + x2 <= 10

_C2: 2 x1 + x2 <= 15

VARIABLES
x1 连续 
x2 连续 

如我们所见,目标函数是2×1 + 3×2,如标量语法的初始数学问题陈述中所述。约束用_C1和_C2标记。它们也与本文开头的数学问题陈述相一致。此外,x1和x2是连续的而不是离散的优化变量是正确的。

现在,我们可以在Python中使用PuLP解决问题:

#解决问题,使用标准的PuLP解算器解决连续线性优化问题 
solution = linearProblem.solve()

#使用PuLP模块中的LpStatus查看优化运行是否成功 
pulp.LpStatus[solution]
'最佳'

解决方案是最佳的。让我们看看最佳目标函数值

#通过以下方法用值函数访问最佳目标函数值 
pulp.value(linearProblem.objective)
30.0
#还可以通过value函数访问x1的最佳解决方案(但我们已经有x1作为处理程序)
pulp.value(x1)
0.0
#最后,下面我展示了x2的最佳解决方案
pulp.value(x2)
10.0

在我的博客上,您还可以找到使用lpSolve和FuzzyLP(例如带有crispLP或FCLP.sampledBeta)在R中演示线性编程的文章。此外,我提供了使用R中的quadprog和Python中的cvxopt进行二次优化的示例。最后,我使用nloptr软件包解决了R中具有梯度下降的非线性优化问题。

You May Also Like

Leave a Reply

Leave a Reply

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

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