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

从代码学习数值优化算法 - 分片McCormick放松方法Python版

文章目录

  • 前言
  • 二、为什么要用 McCormick 放松?
  • 三、分片 McCormick 放松的改进
    • 3.1 一个直观的例子
    • 3.2 形象理解
  • 四、用代码实现分片 McCormick 放松
    • 代码中的关键点解析
  • 总结


前言

在数值优化领域,非凸问题的求解常常令人望而却步,尤其是当我们遇到双线性项(如 z = x ⋅ y z = x \cdot y z=xy)时,问题的非凸性使得传统方法难以直接应对。McCormick 放松方法通过引入线性约束,将复杂的非凸问题转化为可求解的凸问题,为我们打开了一扇门。而分片 McCormick 放松(Piecewise McCormick Relaxation, PMR)作为其改进版本,通过将变量的定义域划分为多个子区间,进一步提升了近似精度。

本文将结合理论与 Python 代码,带你深入理解分片 McCormick 放松方法的核心思想,并通过一个具体的优化问题( minimize  z = x ⋅ y − x + y \text{minimize } z = x \cdot y - x + y minimize z=xyx+y)展示其实现过程。无论你是优化算法的新手,还是希望通过代码加深理解的开发者,这篇博客都将为你提供一个清晰的学习路径。


二、为什么要用 McCormick 放松?

在数学优化中,我们经常需要处理 非凸 的双线性项,例如:

z = x ⋅ y z = x \cdot y z=xy

这里的 z = x ⋅ y z = x \cdot y z=xy 是非凸的,这意味着直接求解优化问题可能会变得异常困难,甚至陷入局部最优。McCormick 放松的核心思想是用 线性不等式来近似这个非凸关系,从而将问题转化为 线性规划(LP)混合整数线性规划(MILP),这些线性问题相比非线性问题更容易求解。

McCormick 放松通过以下四个不等式,将 z = x ⋅ y z = x \cdot y z=xy 约束在一个凸区域内:

z ≥ x L y + x y L − x L y L z \geq x_L y + x y_L - x_L y_L zxLy+xyLxLyL
z ≥ x U y + x y U − x U y U z \geq x_U y + x y_U - x_U y_U zxUy+xyUxUyU
z ≤ x U y + x y L

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

相关文章:

  • 如何使用postman调用多参数接口(包含文件上传)
  • C++ 中std::vector<T>清除方式
  • win32汇编环境,网络编程入门之十六
  • Reidis介绍
  • 收集的一些问题?
  • SolidJS 深度解析:高性能响应式前端框架
  • 基于SpringBoot的求职招聘网站系统(源码+数据库)
  • 【Spring Boot 与 Spring Cloud 深度 Mape 之十】体系整合、部署运维与进阶展望
  • 排序算法1--插入排序
  • 策略模式_行为型_GOF23
  • 深入理解前端防抖(Debounce)与节流(Throttle):原理、区别与实战示例
  • AWE 2025:当AI科技遇见智能家居
  • 请描述下你对vue生命周期的理解?在created和mounted这两个生命周期中请求数据有什么区别呢?
  • Java面向对象一篇通:从类与对象到Lambda(万字详解)
  • github免费编程类工具汇总与评估(二)
  • 2025年最新自动化/控制保研夏令营预推免面试真题分享(东南/浙大/华科清华)
  • mysql.8.4.4--初始化报错--libnuma.so.1缺失
  • Windows学习笔记(5)
  • Numpy进行数组函数操作
  • 鸿蒙项目源码-记账本app个人财物管理-原创!原创!原创!
  • 自动化发布工具CI/CD实践Jenkins介绍!
  • 动态规划--线性规划
  • Spring解决循环依赖
  • 【无人机路径规划】Matlab基于A星算法的无人机三维路径规划
  • maven高级
  • 微信小程序逆向开发
  • Java -jar运行jar包时可添加参数
  • ‌JVM 内存模型(JDK8+)
  • ModuleNotFoundError: No module named ‘demjson‘
  • JavaScript中的观察者模式