非线性规划中的Rosenbrock函数优化问题
字数 1428 2025-11-26 08:52:47

非线性规划中的Rosenbrock函数优化问题

我将为您讲解一个经典的非线性规划测试问题——Rosenbrock函数优化。这个函数因其"香蕉形"等高线而闻名,是测试优化算法性能的经典基准问题。

问题描述

考虑无约束优化问题:
最小化 f(x₁, x₂) = 100(x₂ - x₁²)² + (1 - x₁)²

这个函数在点(1,1)处取得全局最小值0。函数的特性是在一个狭窄弯曲的山谷中有一个平缓的斜坡,使得许多优化算法收敛缓慢。

解题过程

第一步:理解问题特性

Rosenbrock函数具有以下重要特性:

  • 全局最小值:f(1,1) = 0
  • 梯度:∇f(x₁,x₂) = [-400x₁(x₂ - x₁²) - 2(1 - x₁), 200(x₂ - x₁²)]ᵀ
  • Hessian矩阵:H = [[1200x₁² - 400x₂ + 2, -400x₁], [-400x₁, 200]]

函数的"香蕉形"等高线使得传统的梯度下降法容易在山谷两侧振荡,收敛缓慢。

第二步:选择优化算法

对于这个问题,我们使用拟牛顿法(BFGS算法),因为它能有效处理这种病态问题:

  • 不需要计算二阶导数(Hessian矩阵)
  • 通过近似Hessian逆矩阵来加速收敛
  • 具有超线性收敛速度

第三步:算法初始化

  1. 初始点选择:x⁰ = [-1.2, 1]ᵀ(经典测试点)
  2. 初始Hessian近似:B⁰ = I(单位矩阵)
  3. 收敛阈值:ε = 10⁻⁶
  4. 最大迭代次数:1000

第四步:BFGS算法迭代过程

对于第k次迭代:

  1. 计算搜索方向
    pᵏ = -Bᵏ∇f(xᵏ)

  2. 线搜索确定步长
    使用Wolfe条件进行线搜索:

    • 充分下降条件:f(xᵏ + αpᵏ) ≤ f(xᵏ) + c₁α∇f(xᵏ)ᵀpᵏ
    • 曲率条件:∇f(xᵏ + αpᵏ)ᵀpᵏ ≥ c₂∇f(xᵏ)ᵀpᵏ
      其中0 < c₁ < c₂ < 1
  3. 更新迭代点
    xᵏ⁺¹ = xᵏ + αᵏpᵏ

  4. 计算差向量
    sᵏ = xᵏ⁺¹ - xᵏ
    yᵏ = ∇f(xᵏ⁺¹) - ∇f(xᵏ)

  5. 更新Hessian近似
    Bᵏ⁺¹ = Bᵏ - (Bᵏsᵏ)(Bᵏsᵏ)ᵀ/(sᵏᵀBᵏsᵏ) + (yᵏyᵏᵀ)/(yᵏᵀsᵏ)

第五步:收敛性检查

在每次迭代后检查:

  1. 梯度范数:‖∇f(xᵏ)‖ < ε
  2. 函数值变化:|f(xᵏ⁺¹) - f(xᵏ)| < ε(1 + |f(xᵏ)|)
  3. 变量变化:‖xᵏ⁺¹ - xᵏ‖ < ε(1 + ‖xᵏ‖)

第六步:具体数值示例

从x⁰ = [-1.2, 1]ᵀ开始:

  • 初始函数值:f(x⁰) = 24.2
  • 初始梯度:∇f(x⁰) = [-215.6, -88]ᵀ

第一次迭代:

  1. 搜索方向:p⁰ = -B⁰∇f(x⁰) = [215.6, 88]ᵀ
  2. 线搜索得α⁰ ≈ 0.001
  3. 新点:x¹ ≈ [-0.984, 1.088]ᵀ
  4. 更新B¹矩阵

经过约30-40次迭代后,算法收敛到x* ≈ [1, 1]ᵀ,f(x*) ≈ 10⁻¹²

算法优势分析

BFGS算法对Rosenbrock函数的优势:

  • 自适应调整搜索方向,避免在山谷两侧振荡
  • 不需要计算昂贵的Hessian矩阵
  • 具有超线性收敛速度
  • 对初始Hessian近似不敏感

