文章预览
最近抽空研究了谷歌运筹优化库ortools底层封装的函数,发现其自带的许多函数能解决很多复杂的非线性规划问题。 例如:以下是一个目标函数为非线性表达式(包含x与y的乘积)的例子。 直接使用线性规划模型建模,一般是无法求解的。在ortools中一堆非线性函数,可以在建模过程中应用,利用好这些非线性函数可以处理绝大部分问题。 在本例中使用 AddMultip licationEquality函数,可 以生成一个新的 乘 积变量 ,再根据 这个变量编写约束或者目标函数 就 可以对模型求解。 完整代码 from ortools.sat.python import cp_model model = cp_model.CpModel() # x,y,z为0到100之间的整数 x = model.NewIntVar(0, 100, 'x' ) y = model.NewIntVar(0, 100, 'y' ) z= model.NewIntVar(0, 100, 'z' ) ## 约束: ### 2x+3y < 100 ### x*y-z>10 mult=model.NewIntVar(0, 10000, 'mm' ) model.AddMultiplicationEquality(mult, x, y)
………………………………