Проблема минимизации в Python, fmin_bfgs не будет работать, но fmin будет: «Матрицы не выровнены» - PullRequest
0 голосов
/ 27 сентября 2011

У меня есть функция в Python, которая берет вектор и возвращает действительное число.Я использую функции fip и fmin_bfgs scipy.optimize, чтобы найти аргумент, который дает функции приблизительное минимальное значение.Однако, когда я использую 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 return np.dot (gval [0], pk) ValueError: матрицы не выровнены

Есть идеи, почему это может произойти?Все матрицы, которые я предоставил функции, выровнены правильно (и функция работает, так как fmin работал).Помощь очень ценится!

1 Ответ

1 голос
/ 03 октября 2011

Кажется, что одна из программ только что закончила работу с числами, которые были слишком велики для нее. Позор, это не могло сказать мне, что он делал это должным образом. Я работал над этим, хотя, так что больше никаких проблем. Извините, если это потратило впустую ваше время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...