Я пытаюсь решить задачу оптимизации, состоящую в том, чтобы найти глобальный максимум высокомерной (10+) монотонной функции (как в монотонной во всех направлениях).Ограничения таковы, что они сокращают пространство поиска плоскостями.
Я кодировал все это в pyomo
, и я использую решатель ipopt
.Я уверен, что в большинстве случаев он успешно приближается к глобальному оптимальному.Но если я немного поиграюсь с ограничениями, то увижу, что это иногда сходится к локальным минимумам.
Это похоже на компромисс между разведкой и эксплуатацией.Я рассмотрел параметры, которые можно передать на ipopt
, и список настолько длинный, что я не могу понять, с какими параметрами играть, чтобы помочь сходимостью к глобальным минимумам.
edit:
Два намека на решение:
мои переменные определялись с очень бесконечными границами, например, bounds=(0,None)
для перемещения по бесконечной полуоси,Я наложил на них две конечные границы.
Я сейчас использую несколько стартов с:
opt = SolverFactory('multistart')
results = opt.solve(self.model, solver='ipopt', strategy='midpoint_guess_and_bound')
Пока это сделало мойдоволен конвергенцией.