从代码学习数值优化算法-McCormick包络方法python版

文章目录

  • 前言
  • 一、McCormick包络方法的理论基础
    • 1.1 定义与目的
    • 1.2 工作原理
    • 1.3 核心步骤
    • 1.4 应用与优势
  • 二、Python实现与示例
    • 2.1 示例问题
    • 2.2 代码示例
  • 三、结合分支定界法:从下界到全局最优解
    • 3.1 为什么需要分支定界?
    • 3.2 工作原理
    • 3.3 Python实现与示例
      • 示例问题
      • Python代码
    • 3.4 两种方法的比较
  • 总结


前言

欢迎阅读本博客,我们将深入探讨McCormick包络方法,这是一种在数值优化领域中用于处理非凸问题的强大技术。McCormick包络方法特别适用于混合整数非线性规划(MINLP)问题,通过将其放松为凸问题(如线性规划,LP),显著降低了求解难度。本文将从理论基础入手,逐步介绍其在Python中的实现,结合提供的代码示例,帮助读者全面理解这一方法。


一、McCormick包络方法的理论基础

1.1 定义与目的

  • 定义:McCormick包络是一种用于双线性非线性规划问题的凸放松方法,广泛用于解决MINLP问题。
  • 目的:通过放松非凸MINLP问题为凸非线性规划(NLP)或线性规划(LP),提供原始问题[最小化问题]最优解的下界。

1.2 工作原理

假设变量 x x x y y y 的范围分别为 x L ≤ x ≤ x U x^L \leq x \leq x^U xLxxU y L ≤ y ≤ y U y^L \leq y \leq y^U yLyyU,对于双线性项 z = x ⋅ y z = x \cdot y z=xy,McCormick包络通过以下线性约束近似:

  • w ≥ x L y + y L x − x L y L w \geq x^L y + y^L x - x^L y^L wxLy+yLxxLyL
  • w ≥ x U y + y U x − x U y U w \geq x^U y + y^U x - x^U y^U wxUy+yUxxUyU
  • w ≤ x U y + y L x − x U y L w \leq x^U y + y^L x - x^U y^L wxUy+yLxxUyL
  • w ≤ x L y + y U x − x L y U w \leq x^L y + y^U x - x^L y^U wxLy+yUxxLyU

这些约束形成了一个凸包,包含了 x ⋅ y x \cdot y

你可能感兴趣的:(数学优化算法-python版,算法,python)