Моделируемые опции отжига

Установите имитационные опции отжига в командной строке

Задайте опции путем создания options объект с использованием optimoptions функционировать следующим образом:

options = optimoptions(@simulannealbnd,'Param1',value1,'Param2',value2, ...);

Каждая опция в этом разделе указана по имени поля в options. Для примера, InitialTemperature относится к соответствующему полю options.

Опции графика

Опции Plot позволяют вам построить график данных из моделируемого решателя отжига во время его работы.

PlotInterval задает количество итераций между последовательными вызовами функции построения графика.

Отображение графика при вызове simulannealbnd в командной строке установите PlotFcn область options быть встроенным именем функции построения графика или указателем на функцию построения графика. Можно задать любой из следующих графиков:

  • 'saplotbestf' строит графики наилучшего значения целевой функции.

  • 'saplotbestx' строит графики текущей лучшей точки.

  • 'saplotf' строит график текущего значения функции.

  • 'saplotx' строит графики текущей точки.

  • 'saplotstopping' графики критерия остановки.

  • 'saplottemperature' строит графики температуры при каждой итерации.

  • @myfun строит график пользовательской функции построения графика, где myfun - имя вашей функции. Описание синтаксиса см. в разделе Структура функций построения графика.

Для примера, чтобы отобразить лучший целевой график, установите options следующим образом

options = optimoptions(@simulannealbnd,'PlotFcn','saplotbestf');

Чтобы отобразить несколько графиков, используйте синтаксис массива ячеек

options = optimoptions(@simulannealbnd,'PlotFcn',{@plotfun1,@plotfun2, ...});

где @plotfun1, @plotfun2и так далее указатели на функцию к функциям построения графика.

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

Структура функций построения графика

Первая линия функции построения графика имеет вид

function stop = plotfun(options,optimvalues,flag)

Входные параметры в функцию:

  • options - Опции, созданные с помощью optimoptions.

  • optimvalues - Структура, содержащая информацию о текущем состоянии решателя. Структура содержит следующие поля:

    • x - Current point

    • fval - Значение целевой функции в x

    • bestx - Лучшая точка, найденная до сих пор

    • bestfval - Значение целевой функции в лучшую точку

    • temperature - Текущая температура

    • iteration - Текущая итерация

    • funccount - Количество вычислений функции

    • t0 - Время запуска алгоритма

    • k - Параметр отжига

  • flag - Текущее состояние, в котором вызывается функция построения графика. Возможные значения для flag являются

    • 'init' - Состояние инициализации

    • 'iter' - Состояние итерации

    • 'done' - Окончательное состояние

Выходной аргумент stop предоставляет способ остановить алгоритм при текущей итерации. stop может иметь следующие значения:

  • false - Алгоритм переходит к следующей итерации.

  • true - Алгоритм завершается при текущей итерации.

Температурные Опции

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

  • InitialTemperature - Начальная температура в начале алгоритма. Значение по умолчанию является 100. Начальная температура может быть вектором с той же длиной, что и x, вектор неизвестных. simulannealbnd расширяет скаляр начальную температуру в вектор.

  • TemperatureFcn - Функция для обновления температурного режима. Позвольте k обозначить параметр отжига. (Параметр отжига совпадает с номером итерации до повторного отжига.) Опции:

    • 'temperatureexp' - Температура равна InitialTemperature * 0,95 ^ k. Это значение по умолчанию.

    • 'temperaturefast' - Температура равна InitialTemperature/ k.

    • 'temperatureboltz' - Температура равна начальной температуре/лн (k).

    • @myfun - Использует пользовательскую функцию, myfun, для обновления температуры. Синтаксис:

      temperature = myfun(optimValues,options)

      где optimValues - структура, описанная в Structure of the Функции Построения Графика. options создается с помощью optimoptions, или состоит из опций по умолчанию, если вы не создали опций. Оба параметра отжига optimValues.k и температура optimValues.temperature являются векторами с длиной, равной количеству элементов текущей точки x. Для примера - функция temperaturefast является:

      temperature = options.InitialTemperature./optimValues.k;

Настройки алгоритма

