【发布时间】:2020-11-19 04:37:43
【问题描述】:
我想从 Scipy 求解器“SLSQP”获取迭代信息。我使用回调函数开发了一个代码,如下所述。
from scipy.optimize import minimize, rosen, rosen_der
def callback(xk, step=[0]):
print(step[0], xk[0] )
step[0] += 1
x0 = [1.3, 0.7, 0.8, 1.9, 1.2]
res = minimize(rosen, x0, callback=callback, method='SLSQP',
options={'ftol': 1e-6, 'disp': True})
我得到的求解器输出为
0 -514.1000091552735
1 -135.7415473476321
2 -17.549744746578245
3 17.564262441411472
4 -1.5602312826344646
5 1.0079282528485665
6 0.9069490399784312
7 0.8943984770283425
但是,我想获取函数的值以及每次迭代的决策变量。我怎样才能得到它?
如何将这些信息抓取到 Python 列表中?
有人可以帮帮我吗?
非常感谢您。
【问题讨论】:
-
您可以编写一个“自定义”求解器来包装 SLSQP 求解器,并在每次迭代时缓存/打印值,然后将它们传递给实际的求解器。
-
@bnaecker 你能详细解释一下如何做到这一点吗?感谢您的支持。
标签: python list optimization scipy