У меня проблема оптимизации, отличная от Lenear, с ограничением и верхними / нижними границами, поэтому с scipy я должен использовать SLSQP. Проблема явно не выпуклая. Я получил якобиан для правильной работы как целевой функции, так и функции ограничения (результаты хорошие / быстрые до 300 входных векторов). Все функции векторизованы и настроены на очень быструю работу. Проблема в том, что использование 1000+ входных векторов занимает много времени, хотя я вижу, что минимизатор не вызывает много моих функций (цель / ограничение / градиенты) и, кажется, тратит большую часть своего времени на внутреннюю обработку. Я где-то читал, что производительность SLSQP равна O (n ^ 3).
Есть ли лучшая / более быстрая реализация SLSQP или другой метод для этого типа проблемы для Python? Я попробовал nlopt и каким-то образом возвращает неправильные результаты, учитывая те же самые функции, которые я использую в scipy (с оболочкой для адаптации к его сигнатуре метода). Мне также не удалось использовать ipopt с пакетом pyipopt, не могу заставить рабочие двоичные файлы ipopt работать с оболочкой python.
ОБНОВЛЕНИЕ: если это помогает, моя входная переменная в основном представляет собой вектор кортежей (x, y) или точек на 2D-поверхности, представляющих координаты. С 1000 точками я получаю 2000 тусклых входных векторов. Функция, которую я хочу оптимизировать, вычисляет оптимальное положение точек между собой с учетом их отношений и других ограничений. Так что проблема не редкая.
Спасибо...