Настройки алгоритма задают алгоритмические специфические параметры, используемые в генерации новых точек при каждой итерации.

Параметры, которые могут быть заданы для simulannealbnd являются:

  • DataType - Тип данных для использования в целевой функции. Варианты:

    • 'double' (по умолчанию) - вектор типа double.

    • 'custom' - Любой другой тип данных. Вы должны предоставить 'custom' функцию отжига. Вы не можете использовать гибридную функцию.

  • AnnealingFcn - Функция, используемая для генерации новых точек для следующей итерации. Возможны следующие варианты:

    • 'annealingfast' - Шаг имеет температуру длины, с направлением равномерно случайным. Это значение по умолчанию.

    • 'annealingboltz' - Шаг имеет длину квадратный корень температуры, с направлением равномерно случайным.

    • @myfun - Использует пользовательский алгоритм отжига, myfun. Синтаксис:

      newx = myfun(optimValues,problem)
      где optimValues является структурой, описанной в Structure of the Выходная Функция, и problem - структура, содержащая следующую информацию:

      • objective: указатель на функцию в целевой функции

      • x0: начальная точка

      • nvar:: количество переменных принятия решений

      • lb: нижняя граница переменных принятия решений

      • ub: верхняя граница переменных принятия решений

      Для примера текущая позиция optimValues.x, и текущее значение целевой функции problem.objective(optimValues.x).

      Вы можете написать пользовательскую целевую функцию, изменив saannealingfcntemplate.m файл. Чтобы сохранить все итерации в границах, используйте пользовательскую функцию отжига вызова sahonorbounds в качестве конечной команды.

  • ReannealInterval - Число точек, принятых перед повторным отжигом. Значение по умолчанию 100.

  • AcceptanceFcn - Функция используется, чтобы определить, принята ли новая точка или нет. Варианты:

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

      11+exp(Δmax(T)),

      где И = новая цель - старая цель, и T - текущая температура. Поскольку и Α, и T положительны, вероятность принятия находится между 0 и 1/2. Меньшая температура приводит к меньшей вероятности принятия. Кроме того, более крупная И приводит к меньшей вероятности принятия.

    • @myfun - Пользовательская функция принятия, myfun. Синтаксис:

      acceptpoint = myfun(optimValues,newx,newfval);
      где optimValues - структура, описанная в структуре выходной функции, newx является ли точка, оцениваемая для принятия, и newfval - целевая функция в newx. acceptpoint является логическим, со значением true чтобы принять newx, и false чтобы отклонить newx.

Опции гибридной функции

Гибридная функция является другой функцией минимизации, которая запускается во время или в конце итераций решателя. HybridInterval задает интервал (если нет never или end), при котором вызывается гибридная функция. Можно задать гибридную функцию, используя HybridFcn опция. Возможны следующие варианты:

  • [] - Нет гибридной функции.

  • 'fminsearch' - Использует MATLAB® функция fminsearch для выполнения минимизации без ограничений.

  • 'patternsearch' - Использует patternsearch для выполнения минимизации с ограничениями или без ограничений.

  • 'fminunc' - Использует функцию Optimization Toolbox™ fminunc для выполнения минимизации без ограничений.

  • 'fmincon' - Использует функцию Optimization Toolbox fmincon для выполнения ограниченной минимизации.

Примечание

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

Можно задать отдельные опции для гибридной функции. Использовать optimset для fminsearch, или optimoptions для fmincon, patternsearch, или fminunc. Для примера:

hybridopts = optimoptions('fminunc','Display','iter','Algorithm','quasi-newton');
Включите гибридные опции в simulannealbnd options следующим образом:
options = optimoptions(@simulannealbnd,options,'HybridFcn',{@fminunc,hybridopts}); 
hybridopts должен существовать до того, как вы задаете options.

См. гибридную схему в Генетическом алгоритме для примера. Смотрите, когда использовать гибридную функцию.

