Сципи: Как я могу использовать Bounds с trust-constr? - PullRequest
0 голосов
/ 30 августа 2018

для моей ограниченной задачи Я хочу использовать алгоритм Scipy-Trusted-Constr, так как у меня многофакторная проблема с ограничениями. Я не хочу / не могу вычислить Якоби / Гессиана аналитически и вычислить его. Однако при установке границ вычисление якобиана падает:

  File "C:\Python27\lib\site-packages\scipy\optimize\_trustregion_constr\tr_interior_point.py", line 56, in __init__
    self.jac0 = self._compute_jacobian(jac_eq0, jac_ineq0, s0)
  File "C:\Python27\lib\site-packages\scipy\optimize\_trustregion_constr\tr_interior_point.py", line 164, in _compute_jacobian
    [J_ineq, S]]))
  File "C:\Python27\lib\site-packages\numpy\matrixlib\defmatrix.py", line 1237, in bmat
    arr_rows.append(concatenate(row, axis=-1))
ValueError: all the input array dimensions except for the concatenation axis must match exactly

Ошибка возникает как при использовании границ старого стиля, так и самого нового объекта Bounds. Я мог бы воспроизвести ошибку с этим кодом:

import numpy as np
import scipy.optimize as scopt

def RosenbrockN(x):
    result = 0
    for i in range(len(x)-1):
        result += 100*(x[i+1]-x[i]**2)**2+(1-x[i])**2
    return result
x0 = [0.0, 0.0, 0.0]
#bounds = scopt.Bounds([-2.0,-0.5,-2.0],[2.0,0.8,0.7])
bounds = [(-2.0,2.0),(-0.5,0.8),(-2.0,0.7)] 
Res = scopt.minimize(RosenbrockN, x0, \
                    method = 'trust-constr', bounds = bounds, \
                    jac = '2-point', hess = scopt.SR1())

Я так понимаю, я просто неправильно понимаю, как установлены границы, но не могу найти свою ошибку. Совет ценится.

РЕДАКТИРОВАТЬ: я также попробовал пример кода из документации, которая дала тот же результат. Другие методы, такие как SLSQP, хорошо работают с границами.

SciPy Версия 1.1.0, Python Версия 2.7.4, ОС Win 7 Ent.

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