【问题标题】:I have problems with this scipy.optimize.minimize task: Newton-CG vs BFGS vs L-BFGS我对这个 scipy.optimize.minimize 任务有疑问:Newton-CG vs BFGS vs L-BFGS
【发布时间】:2022-01-06 03:13:22
【问题描述】:

(SciPy 优化:Newton-CG vs BFGS vs L-BFGS)

考虑以下区域:D = [-5.10]x[0.15]。下面给出的这项任务必须在 这个域。并在 Jupyter notebook 中执行

绘制 N = 100 个均匀分布在 D 上的随机点。对于每个点,使用 scipy.optimize.minimize 运行 f 的局部最小化,方法如下: CG,BFGS,牛顿-CG,L-BFGS-B。对于此任务,您将必须编写另外两个函数,一个返回 f 的 Jacobian 矩阵,另一个返回 f 的 Hessian 矩阵。将答案存储在一个形状为 N x 6 的数组中,其中每一行包含以下数据:

(x1, y1,x2, y2,v,c),

其中 (x1, y1) 和 (x2, y2) 分别是优化的起点和终点,而 v 是 f 的最终值。 c行的最后一个元素是使用方法的代码,根据这个对应关系:CG:1, BFGS:2, Newton-CG:3, L-BFGS-B:4

【问题讨论】:

  • from scipy.optimize import Bounds bounds = Bounds ([-5, 10.0], [0, 5.0])

标签: python scipy jupyter-notebook


【解决方案1】:
I got this code

import numpy as np
from scipy import optimize
from scipy.optimize import minimize
#%from numdifftools import Jacobian, Hessian

#method

mmm='CG'
#mmm='BFGS'
#mmm='Newton-CG'
#mmm='L-BFGS-B'


a=1
b=5.1/(4*np.pi**2)
c=5/np.pi
r=6
s=10
t=1/(8*np.pi)

a1=-5
b1=10
c1=0
d1=15

def f_brain(xx):
    aa=a*(xx[1]-b*xx[0]**2+c*xx[0]-r)**2+s*(1-t)*np.cos(xx[0])+s
    return aa

def fun_der(xx):
    aa1=2*a*(xx[1]-b*(xx[0]**2)+c*xx[0]-r)*(-2*b*xx[0]+c)-s*(1-t)*np.sin(xx[0])
    aa2=2*a*(xx[1]-b*(xx[0]**2)+c*xx[0]-r)
    return np.array([aa1,aa2])

def fun_hess(xx):
    b11=2*a*(c-2*b*xx[0])**2-2*b*(xx[1]-b*xx[0]**2+c*xx[1]-r)-s*(1-t)*np.cos(xx[0])
    b12=2*a*(c-2*b*xx[0])
    b21=2*a*(c-2*b*xx[0])
    b22=2*a
    return np.array([[b11,b12],[b21,b22]])

# importing libraries

x0=np.array([a1,c1])
x_bound = (a1,b1)
y_bound = (c1,d1)

result = optimize.minimize(f_brain, x0=x0, method=mmm,
                           options={'maxiter':100}, jac=fun_der(x0).all(), hess=fun_hess(x0).all(),
                           bounds=(x_bound,y_bound))


print(result) 

print("Method is "+mmm+" and the Minimum occurs at: ", result['x'])

x00=np.float64(result['x'])

print("Jacobian", fun_der(x00))

print("Hessian", fun_hess(x00))

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2017-07-14
  • 2015-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-07
  • 2017-02-06
  • 2015-04-18
相关资源
最近更新 更多