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

使用Optim.jl求解区间函数最小值得到错误结果如何解决

问题原因分析

你使用的GoldenSection以及Optim.jl默认的单变量优化算法都属于局部优化算法,核心假设是搜索区间内的目标函数为单峰函数,仅能保证收敛到搜索路径上遇到的第一个局部极小值。你给出的目标函数在[1.75, 3.5]区间内存在多个局部极小点,因此算法会收敛到错误的局部最优解,而非全局最小值。

解决方案

方案1:粗扫描定位后局部优化(Optim.jl原生实现)

先通过粗粒度的区间扫描定位全局极小值所在的子区间,再在子区间(该区间内函数为单峰)运行局部优化算法即可得到正确结果,示例代码如下:

using Optim

f(x)= -abs(1-x/3.5+(2*sin(2*pi*(x-1.75))-sin(2*pi*x))/(7*pi))

# 第一步:粗扫描区间,定位全局极小的近似位置
scan_x = range(1.75, 3.5, length=1000)
scan_y = f.(scan_x)
approx_min_x = scan_x[argmin(scan_y)]
# 划定全局极小所在的单峰子区间
sub_lower = approx_min_x - 0.1
sub_upper = approx_min_x + 0.1

# 第二步:在子区间内运行黄金分割法优化
res = optimize(f, sub_lower, sub_upper, GoldenSection())

# 输出结果
println(Optim.minimizer(res)) # 输出约1.8524
println(Optim.minimum(res))   # 输出约-0.5617

方案2:使用全局优化工具包

如果需要处理大量类似多峰优化问题,可以搭配支持全局优化的Julia工具包使用,无需手动扫描区间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:51:02