这个例子展示了如何用拟牛顿法有效解决具有挑战性的非线性优化问题,特别适合处理像Rosenbrock函数这样的病态问题。

非线性规划中的Rosenbrock函数优化问题 我将为您讲解一个经典的非线性规划测试问题——Rosenbrock函数优化。这个函数因其"香蕉形"等高线而闻名,是测试优化算法性能的经典基准问题。 问题描述 考虑无约束优化问题: 最小化 f(x₁, x₂) = 100(x₂ - x₁²)² + (1 - x₁)² 这个函数在点(1,1)处取得全局最小值0。函数的特性是在一个狭窄弯曲的山谷中有一个平缓的斜坡,使得许多优化算法收敛缓慢。 解题过程 第一步:理解问题特性 Rosenbrock函数具有以下重要特性: 全局最小值:f(1,1) = 0 梯度:∇f(x₁,x₂) = [ -400x₁(x₂ - x₁²) - 2(1 - x₁), 200(x₂ - x₁²) ]ᵀ Hessian矩阵:H = [ [ 1200x₁² - 400x₂ + 2, -400x₁], [ -400x₁, 200] ] 函数的"香蕉形"等高线使得传统的梯度下降法容易在山谷两侧振荡,收敛缓慢。 第二步:选择优化算法 对于这个问题,我们使用拟牛顿法(BFGS算法),因为它能有效处理这种病态问题: 不需要计算二阶导数(Hessian矩阵) 通过近似Hessian逆矩阵来加速收敛 具有超线性收敛速度 第三步:算法初始化 初始点选择:x⁰ = [ -1.2, 1 ]ᵀ(经典测试点) 初始Hessian近似:B⁰ = I(单位矩阵) 收敛阈值:ε = 10⁻⁶ 最大迭代次数:1000 第四步:BFGS算法迭代过程 对于第k次迭代: 计算搜索方向 pᵏ = -Bᵏ∇f(xᵏ) 线搜索确定步长 使用Wolfe条件进行线搜索: 充分下降条件:f(xᵏ + αpᵏ) ≤ f(xᵏ) + c₁α∇f(xᵏ)ᵀpᵏ 曲率条件:∇f(xᵏ + αpᵏ)ᵀpᵏ ≥ c₂∇f(xᵏ)ᵀpᵏ 其中0 < c₁ < c₂ < 1 更新迭代点 xᵏ⁺¹ = xᵏ + αᵏpᵏ 计算差向量 sᵏ = xᵏ⁺¹ - xᵏ yᵏ = ∇f(xᵏ⁺¹) - ∇f(xᵏ) 更新Hessian近似 Bᵏ⁺¹ = Bᵏ - (Bᵏsᵏ)(Bᵏsᵏ)ᵀ/(sᵏᵀBᵏsᵏ) + (yᵏyᵏᵀ)/(yᵏᵀsᵏ) 第五步:收敛性检查 在每次迭代后检查: 梯度范数:‖∇f(xᵏ)‖ < ε 函数值变化:|f(xᵏ⁺¹) - f(xᵏ)| < ε(1 + |f(xᵏ)|) 变量变化:‖xᵏ⁺¹ - xᵏ‖ < ε(1 + ‖xᵏ‖) 第六步:具体数值示例 从x⁰ = [ -1.2, 1 ]ᵀ开始: 初始函数值:f(x⁰) = 24.2 初始梯度:∇f(x⁰) = [ -215.6, -88 ]ᵀ 第一次迭代: 搜索方向:p⁰ = -B⁰∇f(x⁰) = [ 215.6, 88 ]ᵀ 线搜索得α⁰ ≈ 0.001 新点:x¹ ≈ [ -0.984, 1.088 ]ᵀ 更新B¹矩阵 经过约30-40次迭代后,算法收敛到x* ≈ [ 1, 1]ᵀ,f(x* ) ≈ 10⁻¹² 算法优势分析 BFGS算法对Rosenbrock函数的优势: 自适应调整搜索方向,避免在山谷两侧振荡 不需要计算昂贵的Hessian矩阵 具有超线性收敛速度 对初始Hessian近似不敏感 这个例子展示了如何用拟牛顿法有效解决具有挑战性的非线性优化问题,特别适合处理像Rosenbrock函数这样的病态问题。