Gekko: параметры MINLP не принимаются gekko

Я пытаюсь решить проблему MINLP с помощью gekko. Мой код следующий:

m = GEKKO(remote = False)
m.options.SOLVER = 3

m.solver_options = ['minlp_maximum_iterations 500', \
            # minlp iterations with integer solution
            'minlp_max_iter_with_int_sol 10', \
            # treat minlp as nlp
            'minlp_as_nlp 0', \
            # nlp sub-problem max iterations
            'nlp_maximum_iterations 50', \
            # 1 = depth first, 2 = breadth first
            'minlp_branch_method 1', \
            # maximum deviation from whole number
            'minlp_integer_tol 0.05', \
            # covergence tolerance
            'minlp_gap_tol 0.01']

rows  = nb_phases + 3*b_max*(nb_phases+1)
x = np.empty(rows,dtype=object)

for i in range(3*nb_phases*b_max+nb_phases+1):
    x[i] = m.Var(value = xinit[i], lb = LB[i], ub = UB[i], integer = False)
for i in range(3*nb_phases*b_max+nb_phases+1, (3*nb_phases+3)*b_max+nb_phases):
    x[i] = m.Var(value = xinit[i], lb = LB[i], ub = UB[i], integer = True)

# Constraints
m.axb(A,B,x,etype = '<=',sparse=False) 
m.axb(A_eq,B_eq,x,etype = '=',sparse=False)

# Objective Function
f = objective_fun(x, t, ob, jofbuses, q, qc, s, oa, k, l, T, G_next, C, Y, G_previous)
m.Obj(f)

#Solver
m.solve(disp = False)

У меня следующее исключение:

Сообщение об исключении: параметр чтения: minlp_maximum_iterations. Это недопустимый вариант. Проверьте список доступных опций.

И для всех остальных вариантов у меня такое же исключение.

Я попытался изменить решатель на m.options.solver = 1, но затем получил сообщение об ошибке:

Ошибка: Исключение: Отслеживание нарушения доступа: недоступно, скомпилировать с -ftrace = frame или -ftrace = full Ошибка: 'results.json' не найден.

В приведенном выше коде я вызываю следующую функцию 'objective_fun':

def objective_fun(x, t, ob, jofbuses, q, qc, s, oa, k, l, T, G_next, C, Y, G_previous):

    nb_phases = len(G_next)
    b_max = len(t)
    no_lanegroups = len(q)

    obj = 0
    G = x[0:nb_phases]

    
    for j in range(no_lanegroups):
        delay_a = 0.5*q[j]/(1-q[j]/s[j]) * (pow((sum(G_previous[l[j]:nb_phases]) + sum(G[0:k[j]-1]) + sum(Y[l[j]-1:nb_phases]) + sum(Y[0:k[j]-1])),2) + pow(sum(G[l[j]:nb_phases]) + sum(G_next[0:k[j]-1]) + sum(Y[l[j]-1:nb_phases]) + sum(Y[0:k[j]-1]),2))   
    
        obj = obj + oa*delay_a

    for b in range(b_max): 
        delay_b1 = x[(3*nb_phases+1)*b_max + nb_phases + b]*(q[jofbuses[b]-1]/s[jofbuses[b]-1] * (t[b] - (T-1)*C + sum(G_previous[l[jofbuses[b]-1]:nb_phases]) + sum(Y[l[jofbuses[b]-1] -1:nb_phases])) + (T-1)*C - t[b] + sum(Y[0:k[jofbuses[b]-1]-1])) 
        delay_b2 = x[(3*nb_phases+2)*b_max + nb_phases + b-1]*(q[jofbuses[b]-1]/s[jofbuses[b]-1] * (t[b] - (T-1)*C - sum(Y[0:l[jofbuses[b]-1]-1])) + T*C + sum(G_next[0:k[jofbuses[b]-1]-1]) + sum(Y[0:k[jofbuses[b]-1]-1]) - t[b]) 
        delay_b3 = sum(x[nb_phases*b_max + nb_phases*b:nb_phases*b_max + nb_phases*b+k[jofbuses[b]-1]-1]) - q[jofbuses[b]-1]/s[jofbuses[b]-1]*sum(x[2*nb_phases*b_max + nb_phases*b:2*nb_phases*b_max + nb_phases*b +l[jofbuses[b]-1]])

        delay_b = delay_b1+delay_b2 +delay_b3 

        obj = obj + delay_b*ob[b]       
    
    return obj

Кроме того, если я не укажу параметры, я могу запустить код и найти успешное решение. Однако некоторые элементы массива x должны быть целыми числами, но полученное мной решение не соблюдает это условие.

Можете ли вы помочь мне понять, как решить эти проблемы? Большое спасибо !


person Zineb    schedule 28.04.2021    source источник


Ответы (1)


Параметр minlp_maximum_iterations не является одним из доступных вариантов для решателя IPOPT. Вы правильно обнаружили, что переход на m.options.SOLVER=1 (решатель APOPT) устраняет эту ошибку.

Решающая программа не находит решения. Я рекомендую стратегию инициализации, чтобы сначала решить с помощью IPOPT без опций. Затем снова решите с помощью параметров APOPT, чтобы увидеть, помогает ли нецелочисленное решение IPOPT в качестве отправной точки для поиска оптимального целочисленного решения.

person John Hedengren    schedule 03.05.2021
comment
Дорогой Джон, большое спасибо за твой ответ. Я выполнил ваши инструкции, но получаю следующую ошибку: Ошибка: Исключение: Отслеживание нарушения прав доступа: недоступно, скомпилируйте с помощью -ftrace = frame или -ftrace = full Ошибка: 'results.json' не найден. FileNotFoundError: [Errno 2] Нет такого файла или каталога: 'C: \\ Users \\ Zineb \\ AppData \\ Local \\ Temp \\ tmpitmpfwm_gk_model1 \\ options.json' - person Zineb; 04.05.2021
comment
Что я могу сделать, чтобы решить эту проблему? Большое спасибо ! - person Zineb; 04.05.2021
comment
Мне трудно помочь диагностировать проблему, потому что если я попытаюсь запустить ваш скрипт, будет много неопределенных значений. Не могли бы вы создать новый вопрос с чем-то полным и минимальным, чтобы показать проблему? - person John Hedengren; 05.05.2021
comment
Спасибо за Ваш ответ. Напишу новый вопрос. - person Zineb; 05.05.2021