exponenta event banner

Устранение неполадок и советы по оптимизации

В этой таблице описываются типичные проблемы оптимизации и приводятся рекомендации по их устранению.

Проблема

Рекомендация

Решение, найденное fminbnd или fminsearch не является глобальным минимумом. Глобальный минимум имеет наименьшее значение целевой функции среди всех точек в пространстве поиска.

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

Невозможно оценить целевую функцию f(x) в некоторых точках x. Такие точки называют неосуществимыми.

Измените функцию, чтобы вернуть большое положительное значение для f(x) в неосуществимых точках x.

Процедура минимизации, по-видимому, входит в бесконечный цикл или возвращает решение, которое не является минимальным (или не равно нулю, в случае fzero).

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

options = optimset('FunValCheck','on')

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

Решатель занимает много времени.

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

Иногда вы можете решить сложную задачу, используя эволюционный подход. Во-первых, решить проблемы с меньшим количеством независимых переменных. Используйте решения этих более простых задач в качестве отправной точки для более сложных задач, используя соответствующее сопоставление. Кроме того, иногда можно ускорить решение, используя более простые объективные функции и менее строгие условия остановки на начальных этапах задачи оптимизации.

Неясно, что делает решатель.

Чтобы увидеть, что делает решатель при итерациях:

fminsearch не удается достичь решения.

fminsearch может не достичь решения по различным причинам.

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

  • Неподходящие критерии остановки. Если значение, указанное для TolFun или TolX слишком мал, fminsearch может не понять, когда он достиг решения. Если значение слишком велико, fminsearch может остановиться далеко от решения.

  • Плохая начальная точка. Попробуйте запустить fminsearch из различных начальных точек.

  • Недостаточно итераций. Если решатель исчерпал итерации или застрял, попробуйте перезапустить fminsearch с его конечной точки для достижения лучшего решения. Иногда fminsearch достигает лучшего решения при увеличении значения MaxFunEvals и MaxIter опции из их значения по умолчанию 200*length(x0).

Связанные темы