Я использую IPOPT внутри Julia. Моя целевая функция будет вызывать ошибку для определенных значений параметров (в частности, хотя я предполагаю, что это не имеет значения, это связано с разложением Холески ковариационной матрицы и, следовательно, требует, чтобы ковариационная матрица была положительно-определенной). Таким образом, я нелинейно ограничиваю параметры, чтобы они не могли создать ошибку. Несмотря на это ограничение, IPOPT по-прежнему настаивает на оценке целевой функции в параметрах, которые заставляют мою объективную функцию выдавать ошибку. Это приводит к сбою моего сценария, что приводит к страданиям и боли.Почему IPOPT оценивает объективную функцию, несмотря на нарушение ограничений?
Мне интересно, почему, в общем, IPOPT будет оценивать функцию по параметрам, которые нарушают ограничения. (Я убедился, что он действительно проверяет ограничения перед оценкой функции.) Если возможно, я хотел бы знать, как я могу остановить это.
Я установил параметр «bound_relax_factor» IPOPT в ноль; это не помогает. Я понимаю, что я мог бы попросить целевую функцию вернуть NaN
вместо того, чтобы бросать ошибку, но когда я делаю IPOPT, похоже, становится еще более запутанным и не заканчивается сходимостью. Бедняга.
Я рад предоставить примерный код, если это поможет.
Большое спасибо заранее :) :)
EDIT:
Комментатор предложил мне спросить мою целевую функцию, чтобы вернуть плохой объективное значение, когда ограничения нарушаются. К сожалению, это то, что происходит, когда я делаю:
Я не уверен, почему Ipopt бы с точки оценки в 2.0016x10^2 в точке оценивая при 10^10 - я переживаю что-то довольно фундаментальное о IPOPT Я не понимаю.
Установка «constr_viol_tol» и «allowed_constr_viol_tol» на их минимальные значения не оказывает заметного влияния на оптимизацию и не «сдерживает» мои параметры (то есть гарантирует, что они не могут быть где-то рядом с неприемлемым значением).
Возможно, вместо того, чтобы «NaN» вместо решения «NaN» вернуть довольно плохое объективное значение, когда ограничения нарушены, еще лучше ухудшить его, поскольку нарушение увеличивается. –
Кроме того, параметры IPOPT 'constr_viol_tol' и' allowed_constr_viol_tol' могут иметь значение. –
Спасибо за ваши комментарии @DanGetz - я ответил в редактировании на мой оригинальный вопрос :) – Wilbur