Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何访问从scipy.optimize.basinhopping(非最小化)返回的OptimizeResult实例的“success”属性?_Python_Optimization_Scipy_Return Value_Scipy Optimize - Fatal编程技术网

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
例程。我觉得这很奇怪,因为for
OptimizeResult
显示
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

闻起来像虫子。如果您有一两分钟的时间,您可能想在(单击绿色的“新问题”按钮)上提交有关此问题的问题。我在该问题中找到了相关讨论: