ortools系列:线性规划
1. 运筹优化建模语言
在上一篇文章中我们简单介绍了ortools,接下来我们讲使用ortools求解线性规划问题。
在将线性规划之前,插入一个题外话:什么是运筹优化的建模语言。
还记得在前一篇文章中我们是怎么定义目标函数和约束条件吗,要写很多SetCoefficient
和Constraint
函数来构建约束方程,如果没有对整个问题的清洗描述还真不知道代码在说什么。
那我们看看下面这个例子,这个例子是参考1中的CPLEX lp files
格式,相比而言这种书写方式比较符合人的思考方式,换另一个角度说,当存在 $ sumlimits_{}^{} {
{x_i}} $ 这样的操作下,用for循环肯定不是一个好主意。
Maximize
obj: x1 + 2 x2 + 3 x3 + x4
Subject To
c1: - x1 + x2 + x3 + 10 x4 <= 20
c2: x1 - 3 x2 + x3 <= 30
c3: x2 - 3.5 x4 = 0
Bounds
0 <= x1 <= 40
2 <= x4 <= 3
General