Опции критерия остановки

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

  • FunctionTolerance - Алгоритм запускается до тех пор, пока не произойдет среднее изменение значения целевой функции в StallIterLim итерации меньше FunctionTolerance. Значение по умолчанию 1e-6.

  • MaxIterations - Алгоритм останавливается, если количество итераций превышает это максимальное количество итераций. Можно задать максимальное количество итераций в виде положительного целого числа или Inf. Inf является значением по умолчанию.

  • MaxFunctionEvaluations определяет максимальное количество вычислений целевой функции. Алгоритм останавливается, если количество вычислений функции превышает максимальное количество вычислений функции. Допустимый максимум 3000*numberofvariables.

  • MaxTime задает максимальное время в секундах, которое алгоритм запускает перед остановкой.

  • ObjectiveLimit - Алгоритм останавливается, если лучшее значение целевой функции меньше ObjectiveLimit.

Опции выходной функции

Выходные функции являются функциями, которые алгоритм вызывает при каждой итерации. Значение по умолчанию должно быть без выходной функции, []. Сначала необходимо создать выходную функцию с помощью синтаксиса, описанного в Structure of the Output Function.

Использование приложения Оптимизации:

  • Задайте Output function следующим @myfun, где myfun - имя вашей функции.

  • Чтобы передать дополнительные параметры в выходной функции, используйте Анонимные Функции.

  • Для нескольких выходных функций введите массив ячеек с указателями на выходные функции: {@myfun1,@myfun2,...}.

В командной строке:

  • options = optimoptions(@simulannealbnd,'OutputFcn',@myfun);

  • Для нескольких выходных функций введите cell-массив указателей на функцию:

    options = optimoptions(@simulannealbnd,'OutputFcn',{@myfun1,@myfun2,...});

Чтобы увидеть шаблон, который можно использовать для записи собственных выходных функций, введите

edit saoutputfcntemplate

в командной строке MATLAB.

Структура выходной функции

Выходная функция имеет следующий синтаксис вызова.

[stop,options,optchanged] = myfun(options,optimvalues,flag)

Функция имеет следующие входные параметры:

  • options - Опции, созданные с помощью optimoptions.

  • optimvalues - Структура, содержащая информацию о текущем состоянии решателя. Структура содержит следующие поля:

    • x - Current point

    • fval - Значение целевой функции в x

    • bestx - Лучшая точка, найденная до сих пор

    • bestfval - Значение целевой функции в лучшую точку

    • temperature - Текущая температура, вектор той же длины, что и x

    • iteration - Текущая итерация

    • funccount - Количество вычислений функции

    • t0 - Время запуска алгоритма

    • k - Параметр отжига, вектор той же длины, что и x

  • flag - Текущее состояние, в котором вызывается выходная функция. Возможные значения для flag являются

    • 'init' - Состояние инициализации

    • 'iter' - Состояние итерации

    • 'done' - Окончательное состояние

Передача дополнительных параметров объясняет, как предоставить дополнительные параметры выходной функции.

Выходная функция возвращает следующие аргументы:

  • stop - Предоставляет способ остановить алгоритм при текущей итерации. stop может иметь следующие значения:

    • false - Алгоритм переходит к следующей итерации.

    • true - Алгоритм завершается при текущей итерации.

  • options - Опции, измененные выходной функцией.

  • optchanged - Логический флаг, указывающий на внесение изменений в options. Это должно быть задано как true если опции изменены.

Параметры отображения

Используйте Display опция, чтобы указать, сколько информации отображается в командной строке во время работы алгоритма. Доступные опции:

  • off - Вывод не отображается. Это значение по умолчанию для options экспортировано из приложения Оптимизации.

  • iter - Информация отображается при каждой итерации.

  • diagnose - Информация отображается при каждой итерации. В сложение диагностика списков некоторые информации о задаче и опции, которые были изменены по умолчанию.

  • final - Отображается причина остановки. Это значение по умолчанию для опций, созданных с помощью optimoptions.

Оба iter и diagnose отобразить следующую информацию:

  • Iteration - Число итерации

  • f-count - Совокупное число вычислений целевых функций

  • Best f(x) - Лучшее значение целевой функции

  • Current f(x) - Текущее значение целевой функции

  • Mean Temperature - Среднее значение функции температуры