Я использую GEKKO
для решения задачи нелинейного программирования. Моя цель - сравнить GEKKO
производительность с альтернативой, поэтому я хочу убедиться, что получаю от GEKKO
лучшее, что она может предложить.
Существует n двоичных переменных, каждой из них присвоен вес, каждый из весов - это число из интервала [0, 1] (т. Е. Рациональное число < em> w, удовлетворяющий 0 ‹= w‹ = 1). Каждое из ограничений линейно. Целевая функция нелинейна: это произведение весов ненулевых переменных, и цель состоит в том, чтобы максимизировать продукт.
Я начал с определения целевой функции как
m.Obj(-np.prod([1 - variables[i] + weights[i] * variables[i] for i in range(len(variables))]))
но тогда я бы наткнулся на APM model error: string > 15000 characters
. Поэтому я переключился на вспомогательные переменные, используя функцию if3
как
aux_variables = [m.if3(variables[i], weights[i], 1) for i in range(len(variables))]
m.Obj(-np.prod(aux_variables))
Единственные глобальные параметры, которые я устанавливаю вручную, находятся в следующем коде.
# initialize model
m = GEKKO(remote=False)
# set global variables
m.options.SOLVER = 1 # APOPT solver
# "APOPT is an MINLP solver"
# "APOPT is also the only solver that handles Mixed Integer problems."
m.options.IMODE = 3 # steady state optimization
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']
# initialize variables
variables = m.Array(m.Var, (number_of_vars), lb=0, ub=1, integer=True)
# set initial values
for var in variables:
var.value = 1
Вопрос:
Что еще я могу сделать с точки зрения глобальных параметров и формулировки целевой функции, чтобы оптимизировать производительность GEKKO
для этой конкретной проблемы?
В то же время я хотел бы GEKKO
получить достойные результаты.