Поскольку один из моих ответов был процитирован, я попытаюсь уточнить, почему я предложил использовать IPOPT вместо MINPACK.
Мои возражения против использования MINPACK не имеют ничего общего с алгоритмами, которые использует MINPACK, и не имеют ничего общего с их реализацией. Мое основное возражение заключается в том, что программное обеспечение датируется 1980 годом, а последнее обновление было в 1999 году. Хорхе Море на пенсии; Я сомневаюсь, что он или любой другой автор программного обеспечения больше следят за ним, и нет команды людей, активно поддерживающих его. Единственная документация, которую я могу найти по программному обеспечению, - это оригинальный технический отчет Argonne 1980 года, написанный Хорхе Море и другими авторами MINPACK. (Главы 1-3 можно найти здесь , а главу 4 можно найти здесь.) После поиска в исходном коде MINPACK и просмотра документации (PDF-файлы являются отсканированными изображениями и не могут быть найдены), я не вижу никаких вариантов, чтобы приспособиться к ограничениям. Поскольку первоначальный плакат о нелинейной проблеме наименьших квадратов хотел решить ограниченную нелинейную проблему наименьших квадратов, MINPACK даже не решит эту проблему.
Если вы посмотрите на список рассылки IPOPT, некоторые пользователи отметят, что производительность пакета для задач нелинейного наименьших квадратов (NLS) смешана по сравнению с алгоритмами Левенберга-Марквардта и более специализированными алгоритмами NLS (см. Здесь , здесь и здесь ). Производительность IPOPT относительно алгоритмов NLS, конечно, зависит от проблемы. Учитывая эту обратную связь с пользователем, IPOPT представляется разумной рекомендацией относительно алгоритмов NLS.
Тем не менее, вы делаете хорошее замечание, что алгоритмы NLS должны быть исследованы. Я согласен. Я просто считаю, что следует использовать пакет, более современный, чем MINPACK, потому что я считаю, что он будет работать лучше, будет более удобным и поддерживаться. Ceres кажется интересным кандидатом, но сейчас он не может справиться с ограниченными проблемами. ТАОбудет работать над задачами наименьших квадратов с ограничением по квадратам, хотя он не реализует классический Левенберг-Марквардт, но вместо этого реализует алгоритм без производных. Алгоритм без производных, вероятно, будет хорошо работать для крупномасштабных задач, но я не буду использовать его для мелкомасштабных задач. Я не мог найти никаких других пакетов, которые внушали бы большую уверенность в их разработке программного обеспечения. Например, GALAHAD, похоже, не использует контроль версий или какое-либо автоматическое тестирование, на первый взгляд. МИНПАК, похоже, тоже этого не делает. Если у вас есть опыт работы с MINPACK или рекомендации относительно лучшего программного обеспечения, я весь в ушах.
Имея все это в виду, возвращаясь к цитате моего комментария:
Любая система уравнений эквивалентна задаче оптимизации, поэтому методы оптимизации, основанные на Ньютоне, очень похожи на методы, основанные на Ньютоне, для решения систем нелинейных уравнений.
Лучший комментарий, вероятно, что-то вроде:
nng(x)=0
Это утверждение верно даже для решения систем уравнений при ограничениях. Я не знаю ни одного алгоритма, который считается "решателем уравнений" для случая, когда существуют ограничения на переменные. Обычный подход, о котором я знаю, возможно, из-за нескольких семестров курсов по оптимизации и исследований в лаборатории по оптимизации, заключается во включении ограничений на систему уравнений в формулировку оптимизации. Если бы вы попытались использовать ограничения в схеме, подобной Ньютону-Рафсону, для решения уравнений, вы, вероятно, в конечном итоге получили бы метод прогнозируемого градиента или прогнозируемой области доверия, очень похожий на методы, используемые в ограниченной оптимизации.
Если данная нелинейная система является условием оптимальности первого порядка для задачи оптимизации, то мы часто можем создать более надежный алгоритм, используя эту информацию. Например, рассмотрим уравнение
Это явно имеет уникальный минимум, и мы ожидаем, что наш метод оптимизации найдет его независимо от отправной точки. Но если мы рассмотрим только условия оптимальности первого порядка, мы ищем решение из [Wolfram Alpha]x ∇f(x)=0
который имеет уникальное решение, но многие методы поиска корня могут застрять на локальном минимуме.
Если переформулирует новую задачу оптимизации для минимизации нормы градиента в квадрате, мы ищем глобальный минимум из [Wolfram Alpha] , который имеет несколько локальных минимумов.x ∥∇f(x)∥2
Подводя итог, мы начали с задачи оптимизации, у которой было уникальное решение, которое мы могли гарантировать, что метод найдет. Мы переформулировали ее как нелинейную проблему поиска корней, которая имела уникальное решение, которое мы могли бы идентифицировать локально, но метод поиска корней (например, Ньютон) мог бы стагнировать до достижения этой цели. Затем мы переформулировали проблему поиска корня как проблему оптимизации, которая имела несколько локальных решений (никакая локальная мера не может быть использована для определения того, что мы не достигли глобального минимума).
В общем, каждый раз, когда мы конвертируем задачу из оптимизации в поиск корней или наоборот, мы делаем доступные методы и связанные с ними гарантии сходимости более слабыми. Фактическая механика методов часто очень похожа, поэтому можно использовать много кода между нелинейными решателями и оптимизацией.
источник