Оптимизация останавливается преждевременно (MATLAB) - PullRequest
0 голосов
/ 27 марта 2012

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

Превышен номер оценки функции или

Превышен номер итерации.

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

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

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

Ответы [ 2 ]

1 голос
/ 27 марта 2012

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

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

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

Вы также можете попробовать , используя другой алгоритм в решателе .

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

0 голосов
/ 15 января 2014

Норма 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           

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...