当前位置: 首页 > news >正文

运筹优化(OR)-在机器学习(ML)浪潮中何去何从?

在如今机器学习的浪潮中,机器学习相关的岗位日益增多,而运筹优化的岗位却相对较少。这是今年我秋招过程中看到的现象。企业越来越希望候选人不仅能建模求解,还能理解如何用数据驱动优化。需要我们有一个完整的技术栈。那么我们就来看看OR与ML的关系,探索一下两者结合的方向,以便认清后续发展道路。

首先,ML和OR并非替代关系,而是互补协同的两种决策科学工具。

ML擅长预测:从历史数据中学习模式;OR擅长决策:在资源约束下寻找最优解或可行解。

1.ML for OR

1.1 ML不直接做决策,而是提升OR模型的输入质量。

这里有一个很重要的概念Predict-then-Optimize,指的是先用ML模型预测不确定性参数,再讲预测值带入优化模型求解。

这其中会有一些潜在的风险,首先就是目标错配,这是指ML模型通常以MAE/MSE为目标训练,但这些误差对决策的影响可能不对称。比如:高估了需求导致库存积压、低估了需求导致缺货,这两者代价在实际应用总是不同的,但是如果我们使用MAE/MSE为目标进行训练,将会把两者一视同仁。也就是说,我们想直接将决策风险(也就是上面说的高估了多少还是低估了多少)作为损失函数。但是,通过Predict-then-Optimize的流程:

输入数据 → ML 模型 → 预测值 → 优化模型 → 决策 → 实际成本

会发现这当中的优化模型,也就是我们通常可能调用求解器求解的数学模型(这就是OR的部分),是一个“黑箱算子”,通常不可导,那么对于我们的ML来说就没法进行它的核心算法——反向传播

为了解决这个问题,有学者提出了SPO(Smart Predict-then-Optimize),这是一个框架,他的核心思想就是训练的损失应该与最终决策的代价挂钩。将决策风险定义为:使用预测值求解后的成本与使用真实值求解的成本之差。训练目标是最小化这个决策风险。可以通过次梯度平滑近似等方式来近似梯度。

此外还可以使用可导的近似模型、不依赖中间梯度的强化学习等方式来解决这个问题。

上面说的不可导性与黑箱性也是潜在风险之一。

还有就是误差放大的潜在风险。对于解空间敏感的OR问题,小的预测误差可能导致完全不同的最优解。需要引入敏感性分析,评估预测误差对解的影响。

1.2 OR求解器集成ML技术,加速求解过程。

学习策略分支:使用ML模型预测哪个变量分支最有希望,替代部分强分支调用;

节点选择策略:学习哪种策略(深度优先、最佳有限、最佳估计)更适合当前问题结构;

启发式参数自动调优;割平面选择等等。

2.OR for ML

用运筹优化(OR)来提升机器学习(ML)性能。

最优实验设计:建模为子集选择问题;

神经网络剪枝与结构搜索:保留哪些连接可以建模为0-1变量,使用OR压缩模型;

强化学习中嵌入求解器;可解释机器学习中的规则生成等等。

3.End-to-End Learning for Optimization

跳过显式建模,直接用神经网络学习从输入到最优解的映射。在这个过程中,输出可能违反问题的约束,因此需要结合OR使用。我认为当前最好的做法是:用端到端ML模型生成候选解,再用 OR 模型校正或排序。

4.未来方向

我们做运筹优化的最担心的就是未来ML取代传统的OR。但是从目前来看是不会的,两者将会进行深度融合,会有ML for OR,也会有OR for ML。首先,OR的优势是不可替代的,给出能够满足硬约束的最优解、解释性强等等。其次,ML是由局限性的,无法保证约束满足、解释性差(黑箱性)、泛化能力依赖于数据分布等等。

结合我做的来说一下吧,在一些控制策略(红绿灯)中我会用OR的数学规划和元启发式算法得到这个问题的baseline,然后在环境突然发生改变(救护车来到)时,使用RL实现动态调整。在智能驾驶的场景中,自动驾驶需要感知和规划的协同,对环境的感知需要ML,对路径和时间的精确规划需要OR。

http://www.dtcms.com/a/352416.html

相关文章:

  • 独孤思维:无限分发,无成本赚钱的副业
  • JVM分层编译深度解析:完整机制与实践指南
  • 面向世界模型构建的跨模态认知网络工程
  • the scientist and engineer‘s guide to DSP:1 The Breadth and Depth of DSP 引言
  • CSS实现内凹圆角边框技巧(高频)
  • 【C++】用哈希表封装unordered_XX
  • 西游记24-26:万寿山,五庄观,镇元子;猴子偷果,猪八戒吃人参果——食而不知其味;逃跑被抓回,替师傅受罚;到处求仙,最终观音菩萨救树
  • Qt数据结构与编码技巧全解析
  • LeetCode 2140. 解决智力问题
  • 力扣(滑动窗口最大值)
  • LeetCode 刷题【53. 最大子数组和】
  • 一篇文章拆解Java主流垃圾回收器及其调优方法。
  • 详解 torch.distributed.all_gather_into_tensor
  • 15.examples\01-Micropython-Basics\demo_yield_task.py 加强版
  • 【实时Linux实战系列】基于实时Linux的生物识别系统
  • #Linux内存管理学以致用# 请你根据linux 内核struct page 结构体的双字对齐的设计思想,设计一个类似的结构体
  • 【测试需求分析】-需求来源分析(一)
  • 博士招生 | 香港大学 Intelligent Communication Lab 招收全奖博士
  • 【deepseek问答记录】:chatGPT的参数数量和上下文长度有关系吗?
  • AI Agent正在给传统数据仓库下“死亡通知书“
  • 读《精益数据分析》:用户行为热力图
  • 【拍摄学习记录】01-景别
  • 创龙3576ububuntu系统设置静态IP方法
  • 【Linux 进程】进程程序替换详解
  • 8.26网络编程——Modbus TCP
  • Git 高级技巧:利用 Cherry Pick 实现远程仓库的同步合并
  • 【自然语言处理与大模型】微调数据集如何构建
  • docker 的网络
  • shell默认命令替代、fzf
  • RCC_APB2PeriphClockCmd