【问题标题】:Examples of line_search in scipyscipy中line_search的例子
【发布时间】:2016-01-26 10:09:13
【问题描述】:

我正在寻找使用scipy.optimize.line_search 的示例。我真的不明白这个函数如何与多变量函数一起工作。我写了一个简单的例子

import scipy as sp
import scipy.optimize
def test_func(x):
    return (x[0])**2+(x[1])**2

def test_grad(x):
    return [2*x[0],2*x[1]]

sp.optimize.line_search(test_func,test_grad,[1.8,1.7],[-1.0,-1.0])

我有

File "D:\Anaconda2\lib\site-packages\scipy\optimize\linesearch.py", line 259, in phi
return f(xk + alpha * pk, *args)
TypeError: can't multiply sequence by non-int of type 'float'

【问题讨论】:

  • [1.8,1.7],[-1.0,-1.0] 应该是 ndarray 类型;它有助于将它们转换为 numpy 数组吗?另外你为什么不使用真正的渐变功能?

标签: python scipy


【解决方案1】:

您需要提交 numpy 数组而不是列表:

import numpy as np
sp.optimize.line_search(test_func,test_grad,np.array([1.8,1.7]),np.array([-1.,-1.]))

【讨论】:

  • 你说的是grad的数值还是test_grad函数?
  • 我说的是渐变函数。计算导数应该完全去除平方项。编辑:我看到你修好了。
  • 主要问题是,为什么 alpha 是标量,而不是 ndarray?阅读有关 Wolfe 条件的信息,我想,alpha 必须与 xk 具有相同的维度。
  • 不,alpha 是步长。您作为参数提供的 pk 是向量。详情请查看Wikipedia
  • 它对一个变量函数是正确的。但是如果我们想最小化 f(x,y), x,y - 两个具有不同长度(维数)的向量(矩阵)?
猜你喜欢
  • 2018-05-21
  • 1970-01-01
  • 2014-06-15
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
  • 2017-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多