Ваша терпимость должна быть установлена на любой допуск вам нужно. Установка его выше просто говорит оптимизатору остановиться раньше и на самом деле не ускоряет его. Это, как говорится, позволяя ему пойти на большую опору, может быть пустой тратой вашего времени, если не нужно.
Возможные способы сократить время, требуемое следующим образом:
- Используйте другой Оптимизатор
- Используйте другой градиент найти метод
- Ускорить ваша целевая функция
- Снизить количество дизайна переменные
- Выберите лучшее начальное предположение
- Использовать параллельную обработку
Градиентных методам
Как вы используете конечные разности, вам нужна (1 + числа проектных переменные) оценка вашей целевой функции, чтобы получить общую чувствительность.
Как сказал ev-br, если вы можете найти аналитическое решение для jacobian, тогда это не нужно. Исходя из того факта, что у вас есть 1500 переменных дизайна. Я предполагаю, что это не легко, хотя, если ваша целевая функция позволяет, автоматическая дифференциация может быть вариантом. У Iv был некоторый опыт работы с AlgoPy, на который вы могли бы посмотреть.
Цель скорости Функция
Из-за большого числа оценок целевой функции, это может быть простой подход. Еще раз, см. Ответ ev-br для таких вещей, как компиляция с использованием cython, и общая сокращающая сложность. Вы можете попробовать запустить часть кода, используя timeit, чтобы посмотреть, выгодны ли изменения.
Design переменные
Уменьшение числа переменных проектирования линейно снижает объективные вызовы функций, необходимых для конечных разностей. Значительно ли изменились ваши переменные?Может ли быть зафиксировано определенное значение? Можете ли вы получить какую-то функцию других?
Начальная Guess
В зависимости от вашей проблемы, вы можете быть в состоянии выбрать лучшую отправную точку, что будет означать ваше Оптимизатор «ближе» к окончательному решению. В зависимости от вашей проблемы вы также можете «перезапустить» свою оптимизацию из предыдущего результата.
параллелизме
Оценка разностная не должна быть сделана для того, чтобы вы могли написать свою собственную разностную функцию, а затем запустить вызовы параллельно с использованием multiprocessing класса. Эффективность этого зависит от вашей системы и количества доступных ядер.
Вы пытались увеличить размер шагового размера/разностную производную epsilon? Иногда не будет/мало прогресса, если он слишком мал, но это зависит от проблемы (гладкость - большой фактор). Также вы можете попробовать другие оптимизаторы. – sascha
Нужна только одна итерация? Вы должны быть счастливы. Похоже, вы не предоставляли градиенты, поэтому решатель делал конечные различия. Ваши функции кажутся дорогими для оценки, а отсутствие доступных градиентов делает эту проблему не очень подходящей для этого решателя. Возможно, вам придется посмотреть на производный бесплатный решатель. –
Существуют ли другие ограниченные библиотеки оптимизации для Python, которые работают с нелинейными уравнениями? Я их не видел. –