Python 如何访问从scipy.optimize.basinhopping(非最小化)返回的OptimizeResult实例的“success”属性?
问题 根据,函数Python 如何访问从scipy.optimize.basinhopping(非最小化)返回的OptimizeResult实例的“success”属性?,python,optimization,scipy,return-value,scipy-optimize,Python,Optimization,Scipy,Return Value,Scipy Optimize,问题 根据,函数scipy.optimize.basinhopping(…)返回OptimizeResult的实例,它基本上是字典的包装器。我可以打印此实例并查看成功:True,但我希望以编程方式访问它。在通过scipy.optimize.minimize(…)进行局部最小化的情况下,根据还返回OptimizeResult的实例,success值可作为OptimizeResult.success访问。但是,这不适用于basinhopping例程。我觉得这很奇怪,因为forOptimizeResu
scipy.optimize.basinhopping(…)
返回OptimizeResult
的实例,它基本上是字典的包装器。我可以打印
此实例并查看成功:True
,但我希望以编程方式访问它。在通过scipy.optimize.minimize(…)
进行局部最小化的情况下,根据还返回OptimizeResult
的实例,success
值可作为OptimizeResult.success
访问。但是,这不适用于basinhopping
例程。我觉得这很奇怪,因为forOptimizeResult
显示success
应该是一个允许的键
我的问题
如何以编程方式访问OptimizeResult
的success
值
示例代码
要重新创建此问题(并显示它在最小化(…)
的情况下有效),请参阅下面的代码:
import numpy as np
from scipy.optimize import minimize, basinhopping, OptimizeResult
def pdf(prms, x):
""" normal distribution pdf """
return np.exp(- np.square((x - prms[0])/prms[1]) / 2) / (prms[1] * np.sqrt(2 * np.pi))
def nll(prms, x):
""" negative log-likelihood """
return np.log(pdf(prms, x))
def err_func(prms, x):
""" maximum likelihood estimation """
return -1 * np.sum(nll(prms, x))
prms = (50, 10) # true parameters: mean=50, std=10
data = np.random.normal(loc=prms[0], scale=prms[1], size=1000) # normal distribution
x0 = (30, 15) # initial parameter guess
local_result = minimize(err_func, x0, args=(data,), method='Nelder-Mead')
print("\n LOCAL EXTREMUM RESULT:\n{}\n".format(local_result))
print("\n .. LOCAL SUCCESS:\n{}\n".format(local_result.success))
minimizer_kwargs = {'args' : (data,), 'method' : 'Nelder-Mead'}
global_result = basinhopping(err_func, x0, minimizer_kwargs=minimizer_kwargs)
print("\n GLOBAL EXTREMUM RESULT:\n{}\n".format(global_result))
try:
print("\n .. GLOBAL SUCCESS:\n{}\n".format(global_result.success))
except:
suc = OptimizeResult(global_result)
print("\n .. GLOBAL SUCCESS:\n{}\n".format(suc.success))
示例输出
上面的print
语句输出以下内容:
LOCAL EXTREMUM RESULT:
final_simplex: (array([[49.81697641, 10.07216849],
[49.81705723, 10.07218614],
[49.81706317, 10.07208372]]), array([3728.71186314, 3728.71186315, 3728.71186316]))
fun: 3728.711863138763
message: 'Optimization terminated successfully.'
nfev: 86
nit: 44
status: 0
success: True
x: array([49.81697641, 10.07216849])
.. LOCAL SUCCESS:
True
GLOBAL EXTREMUM RESULT:
fun: 3728.711863121894
lowest_optimization_result: final_simplex: (array([[49.81701209, 10.07213731],
[49.81709255, 10.07216525],
[49.81703196, 10.07220361]]), array([3728.71186312, 3728.71186315, 3728.71186316]))
fun: 3728.711863121894
message: 'Optimization terminated successfully.'
nfev: 63
nit: 31
status: 0
success: True
x: array([49.81701209, 10.07213731])
message: ['requested number of basinhopping iterations completed successfully']
minimization_failures: 0
nfev: 6455
nit: 100
x: array([49.81701209, 10.07213731])
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/scipy/optimize/optimize.py", line 114, in __getattr__
return self[name]
KeyError: 'success'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "stacko.py", line 28, in <module>
print("\n .. GLOBAL SUCCESS:\n{}\n".format(global_result.success))
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/scipy/optimize/optimize.py", line 116, in __getattr__
raise AttributeError(name)
AttributeError: success
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/scipy/optimize/optimize.py", line 114, in __getattr__
return self[name]
KeyError: 'success'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "stacko.py", line 31, in <module>
print("\n .. GLOBAL SUCCESS:\n{}\n".format(suc.success))
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/scipy/optimize/optimize.py", line 116, in __getattr__
raise AttributeError(name)
AttributeError: success
局部极值结果:
最终单纯形:(数组[49.81697641,10.07216849],
[49.81705723, 10.07218614],
[49.81706317,10.07208372]),数组([3728.71186314,3728.711863153728.71186316]))
乐趣:3728.711863138763
消息:“优化已成功终止。”
nfev:86
nit:44
状态:0
成功:真的
x:数组([49.81697641,10.07216849])
.. 本地成功:
真的
全局极值结果:
乐趣:3728.711863121894
最低优化结果:最终单纯形:(数组)[[49.81701209,10.07213731],
[49.81709255, 10.07216525],
[49.81703196,10.07220361]),数组([3728.71186312,3728.71186315,3728.71186316]))
乐趣:3728.711863121894
消息:“优化已成功终止。”
nfev:63
nit:31
状态:0
成功:真的
x:数组([49.81701209,10.07213731])
消息:[“请求的basinhopping迭代次数已成功完成”]
最小化故障:0
nfev:6455
尼特:100
x:数组([49.81701209,10.07213731])
回溯(最近一次呼叫最后一次):
文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/scipy/optimize/optimize.py”,第114行,位于__
返回自我[姓名]
关键错误:“成功”
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“stacko.py”,第28行,在
打印(“\n..GLOBAL SUCCESS:\n{}\n”.format(GLOBAL\u result.SUCCESS))
文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/scipy/optimize/optimize.py”,第116行,在__
提升属性错误(名称)
属性错误:成功
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/scipy/optimize/optimize.py”,第114行,位于__
返回自我[姓名]
关键错误:“成功”
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“stacko.py”,第31行,在
打印(“\n..GLOBAL SUCCESS:\n{}\n”.format(suc.SUCCESS))
文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/scipy/optimize/optimize.py”,第116行,在__
提升属性错误(名称)
属性错误:成功
global\u result
result具有属性lovel\u optimization\u result
,它本身就是OptimizeResult
的实例,因此您应该调用该结果的success
:
global_result.lowest_optimization_result.success
闻起来像虫子。如果您有一两分钟的时间,您可能想在(单击绿色的“新问题”按钮)上提交有关此问题的问题。我在该问题中找到了相关讨论: