在Mathematica中寻找高维函数的局部与全局极大值
高维黑箱函数的极值求解方案
针对你遇到的90维参数、基于矩阵迹求和的黑箱函数优化问题,以下是实用的解决思路:
1. 切换黑箱友好的优化算法
Mathematica的NMaximize依赖符号表达式处理,不适合你的场景。改用FindMaximum的无导数黑箱算法,直接传入数值计算函数即可:
(* 假设f[params]是你的数值计算函数,params为90个[0,2π)参数 *) FindMaximum[{f[params], Thread[0 <= params < 2 Pi]}, Table[params[[i]], {i, 1, 90}], Method -> "NelderMead" ]
如果需要全局搜索能力,优先选DifferentialEvolution或SimulatedAnnealing,这两种算法对高维非凸黑箱函数更高效:
FindMaximum[{f[params], Thread[0 <= params < 2 Pi]}, Table[params[[i]], {i, 1, 90}], Method -> {"DifferentialEvolution", "PopulationSize" -> 200} ]
2. 降维优化减少搜索空间
90维直接搜索效率极低,试试分层优化策略:
- 先按参数的物理意义(或随机)分组,固定部分参数优化剩余部分,迭代几轮后逐步放开所有参数;
- 先做敏感性分析,筛选出对函数值影响最大的参数,优先优化这些参数,缩小有效搜索维度。
3. 利用函数结构加速计算
基于矩阵迹的函数可以通过结构优化降低计算耗时:
- 缓存重复计算的矩阵子块,避免每次迭代重新生成完整64×64矩阵;
- 利用迹的线性性质拆分求和项,并行计算多个子项,减少单步计算时间。
4. 上界验证的简化方法
要验证推测的上界3,无需找到精确全局极值:
- 随机生成大量参数点(如10^5个),计算函数值,观察是否能接近3;
- 从多个随机初始点出发用梯度上升法,看收敛后的函数值是否能突破3;
- 若多次尝试均无法接近3,可推测该上界是紧的(或接近紧)。
5. 并行计算提升效率
开启Mathematica并行计算,加速函数评估和优化过程:
LaunchKernels[] fParallel[params_List] := ParallelEvaluate[f[params]] FindMaximum[{fParallel[params], Thread[0 <= params < 2 Pi]}, Table[params[[i]], {i, 1, 90}], Method -> "DifferentialEvolution", Parallelization -> True ]
内容的提问来源于stack exchange,提问作者Markus M
相关产品推荐
相关产品推荐

