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

如何获取差分进化算法的多个可行解?Scipy实现相关疑问

Scipy差分进化算法获取多个解的方法

首先明确:差分进化算法本身的设计目标是寻找全局最优解,但它并非天生只能输出一个解;Scipy的默认实现仅返回单个最优结果,但我们可以通过两种方式获取多个潜在解。

方法1:多次独立运行算法

差分进化的初始种群是随机生成的,多次独立运行可能收敛到不同的局部最优(如果目标函数存在多个极值点)。我们可以收集这些结果,通过阈值判断去重,得到多个不同的解。

示例代码:

import numpy as np
from scipy.optimize import rosen, differential_evolution

bounds = [(0, 2)] * 5
num_runs = 10
solutions = []
tolerance = 1e-5  # 用于判定两个解是否足够相似

for _ in range(num_runs):
    result = differential_evolution(rosen, bounds)
    # 检查当前解是否已在列表中
    is_unique = True
    for sol_x, sol_fun in solutions:
        if np.linalg.norm(result.x - sol_x) < tolerance and abs(result.fun - sol_fun) < tolerance:
            is_unique = False
            break
    if is_unique:
        solutions.append((result.x, result.fun))

# 输出所有独立解
for idx, (x, fun_val) in enumerate(solutions, 1):
    print(f"解 {idx}: x = {x.round(4)}, 函数值 = {fun_val:.4f}")

方法2:通过回调函数追踪种群进化过程

利用differential_evolution的callback参数,在每一代迭代时追踪种群中的个体,筛选出函数值符合要求的不同解,从而收集多个潜在极值点。

示例代码:

import numpy as np
from scipy.optimize import rosen, differential_evolution

bounds = [(0, 2)] * 5
tracked_solutions = []
tolerance = 1e-5

def track_pop(current_pop, current_cost):
    # 遍历当前种群的每个个体与对应函数值
    for x, cost in zip(current_pop, current_cost):
        # 检查是否已存在相似解
        is_new = True
        for sol_x, sol_cost in tracked_solutions:
            if np.linalg.norm(x - sol_x) < tolerance and abs(cost - sol_cost) < tolerance:
                is_new = False
                break
        if is_new:
            tracked_solutions.append((x, cost))
    # 返回False让算法继续执行
    return False

# 运行算法并追踪种群
differential_evolution(rosen, bounds, callback=track_pop)

# 输出追踪到的解
print("追踪到的潜在解:")
for idx, (x, fun_val) in enumerate(tracked_solutions, 1):
    print(f"解 {idx}: x = {x.round(4)}, 函数值 = {fun_val:.4f}")

关于Scipy实现与算法本身的说明

  • 这不是差分进化算法的固有局限:算法核心是种群迭代优化,完全可以扩展为收集多个解,只是标准的算法实现通常聚焦于输出最优结果。
  • Scipy的设计定位:scipy.optimize.differential_evolution的目标是提供简洁高效的全局优化工具,默认只返回最接近全局最优的结果,但预留了callback等接口,允许用户自定义扩展以收集多解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 09:35:12