我试图使用优化器优化我的模型的8个参数,但Scipy-shgo优化器的速度很慢。
opt = shgo( objective_function, # per-loop callee ? [ns/call]
bounds = bnds, # static
iters = 2, # 2
minimizer_kwargs = { 'method': 'SLSQP', # 0(n^3) in time
'ftol': 1e-3 # FTOL 0.001
}
)
如何并行Scipy-shgo优化器?
2条答案
按热度按时间3mpgtkmj1#
Q:“如何并行Scipy-shgo优化器?“
一代又一代的Scipy开发人员已经尽最大努力设计尽可能多的优化技巧到这个
FORTRAN
起源的库的内部,如果试图改进已经最终很好的产品,一个人必须是一个超级先进的架构师。这并不是说一个人不能做到这一点,但它警告说,一个人必须非常善于尝试做到这一点。怎么处理这个?
a)
我们总是可以检查,如果最昂贵的部分可以得到一些提升的改进,以运行得更快(这里是每循环运行
callee
-fun -传递的objective_function()
)如果技能,RAM和一些智能CPU-(寄存器+缓存行友好)-矢量化技巧允许,这可能在任何情况下都有帮助,有时很多。
调整
eps
的默认值和其他方法特定的超参数可能有助于平滑模型的情况下,如果仍然坚持使用顺序最小二乘法作为求解器的驱动方法。B)
我们可以选择一个更便宜的优化方法,实际选择的
SLSQP
-一个既昂贵,(IIRC)不能使用数据的稀疏矩阵表示(如果这些进入您的用例)。对于n
维,使用~ O(n^2)
[SPACE]域缩放和~ O(n^3)
[TIME]域缩放,这使得优化规模超过几千的作业变得不太实际c)
如果问题和其它条件允许,我们可以分析并尝试在许多分裂情况下在
aProblemParametersVectorSPACE[...]
的较低维度运行全局优化,以找到子空间最优,并尝试增加/重新运行从子空间接收到的最有希望的解作为全尺度、全维度全局最优启动器,希望在更快的时间内,而不是让进化相同,没有那些许多(更快)子空间提示。在这里,只有我们的时间、资源和想象力是我们的极限。r55awzrz2#
使用
workers
关键字进行并行化。