gpt4 book ai didi

python - 从 Scipy "SLSQP"求解器获取迭代数据

转载 作者:行者123 更新时间:2023-12-03 19:00:51 24 4
gpt4 key购买 nike

我想从 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 列表中?
有人可以帮帮我吗?
非常感谢您提前。

最佳答案

使用包装函数:

def track(f, out_values=None, out_args=None, out_kwargs=None):
def wrapped(*args, **kwargs):
if out_args is not None: out_args.append(args)
if out_kwargs is not None: out_kwargs.append(kwargs)
val = f(*args, **kwargs)
if out_values is not None: out_values.append(val)
return val
return wrapped
然后:
>>> vars, vals = [], []
>>> x0 = [1.3, 0.7, 0.8, 1.9, 1.2]
>>> res = minimize(track(rosen, vals, vars), x0, method='SLSQP',
... options={'ftol': 1e-6, 'disp': True})
>>> vals[:5]
[848.22, 848.2200076800586, 848.2199957472086, 848.2199949097634, 848.2200310748821
>>> vars[1]
(array([1.30000001, 0.7 , 0.8 , 1.9 , 1.2 ]),)

关于python - 从 Scipy "SLSQP"求解器获取迭代数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64900795/

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