Python中的最小化问题,fmin_bfgs不起作用,但fmin会“Matrices not aligned”

时间:2011-09-27 07:17:51

标签: optimization matrix alignment

我在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时,我收到了这个错误:

追踪(最近一次通话): 模块中的“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工作后起作用)。非常感谢!

1 个答案:

答案 0 :(得分:1)

似乎其中一个程序最终处理的数据太大而无法处理。惭愧它无法告诉我这是正确的做法。我虽然解决了这个问题,所以没有问题了。对不起,如果这浪费了你的时间。