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

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

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

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

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

Постройте опции

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

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)

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

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

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

    • x CurrentPoint

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

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

    • bestfval — Значение целевой функции в лучшем случае указывает

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

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

    • funccount — Количество функциональных оценок

    • t0 Время начала для алгоритма

    • k Отжиг параметра

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

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

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

    • сделанный Конечное состояние

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

  • ложь Алгоритм продолжается к следующей итерации.

  • tRUE Алгоритм останавливается в текущей итерации.

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

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

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

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

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

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

    • 'temperatureboltz' — Температура равна InitialTemperature / ln (k).

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

      temperature = myfun(optimValues,options)

      где optimValues является структурой, описанной в Структуре Функций построения графика. options или создается с optimoptions или состоит из опций по умолчанию, если вы не создали опций. И параметр отжига optimValues.k и температурный optimValues.temperature являются векторами с длиной, равной числу элементов текущей точки x. Например, функциональный temperaturefast:

      temperature = options.InitialTemperature./optimValues.k;

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

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

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

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

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

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

  • AnnealingFcn — Функция раньше генерировала новые точки для следующей итерации. Выбор:

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

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

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

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

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

      • 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');
Включайте гибридные опции в options simulannealbnd можно следующим образом:
options = optimoptions(@simulannealbnd,options,'HybridFcn',{@fminunc,hybridopts}); 
hybridopts должен существовать, прежде чем вы установите options.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

edit saoutputfcntemplate

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

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

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

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

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

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

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

    • x CurrentPoint

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

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

    • bestfval — Значение целевой функции в лучшем случае указывает

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

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

    • funccount — Количество функциональных оценок

    • t0 Время начала для алгоритма

    • k Отжигая параметр, вектор та же длина как x

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

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

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

    • сделанный Конечное состояние

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

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

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

    • ложь Алгоритм продолжается к следующей итерации.

    • tRUE Алгоритм останавливается в текущей итерации.

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

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

Параметры экрана

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

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

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

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

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

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

  • Iteration — Номер итерации

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

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

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

  • Mean Temperature — Значение функции средней температуры