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

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

Проблема

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

Решение, найденное 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).

Похожие темы