Поиск и устранение проблем оптимизации и советы

Эта таблица описывает типичные задачи оптимизации и предоставляет рекомендации для обработки их.

Проблема

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

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

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

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

Измените свою функцию, чтобы возвратить большое положительное значение для 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).

Похожие темы