SciPY SLSQP возвращает «Несовместимые ограничения неравенства (режим выхода 4)», хотя я не установил никаких ограничений - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь решить проблему минимизации с помощью SciPY SLSQP, и хотя я не установил никаких ограничений (равенство или неравенство), решатель возвращает сообщение «Несовместимые ограничения неравенства (режим выхода 4)». Я заметил, что оптимизатор возвращает это сообщение, когда я увеличиваю количество параметров управления (в настоящее время у меня есть 10 параметров управления). Я не уверен, почему это должно быть проблемой.
Кто-нибудь сталкивался с этим раньше, и если да, можете ли вы помочь с обходным решением?

Я попытаюсь прикрепить часть кода из сценария оптимизации, хотя это может не иметь полного смысла, так как скрипт импортирует из другого скрипта, где я реализовал решатель ODE, используя odeint SciPY.

# Define objective function
def J(x):

    Csa = x[0]; Csv = x[1]; Rs = x[2]; Cpa = x[3]; Cpv = x[4]; Rp = x[5]
    Gmi = x[6]; Gao = x[7]; Gtr = x[8]; Gpv = x[9]

    # solve the ODE system and extract simulated vlv and vrv
    vlv_s, vrv_s = ode_solver(Csa, Csv, Rs, Cpa, Cpv, Rp, Gmi, Gao, Gtr, Gpv)

    obj_func = 0
    for vl_m, vl_s, vr_m, vr_s in zip(vlv_m, vlv_s, vrv_m, vrv_s):
        obj_func += np.sqrt((vl_m - vl_s)**2) + np.sqrt((vr_m - vr_s)**2)

    return obj_func


# Define the bounds of the variables Csa, Csv, Rs, Cpa, Cpv, Rp, Gmi, Gao, Gtr, Gpv
bnds = ((0.2,50.0), (10.8,500.0), (525.0,1200.0), (0.2,500.0), (10.8,500.0), (15.0,500.0), \
        (0.05,10.0), (0.05,10.0), (0.02,10.0), (0.02,10.0))

# Solver options
opts = {'maxiter': 500, 'disp': True}

# Define initial guess vector
x0 = np.array([10.0, 25.5, 750.0, 25.0, 60.0, 40.0, 0.1, 0.1, 0.07, 0.04])

# solve the minimization problem
res = minimize(J, x0, method='SLSQP', bounds=bnds, options=opts)

Буду очень признателен за любую помощь по этому вопросу.

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