2012-03-26 8 views
0

Я стараюсь изо всех сил разобраться с fmincon в MATLAB. Когда я вызываю функцию, я получаю один из двух следующих ошибок:Оптимизация останавливается преждевременно (MATLAB)

Количество оценки функции превышены, или

Количество итераций превышена.

И когда я смотрю на решение до сих пор, это далеко от намеченного (я знаю, потому что я создал минимальный вектор).

Теперь, даже если я увеличиваю любое ограничение допуска или максимальное количество итераций, я все равно получаю ту же проблему.

Любая помощь приветствуется.

+1

Какое измерение? вы пытались начать с известного решения? вы предоставляете градиент и гессиан? – Memming

+0

Нет, я предоставляю матрицу равенства и вектор: Aeq и beq. Теперь я рассматриваю проблему минимизации L1 только с ограничениями равенства, но все же симуляция занимает много времени и дает неправильные результаты (нет, где близко), или решатель производит ошибку памяти. Я имею в виду, как JPEG может сжать изображение в 1 мс с помощью этой памяти/времени? – ToniAz

ответ

1

Во-первых, если ваша проблема может быть реализована как линейное или квадратичное программирование, сделайте это первым.

В противном случае вы пробовали посеять его с разными начальными значениями x0? Если он начинается в плохом месте, может оказаться гораздо труднее добраться до оптимального.

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

Вы также можете попробовать using a different algorithm in the solver.

В принципе, fmincon по умолчанию практически не имеет информации о функции, которую он пытается оптимизировать, и предоставление большего количества может быть чрезвычайно полезным. Если вы расскажете нам больше о целевой функции, мы сможем дать больше советов.

+0

Ты сказал все, что я собирался сказать, но лучше. +1 и браво. –

+0

@Dougal «» «Во-первых, если ваша проблема на самом деле могут быть отлиты как линейные или квадратичного программирования, сделать первый» «» Уже сделано Я начинаю со всеми нулевыми векторами, хмм, я Я попробую это сделать. Это норма L1, я не знаю, является ли она дифференцируемой. Итак, объектная функция на самом деле представляет собой вектор столбца пикселей. Поэтому я пытаюсь применить эту функцию ко всем столбцам изображения. Это нечто, связанное с атомным разложением. – ToniAz

+0

@ToniAz Я действительно не понимаю, что вы имеете в виду. Если это проблема с линейным или квадратичным программированием, вы не должны использовать 'fmincon ', а вместо этого' linprog' или 'quadprog'. Кроме того, если ваша целевая функция действительно является нормой L1, вы можете сделать это в закрытой форме: минимум '|| x - q || _1' является просто' q' .... Но норма L1 дифференцируема (за исключением при 0); частичный w.r.t. компонент - это просто производная от абсолютной величины этой составляющей, то есть ее знаковый момент внутренней производной: для линейной нормы L1 это всего лишь 1 или -1. Итак, 'grad_x (|| x || _1)' - это просто знак (x) '. – Dougal

0

L1 норма не дифференцируема. Это может затруднить сближение алгоритма с точкой, в которой один из остатков равен нулю. Я подозреваю, что поэтому количество итераций ограничено. Если исходная задача

min norm(residual(x),1) 

s.t. Aeq*x=beq 

вы можете переформулировать проблему дифференцируемой следующим

min sum(b) 

s.t. -b(i)<=residual(x,i)<=b(i) 

     Aeq*x=beq   

где остаточный (х, я) является я-й остаток, х исходный вектор неизвестных, и b - еще один неизвестный вектор границ, который вы добавляете к проблеме.

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