You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于scipy.optimize.differential_evolution中收敛值定义的技术问询

关于scipy.optimize.differential_evolution收敛值的定义疑问

我运行了以下针对Rastrigin函数的差分进化算法示例代码,发现当回调函数输出的convergence值超过1时,算法提示“Optimization terminated successfully”并终止。我原本以为优化成功时收敛值应该趋近于0,但在官方文档中未找到该convergence参数的明确定义,特此请教。

示例代码

import numpy as np
from scipy.optimize import differential_evolution

# Define a sample function to be optimized (Rastrigin function in this case)
def rastrigin(x):
    return sum([(i**2 + 10 - 10*np.cos(2*np.pi*i)) for i in x])

# Callback function to print the convergence value at each iteration
def callback(xk, convergence):
    print(f"Current parameters: {xk}, Convergence: {convergence:.6f}")

bounds = [(-5.12, 5.12), (-5.12, 5.12)]  # For a 2D Rastrigin function

result = differential_evolution(rastrigin, bounds, callback=callback)

print("\nOptimized Result:")
print(result)

运行结果

Current parameters: [-0.05500736  1.12167317], Convergence: 0.019343
Current parameters: [-0.05500736  1.12167317], Convergence: 0.021779
Current parameters: [-0.05500736  1.12167317], Convergence: 0.023104
Current parameters: [-1.0372644   0.95886127], Convergence: 0.021842
Current parameters: [-1.0372644   0.95886127], Convergence: 0.022447
Current parameters: [-1.0372644   0.95886127], Convergence: 0.020804
Current parameters: [-1.0372644   0.95886127], Convergence: 0.019910
Current parameters: [-1.0372644   0.95886127], Convergence: 0.020295
Current parameters: [-0.92414087 -0.03163365], Convergence: 0.019972
Current parameters: [-0.92414087 -0.03163365], Convergence: 0.018159
Current parameters: [-0.92414087 -0.03163365], Convergence: 0.019535
Current parameters: [-1.01618653 -0.01727175], Convergence: 0.016007
Current parameters: [-1.01618653 -0.01727175], Convergence: 0.017456
Current parameters: [-1.01618653 -0.01727175], Convergence: 0.015801
Current parameters: [-0.98535569  0.02419573], Convergence: 0.014148
Current parameters: [-0.9894422  -0.00648482], Convergence: 0.018350
Current parameters: [-0.9894422  -0.00648482], Convergence: 0.015497
Current parameters: [-0.9894422  -0.00648482], Convergence: 0.050019
Current parameters: [-0.99360956 -0.00208593], Convergence: 0.172460
Current parameters: [-9.93609564e-01 -2.49866280e-04], Convergence: 0.289696
Current parameters: [-9.93609564e-01 -2.49866280e-04], Convergence: 0.352541
Current parameters: [-9.94934163e-01 -7.51133414e-05], Convergence: 1.135028

Optimized Result:
 message: Optimization terminated successfully.
 success: True
     fun: 0.9949590570932987
       x: [-9.950e-01 -4.988e-09]
     nit: 22
    nfev: 702
     jac: [ 3.553e-07  0.000e+00]

解答

convergence参数的具体定义

scipy官方文档中对callback参数的说明包含该参数的定义:

convergence is the fractional value of the population convergence. When convergence is 1, the population has converged.

简单来说,这个值是衡量种群同质化程度的指标:

  • 当种群个体差异较大时,convergence值接近0;
  • 随着迭代进行,种群逐渐向最优解聚集,个体差异缩小,convergence值逐渐趋近于1;
  • 当convergence达到1(或因计算误差略大于1)时,说明种群已失去多样性,所有个体趋近于同一个解,算法判定为收敛并终止。

与直觉认知的差异

你认为“收敛值应趋近于0”的逻辑,通常对应梯度下降这类单点迭代算法——这类算法通过监控目标函数的变化量或参数更新幅度判断收敛。但差分进化是种群类优化算法,其收敛逻辑聚焦于种群的整体状态:当种群不再有新的探索方向时,就认为已找到当前搜索范围内的最优解(或局部最优解)。

在你的示例中,算法终止时得到的解对应Rastrigin函数的一个局部最优值(约0.995),符合算法的运行结果,而convergence值略大于1是计算过程中的微小误差导致,本质上已满足收敛条件。

内容的提问来源于stack exchange,提问作者Molares

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 04:27:32