Rus*_*lB. 4 python optimization minimize scipy
我运行约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.])
Run Code Online (Sandbox Code Playgroud)
任何建议,将不胜感激.
小智 10
您的公差应设置为您需要的公差.将其设置得更高只会告诉优化器更快停止并且实际上不会加速它.话虽这么说,如果不需要,可能会浪费你的时间.
减少所需时间的可能方法如下:
当您使用有限差分时,您需要(1 +设计变量的数量)对目标函数的评估以获得总灵敏度.
正如ev-br所说,如果你能找到jacobian的解析解,那就不需要了.基于这个事实,你有1500个设计变量.我猜这并不容易,但如果你的目标函数允许,自动区分可能是一种选择.我有一些AlgoPy的经验,你可以看看.
由于大量的目标函数评估,这可能是最简单的方法.再一次,请参阅ev-br的回答,例如使用cython编译,以及一般降低复杂性.您可以尝试使用timeit运行部分代码,以查看更改是否有益.
减少设计变量的数量会线性降低有限差分所需的目标函数调用.您的所有变量都会发生显着变化 有些可以固定在设定值?你能从别人那里得到一些东西吗?
根据您的问题,您可以选择一个更好的起点,这意味着您的优化器"更接近"最终解决方案.根据您的问题,您还可以从之前的结果中"重新启动"优化.
有限差分评估不必按顺序进行,因此您可以编写自己的有限差分函数,然后使用多处理类并行运行调用.其有效性取决于您的系统和可用内核数量.
这就是我要做的:
| 归档时间: |
|
| 查看次数: |
6242 次 |
| 最近记录: |