2016-04-28 2 views
3

Я использую IPOPT внутри Julia. Моя целевая функция будет вызывать ошибку для определенных значений параметров (в частности, хотя я предполагаю, что это не имеет значения, это связано с разложением Холески ковариационной матрицы и, следовательно, требует, чтобы ковариационная матрица была положительно-определенной). Таким образом, я нелинейно ограничиваю параметры, чтобы они не могли создать ошибку. Несмотря на это ограничение, IPOPT по-прежнему настаивает на оценке целевой функции в параметрах, которые заставляют мою объективную функцию выдавать ошибку. Это приводит к сбою моего сценария, что приводит к страданиям и боли.Почему IPOPT оценивает объективную функцию, несмотря на нарушение ограничений?

Мне интересно, почему, в общем, IPOPT будет оценивать функцию по параметрам, которые нарушают ограничения. (Я убедился, что он действительно проверяет ограничения перед оценкой функции.) Если возможно, я хотел бы знать, как я могу остановить это.

Я установил параметр «bound_relax_factor» IPOPT в ноль; это не помогает. Я понимаю, что я мог бы попросить целевую функцию вернуть NaN вместо того, чтобы бросать ошибку, но когда я делаю IPOPT, похоже, становится еще более запутанным и не заканчивается сходимостью. Бедняга.

Я рад предоставить примерный код, если это поможет.

Большое спасибо заранее :) :)

EDIT:

Комментатор предложил мне спросить мою целевую функцию, чтобы вернуть плохой объективное значение, когда ограничения нарушаются. К сожалению, это то, что происходит, когда я делаю: Ipopt running indefinitely at bad objective value

Я не уверен, почему Ipopt бы с точки оценки в 2.0016x10^2 в точке оценивая при 10^10 - я переживаю что-то довольно фундаментальное о IPOPT Я не понимаю.

Установка «constr_viol_tol» и «allowed_constr_viol_tol» на их минимальные значения не оказывает заметного влияния на оптимизацию и не «сдерживает» мои параметры (то есть гарантирует, что они не могут быть где-то рядом с неприемлемым значением).

+0

Возможно, вместо того, чтобы «NaN» вместо решения «NaN» вернуть довольно плохое объективное значение, когда ограничения нарушены, еще лучше ухудшить его, поскольку нарушение увеличивается. –

+0

Кроме того, параметры IPOPT 'constr_viol_tol' и' allowed_constr_viol_tol' могут иметь значение. –

+0

Спасибо за ваши комментарии @DanGetz - я ответил в редактировании на мой оригинальный вопрос :) – Wilbur

ответ

3

Единственными ограничениями, которые Ipopt гарантированно удовлетворяет на всех промежуточных итерациях, являются простые верхние и нижние границы переменных. Любое другое линейное или нелинейное ограничение равенства или неравенства не обязательно будет выполняться до тех пор, пока решатель не закончит сходиться на последней итерации (если он может добраться до точки, которая удовлетворяет условиям завершения). Гарантируя, что промежуточные итерации всегда возможны при наличии произвольного невыпуклого равенства, а ограничения неравенства не поддаются обработке. Направление шага Ньютона основано на локальной информации о производной первого и второго порядка, поэтому будет приближением и может покинуть пространство допустимых точек, если проблема имеет нетривиальную кривизну. Подумайте о пространстве точек, где x * y == constant в качестве примера.

Вы должны переформулировать свою проблему, чтобы избежать необходимости оценивать объективные или ограниченные функции в недопустимых точках. Например, вместо того, чтобы брать факторизацию Холецкого ковариационной матрицы, построенной из ваших данных, ввести нижнюю треугольную матрицу L и диагональную матрицу D. Наложить ограничения на нижнюю границу D[i, i] >= 0 для всех i in 1:size(D,1) и ограничения нелинейного равенства L * D * L' == A где A - ваша ковариационная матрица. Затем используйте L * sqrtm(D) в любом месте, где вам нужно работать с факторизацией Cholesky (это возможно полуопределенная факторизация, поэтому больше модифицированного представления Холецкого, чем классическая строго положительная определенная факторизация L * L').

Обратите внимание, что если ваша проблема является выпуклой, то, вероятно, существует специальная формулировка, согласно которой решатель коники будет более эффективен при решении, чем универсальный нелинейный решатель, такой как Ipopt.

Смежные вопросы