【问题标题】:Minimisation problem in Python, fmin_bfgs won't work but fmin will, 'Matrices not aligned'Python 中的最小化问题,fmin_bfgs 不起作用,但 fmin 会,“矩阵未对齐”
【发布时间】:2011-11-25 19:12:46
【问题描述】:

我在 python 中有一个函数,它接受一个向量并返回一个实数。我正在使用 scipy.optimize fmin 和 fmin_bfgs 函数来查找为函数提供近似最小值的参数。但是,当我使用 fmin 时,我得到了一个很好的答案(很慢),但是当我切换到 fmin_bfgs 时,我得到一个错误,说“矩阵未对齐”。这是我的功能:

    def norm(b_):
        b_ = b_.reshape(int(M),1)                   #M already given elsewhere
        Yb = np.dot(Y,b_)                           #Y already given elsewhere

        B = np.zeros((int(M),int(M))) 
        for j in xrange(int(M)):
            B[j][j] = -t[j+1]*np.exp(-t[j+1]*Yb[j]) #The t[j] are already known
        P = np.zeros((int(M),1))
        for j in xrange(int(M)):
            P[j][0] = np.exp(-t[j+1]*Yb[j])

        diff = np.zeros((int(M),1))                 #Functions d(i,b) are known
        for i in xrange(1,int(M)-1):
            diff[i][0] = d(i+1,b_) - d(i,b_)
        diff[0][0] = d(1,b_)
        diff[int(M)-1][0] = -d(int(M)-1,b_)

        term1_ = (1.0/N)*(np.dot((V - np.dot(c,P)).transpose(),W))
        term2_ = np.dot(W,V - np.dot(c,P))          #V,c,P,W already known
        term1_ = np.dot(term1_,term2_)
        term2_ = lambd*np.dot(Yb.transpose(),diff)

        return term1_ + term2_

我是这样称呼 fmin_bfgs 的:

    fmin_bfgs(norm, b_guess,fprime=None,
              args=(),gtol=0.0001,norm=0.00000000001,
              epsilon=1.4901161193847656e-08,maxiter=None,
              full_output=0, disp=1, retall=0, callback=None)

当我调用 fmin 时,它工作正常,只是太慢而无法使用(我需要优化几次)。但是当我尝试 fmin_bfgs 时,我得到了这个错误:

Traceback(最近一次调用最后一次): 模块中的文件“C:\Program Files\Wing IDE 101 4.0\src\debug\tserver_sandbox.py”,第 287 行 文件“C:\Python27\Lib\site-packages\scipy\optimize\optimize.py”,第 491 行,在 fmin_bfgs old_fval,old_old_fval) 文件“C:\Python27\Lib\site-packages\scipy\optimize\linesearch.py​​”,第 239 行,在 line_search_wolfe2 derphi0、c1、c2、amax 中) 文件“C:\Python27\Lib\site-packages\scipy\optimize\linesearch.py​​”,第 339 行,在 scalar_search_wolfe2 phi0、derphi0、c1、c2 中) 文件“C:\Python27\Lib\site-packages\scipy\optimize\linesearch.py​​”,第 471 行,在 _zoom derphi_aj = derphi(a_j) 文件“C:\Python27\Lib\site-packages\scipy\optimize\linesearch.py​​”,第 233 行,在 derphi 中返回 np.dot(gval[0], pk) ValueError:矩阵未对齐

任何想法为什么会发生这种情况?我提供的函数的所有矩阵都正确对齐(并且函数在 fmin 工作后工作)。非常感谢您的帮助!

【问题讨论】:

  • 我认为这是因为在我调用的函数中某些数字变得太大或太小。反正我有解决办法,所以不用回答。

标签: optimization matrix alignment


【解决方案1】:

似乎其中一个程序最终处理的数字太大而无法处理。很遗憾它不能告诉我它做得很好。我解决了它,所以没有更多的问题。抱歉,这浪费了您的时间。

【讨论】:

    猜你喜欢
    • 2012-02-03
    • 1970-01-01
    • 2013-01-01
    • 2017-03-24
    • 2021-05-15
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多