gpt4 book ai didi

python - Scipy.optimize 最小化花费的时间太长

转载 作者:太空狗 更新时间:2023-10-30 01:50:31 25 4
gpt4 key购买 nike

我正在运行一个包含大约 1500 个变量的约束优化问题,运行时间超过 30 分钟....

如果我将公差降低到 1,最小化将在大约五分钟内完成,但这似乎不是加快速度的好方法。

from scipy.optimize import minimize

results = minimize(objFun, initialVals, method='SLSQP', bounds = bnds, constraints=cons, tol = toler)

print(results)

fun: -868.72033130318198
jac: array([ 0., 0., 0., ..., 0., 0., 0.])
message: 'Optimization terminated successfully.'
nfev: 1459
nit: 1
njev: 1
status: 0
success: True
x: array([ 0., 0., 0., ..., 1., 1., 1.])

如有任何建议,我们将不胜感激。

最佳答案

您的公差应设置为您需要的任何公差。将它设置得更高只是告诉优化器更快停止并且实际上并没有加速它。话虽这么说,如果不需要的话,允许它达到更大的耐受性可能会浪费您的时间。

减少所需时间的可能方法如下:

  • 使用不同的优化器
  • 使用不同的梯度寻找方法
  • 加速你的目标函数
  • 减少设计变量的数量
  • 选择一个更好的初始猜测
  • 使用并行处理

梯度法

当您使用有限差分时,您需要对目标函数进行(1 + 设计变量的数量)次评估以获得总灵敏度。

正如 ev-br 所说,如果您可以找到雅可比矩阵的解析解,那么就不需要了。基于您有 1500 个设计变量的事实。我猜这并不容易,但如果您的目标函数允许,自动微分可能是一种选择。我对 AlgoPy 有一些经验你可以看看。

目标函数速度

由于目标函数评估的数量很多,这可能是最简单的方法。再次查看 ev-br 对诸如使用 cython 进行编译之类的回答。 ,并且一般降低复杂性。您可以尝试使用 timeit 运行部分代码所以看看改变是否有益。

设计变量

线性减少设计变量的数量会减少有限差分所需的目标函数调用。您的所有变量都发生显着变化吗?有些可以固定在一个设定值吗?你能推导出一些作为其他函数的函数吗?

初步猜测

根据您的问题,您可以选择一个更好的起点,这意味着您的优化器“更接近”最终解决方案。根据您的问题,您还可以从之前的结果“重新开始”优化。

并行化

有限差分计算不必按顺序进行,因此您可以编写自己的有限差分函数,然后使用 multiprocessing 并行运行调用类(class)。其有效性取决于您的系统和可用内核数。

关于python - Scipy.optimize 最小化花费的时间太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38648727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com