【发布时间】:2016-12-03 13:48:36
【问题描述】:
我正在运行一个包含大约 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.])
任何建议将不胜感激。
【问题讨论】:
-
您是否尝试增加步长/有限差分导数 epsilon?如果它太小,有时不会/几乎没有进展,但这取决于问题(平滑度是一个重要因素)。您也可以尝试其他优化器。
-
只需要一次迭代?你应该很高兴,看起来你没有提供梯度,所以求解器做了有限差分。你的函数评估起来似乎很昂贵,并且缺乏可用的梯度使得这个问题不太适合这个求解器。您可能需要查看无导数求解器。
-
是否还有其他适用于非线性方程的 Python 约束优化库?我没见过。
标签: python optimization scipy minimize