gpt4 book ai didi

python - scipy.optimize.minimize ('SLSQP' ) 在给定 2000 个昏暗变量时太慢

转载 作者:太空宇宙 更新时间:2023-11-04 07:15:50 25 4
gpt4 key购买 nike

我有一个带有约束和上限/下限的非线性优化问题,所以对于 scipy,我必须使用 SLSQP。这个问题显然不是凸的。我得到了 jacobian fo 目标函数和约束函数都可以正常工作(结果好/快到 300 个输入向量)。所有功能都经过矢量化和调整以运行得非常快。问题是使用 1000+ 输入向量需要很长时间,尽管我可以看到最小化器并没有经常调用我的函数(目标/约束/梯度)并且似乎在内部花费了大部分处理时间。我在某处读到 SLSQP 的性能是 O(n^3)。

是否有更好/更快的 SLSQP 实现或其他方法来解决 python 的此类问题?我尝试了 nlopt 并以某种方式返回了错误的结果,因为我在 scipy 中使用了完全相同的函数(带有一个包装器以适应其方法签名)。我也未能将 ipopt 与 pyipopt 包一起使用,无法使 ipopt 二进制文件与 python 包装器一起使用。

更新:如果有帮助,我的输入变量基本上是 (x,y) 元组的向量或二维表面中表示坐标的点。有了 1000 个点,我最终得到一个 2000 暗淡的输入向量。我要优化的函数计算点之间的最佳位置,同时考虑它们之间的关系和其他约束。所以问题并不稀疏。

谢谢...

最佳答案

我们对该模型知之甚少,但这里有一些注意事项:

  1. SLSQP 确实是为小型(密集型)、尺度良好的模型而设计的。
  2. SLSQP 是一个本地求解器。它会接受非凸问题,但只会提供局部解决方案。
  3. 我怀疑 SLSQP 是否存在这种复杂性。无论如何,它并没有太多说明特定问题的性能。
  4. IPOPT 是一种大规模的稀疏内点求解器。它将找到本地解决方案。它可以求解非常大的模型。
  5. BARON、ANTIGONE 和 COUENNE 等全局求解器找到全局解决方案(如果您不耐烦并过早停止,则可以限制解决方案的质量)。这些求解器(大部分时间)比本地求解器慢。我不知道直接的 Python 链接。
  6. 如果您有一个好的起点,本地求解器可能正是您所需要的。使用多起点策略可以帮助找到更好的解决方案(尚未证明是全局最优解,但您可以确信自己没有找到非常糟糕的局部最优解)。
  7. Python 框架 PYOMO 提供对许多求解器的访问。但是,您将需要重写模型。 PYOMO 具有自动微分功能:无需提供梯度。
  8. 为了测试,您可以尝试在 AMPL 或 GAMS 中转录模型并通过 NEOS 在线求解.这将允许您尝试许多求解器。 AMPL 和 GAMS 都具有自动微分功能。

关于python - scipy.optimize.minimize ('SLSQP' ) 在给定 2000 个昏暗变量时太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47497552/

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