首页 > 数据库 > 数据库开发技术 > ortools求解非线性问题
最近抽空研究了谷歌运筹优化库ortools底层封装的函数,发现其自带的许多函数能解决很多复杂的非线性规划问题。
例如:以下是一个目标函数为非线性表达式(包含x与y的乘积)的例子。
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)
model.Add(2*x+3*y<100)
model.Add(mult-z>10)
#目标函数
model.Minimize(mult+2*x+6*z)
# 定义求解器
solver = cp_model.CpSolver()
# 求解问题
status = solver.Solve(model)
# 输出结果
if status == cp_model.OPTIMAL:
print('x =', solver.Value(x))
print('y =', solver.Value(y))
print('z =', solver.Value(z))
print('mult =', solver.Value(mult))
print('obj =', solver.ObjectiveValue())
else:
print('No solution found.')

ortools还有很多非线性处理的函数,并未一一列举。感兴趣的读者可以研读底层函数包,进一步深挖底层函数。
原文作者:Python学习杂记;如有侵权,请联系管理员删除。