ortools求解非线性问题

简介: ortools求解非线性问题

最近抽空研究了谷歌运筹优化库ortools底层封装的函数,发现其自带的许多函数能解决很多复杂的非线性规划问题。

例如:以下是一个目标函数为非线性表达式(包含x与y的乘积)的例子。

直接使用线性规划模型建模,一般是无法求解的。在ortools中一堆非线性函数,可以在建模过程中应用,利用好这些非线性函数可以处理绝大部分问题。

在本例中使用AddMultiplicationEquality函数,可以生成一个新的积变量,再根据这个变量编写约束或者目标函数可以对模型求解。

完整代码

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包含很多非线性处理的函数。

  • AddAbsEquality():取绝对值
  • AddModuloEquality():取余运算
  • AddDivisionEquality():取整运算
  • AddMinEquality():取最小值运算
  • AddMaxEquality():取大值运算
  • AddMultiplicationEquality():乘积运算。
  • ortools还有很多非线性处理的函数,并未一一列举。感兴趣的读者可以研读底层函数包,进一步深挖底层函数。

总结

ortools是开源免费求解器中比较好的产品之一,如果没法使用商业的gurobi、cplex等求解器,使用ortools在处理中小型问题建模求解是不错的选择。

目录
相关文章
|
人工智能 算法 决策智能
OR-tools求解器使用介绍(一)
OR-tools求解器使用介绍(一)
2064 0
|
算法
OR-tools求解器使用介绍(二)
OR-tools求解器使用介绍(二)
1923 0
|
Web App开发 iOS开发
无法安装此app,因为无法验证其完整性 ,解决方案
无法安装此app,因为无法验证其完整性 ,解决方案
|
机器学习/深度学习 自然语言处理 数据处理
大模型开发:描述长短期记忆网络(LSTM)和它们在序列数据上的应用。
LSTM,一种RNN变体,设计用于解决RNN处理长期依赖的难题。其核心在于门控机制(输入、遗忘、输出门)和长期记忆单元(细胞状态),能有效捕捉序列数据的长期依赖,广泛应用于语言模型、机器翻译等领域。然而,LSTM也存在计算复杂度高、解释性差和数据依赖性强等问题,需要通过优化和增强策略来改进。
1049 1
|
存储
模块加载失败请确保该二进制存储在指定路径中
模块加载失败请确保该二进制存储在指定路径中
2955 0
|
自然语言处理 并行计算 算法
cp-sat求解器介绍及使用案例
cp-sat求解器介绍及使用案例 更多文章欢迎关注我的微信公众号:Python学习杂记
5004 1
|
决策智能
Or-tools调用求解器介绍(三)
Or-tools调用求解器介绍(三)
1193 0
|
12月前
|
编解码 算法 5G
MIMO雷达空间谱估计中Capon算法与MUSIC算法的对比分析及实现
MIMO雷达空间谱估计中Capon算法与MUSIC算法的对比分析及实现
1023 2
|
11月前
|
固态存储 Windows
固态硬盘如何正确分区?SSD实用分区方案
固态硬盘(SSD)已成为提升电脑速度的关键。本文详解SSD正确分区方法,避免性能下降与寿命缩短,教你如何合理分区分区、设置4K对齐,并提供Windows磁盘管理与DiskGenius两种实用分区方案,助你高效使用SSD。
|
数据可视化 数据挖掘 UED
Plotly交互式数据可视化
【10月更文挑战第12天】本文介绍了如何使用 Plotly 实现交互式数据可视化,涵盖从安装 Plotly 到数据准备、图表创建、添加交互功能、导出图表及自定义图表样式的全过程。通过具体示例,展示了如何创建和优化交互式折线图,提升数据分析的效率和趣味性。
742 60