surrogateopt

Суррогатная оптимизация для глобальной минимизации длительных целевых функций

Описание

surrogateopt функция является глобальным решателем для длительных целевых функций.

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

пример

x = surrogateopt(fun,lb,ub) поиски глобального минимума fun(x) в области lb <= x <= ub.

Примечание

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

пример

x = surrogateopt(fun,lb,ub,intcon) требует, чтобы переменные перечислили в intcon примите целочисленные значения.

пример

x = surrogateopt(fun,lb,ub,options)или x = surrogateopt(fun,lb,ub,intcon,options) изменяет поисковую процедуру с помощью опций в options.

пример

x = surrogateopt(problem) поиски минимума для problem, структура описана в problem.

пример

x = surrogateopt(checkpointFile) продолжает запускать оптимизацию от состояния в сохраненном файле контрольной точки. Смотрите работу с Файлами контрольной точки.

пример

x = surrogateopt(checkpointFile,opts) продолжает запускать оптимизацию от состояния в сохраненном файле контрольной точки и заменяет опции в checkpointFile с теми в opts. Смотрите файл контрольной точки.

пример

[x,fval] = surrogateopt(___) также возвращает лучшее (наименьшее) значение целевой функции, найденной решателем, с помощью любой из комбинаций входных аргументов в предыдущих синтаксисах.

пример

[x,fval,exitflag,output] = surrogateopt(___) также возвращает exitflag, целое число, описывающее причину решатель, остановленный, и output, структура, описывающая процедуру оптимизации.

пример

[x,fval,exitflag,output,trials] = surrogateopt(___) также возвращает структуру, содержащую все оцененные точки и значения целевой функции в тех точках.

Примеры

свернуть все

Ищите минимум верблюда с шестью горбами, назад функционируют в области -2.1 <= x(i) <= 2.1. Эта функция имеет два глобальных минимума со значением целевой функции -1.0316284... и четыре локальных минимума с более высокими значениями целевой функции.

rng default % For reproducibility
fun = @(x)(4*x(:,1).^2 - 2.1*x(:,1).^4 + x(:,1).^6/3 ...
    + x(:,1).*x(:,2) - 4*x(:,2).^2 + 4*x(:,2).^4);
lb = [-2.1,-2.1];
ub = -lb;
x = surrogateopt(fun,lb,ub)

Surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.
x = 1×2

   -0.0900    0.7129

Найдите минимум ps_example функция для двумерной переменной x чей первый компонент ограничивается целочисленными значениями, и все компоненты между –5 и 5.

intcon = 1;
rng default % For reproducibility
fun = @ps_example;
lb = [-5,-5];
ub = [5,5];
x = surrogateopt(fun,lb,ub,intcon)

Surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.
x = 1×2

   -5.0000   -0.0004

Минимизируйте верблюда с шестью горбами, назад функционируют в области -2.1 <= x(i) <= 2.1. Эта функция имеет два глобальных минимума со значением целевой функции -1.0316284... и четыре локальных минимума с более высокими значениями целевой функции.

Чтобы систематически искать область, используйте обычную сетку начальных точек. Установите 120 как максимальное количество функциональных оценок. Используйте 'surrogateoptplot' функция plot. Изучать 'surrogateoptplot' постройте, смотрите, Интерпретируют surrogateoptplot.

rng default % For reproducibility
fun = @(x)(4*x(:,1).^2 - 2.1*x(:,1).^4 + x(:,1).^6/3 ...
    + x(:,1).*x(:,2) - 4*x(:,2).^2 + 4*x(:,2).^4);
lb = [-2.1,-2.1];
ub = -lb;
[Xpts,Ypts] = meshgrid(-3:3);
startpts = [Xpts(:),Ypts(:)];
options = optimoptions('surrogateopt','PlotFcn','surrogateoptplot',...
    'InitialPoints',startpts,'MaxFunctionEvaluations',120);
x = surrogateopt(fun,lb,ub,options)

Surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.
x = 1×2

   -0.0899    0.7132

Создайте структуру задачи, представляющую верблюда с шестью горбами, назад функционируют в области -2.1 <= x(i) <= 2.1. Установите 120 как максимальное количество функциональных оценок.

rng default % For reproducibility
fun = @(x)(4*x(:,1).^2 - 2.1*x(:,1).^4 + x(:,1).^6/3 ...
    + x(:,1).*x(:,2) - 4*x(:,2).^2 + 4*x(:,2).^4);
options = optimoptions('surrogateopt','MaxFunctionEvaluations',120);
problem = struct('objective',fun,...
    'lb',[-2.1,-2.1],...
    'ub',[2.1,2.1],...
    'options',options,...
    'solver','surrogateopt');
x = surrogateopt(problem)

Surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.
x = 1×2

   -0.0930    0.7155

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

rng default % For reproducibility
fun = @(x)(4*x(:,1).^2 - 2.1*x(:,1).^4 + x(:,1).^6/3 ...
    + x(:,1).*x(:,2) - 4*x(:,2).^2 + 4*x(:,2).^4);
lb = [-2.1,-2.1];
ub = -lb;
options = optimoptions('surrogateopt','Display','off','PlotFcn',[]);
[x,fval] = surrogateopt(fun,lb,ub,options)
x = 1×2

   -0.0900    0.7129

fval = -1.0316

Контролируйте суррогатный процесс оптимизации путем запроса того surrogateopt возвратите больше выходные параметры. Используйте 'surrogateoptplot' функция plot. Изучать 'surrogateoptplot' постройте, смотрите, Интерпретируют surrogateoptplot.

rng default % For reproducibility
fun = @(x)(4*x(:,1).^2 - 2.1*x(:,1).^4 + x(:,1).^6/3 ...
    + x(:,1).*x(:,2) - 4*x(:,2).^2 + 4*x(:,2).^4);
lb = [-2.1,-2.1];
ub = -lb;
options = optimoptions('surrogateopt','PlotFcn','surrogateoptplot');
[x,fval,exitflag,output] = surrogateopt(fun,lb,ub,options)

Surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.
x = 1×2

   -0.0900    0.7129

fval = -1.0316
exitflag = 0
output = struct with fields:
    elapsedtime: 46.1596
      funccount: 200
       rngstate: [1x1 struct]
        message: 'Surrogateopt stopped because it exceeded the function evaluation limit set by ...'

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

rng default % For reproducibility
fun = @(x)(4*x(:,1).^2 - 2.1*x(:,1).^4 + x(:,1).^6/3 ...
    + x(:,1).*x(:,2) - 4*x(:,2).^2 + 4*x(:,2).^4);
lb = [-2.1,-2.1];
ub = -lb;
options = optimoptions('surrogateopt','MaxFunctionEvaluations',20);
[x,fval,exitflag,output,trials] = surrogateopt(fun,lb,ub,options);

Surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.

Оптимизируйте еще для 20 функциональных оценок, начинающих с ранее оцененных точек.

options.InitialPoints = trials;
[x,fval,exitflag,output,trials] = surrogateopt(fun,lb,ub,options);

Surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.

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

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

opts = optimoptions('surrogateopt','CheckpointFile','checkfile.mat');

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

rng default % For reproducibility
fun = @(x)(4*x(:,1).^2 - 2.1*x(:,1).^4 + x(:,1).^6/3 ...
    + x(:,1).*x(:,2) - 4*x(:,2).^2 + 4*x(:,2).^4);
lb = [-2.1,-2.1];
ub = -lb;
opts.MaxFunctionEvaluations = 30;
[x,fval,exitflag,output] = surrogateopt(fun,lb,ub,opts)

Surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.
x = 1×2

    0.2575   -0.7963

fval = -0.8771
exitflag = 0
output = struct with fields:
       rngstate: [1×1 struct]
      funccount: 30
    elapsedtime: 12.0128
        message: 'Surrogateopt stopped because it exceeded the function evaluation limit set by ↵'options.MaxFunctionEvaluations'.'

Установите опции использовать 100 функциональных оценок (что означает еще 70, чем уже сделанный), и перезапустите оптимизацию.

opts.MaxFunctionEvaluations = 100;
[x2,fval2,exitflag2,output2] = surrogateopt('checkfile.mat',opts)

Surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.
x2 = 1×2

    0.0900   -0.7130

fval2 = -1.0316
exitflag2 = 0
output2 = struct with fields:
       rngstate: [1×1 struct]
      funccount: 100
    elapsedtime: 36.7726
        message: 'Surrogateopt stopped because it exceeded the function evaluation limit set by ↵'options.MaxFunctionEvaluations'.'

Входные параметры

свернуть все

Целевая функция, определенный функцией указатель или имя функции. fun принимает отдельный аргумент x, где x вектор-строка и возвращает действительный скалярный fval = fun(x).

Типы данных: function_handle | char | string

Нижние границы, заданные как конечный вектор действительных чисел. lb представляет нижние границы, поэлементные в lb  x  ub. Длины lb и ub должно быть равно количеству переменных что fun принимает.

Внимание

Несмотря на то, что lb является дополнительным для большинства решателей, lb необходимый вход для surrogateopt.

Примечание

surrogateopt позволяет равные записи в lb и ub. Смотрите Детали Суррогата Построения. Для каждого i в intcon, у вас должен быть ceil(lb(i)) <= floor(ub(i)).

Пример: lb = [0;-20;4] средние значения x(1) ≥ 0, x(2) ≥ -20, x(3) ≥ 4.

Типы данных: double

Верхние границы, заданные как конечный вектор действительных чисел. ub представляет верхние границы, поэлементные в lb  x  ub. Длины lb и ub должно быть равно количеству переменных что fun принимает.

Внимание

Несмотря на то, что ub является дополнительным для большинства решателей, ub необходимый вход для surrogateopt.

Примечание

surrogateopt позволяет равные записи в lb и ub. Смотрите Детали Суррогата Построения. Для каждого i в intcon, у вас должен быть ceil(lb(i)) <= floor(ub(i)).

Пример: ub = [10;-20;4] средние значения x(1) ≤ 10, x(2) ≤ -20, x(3) ≤ 4.

Типы данных: double

Целочисленные переменные, заданные как вектор положительных целых чисел со значениями от 1 к количеству переменных задачи. Каждое значение в intcon представляет x компонент, который с целочисленным знаком.

Пример: указывать что ровные записи в x с целочисленным знаком, набор intcon к 2:2:nvars.

Типы данных: double

Опции, заданные как выход optimoptions.

Для получения дополнительной информации см. Суррогатные Опции Оптимизации.

ОпцияОписаниеЗначения
CheckpointFile

Имя файла для выгрузки и перезапуска оптимизации. Файл имеет .mat тип данных. Смотрите работу с Файлами контрольной точки.

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

Имя файла или путь к файлу, данный как строка или символьный массив. Если вы задаете имя файла без пути, surrogateopt сохраняет файл контрольной точки в текущей папке.

Display

Level of display возвращен в командной строке.

  • 'final' (значение по умолчанию) — Выходное сообщение в конце итераций.

  • 'off' или эквивалентный 'none' — Никакое отображение.

  • 'iter' Итеративное отображение; смотрите Отображение Командной строки.

InitialPointsНачальные точки для решателя.Матрица начальных точек, где каждая строка является одной точкой. Или, структура с полем X, чье значение является матрицей начальных точек, и опционально полем Fval, чье значение является вектором, содержащим значения целевой функции при начальных точках. Смотрите Управление Алгоритмом. Значение по умолчанию: [].
MaxFunctionEvaluationsМаксимальное количество оценок целевой функции, останавливающегося критерия.Положительное целое число. Значением по умолчанию является max(200,50*nvar), где nvar количество переменных задачи.
MaxTimeМаксимальное время выполнения в секундах. Фактическое время выполнения может превысить MaxTime из-за времени, требуемого выполнять целевую функцию или из-за задержек параллельной обработки.Положительная скалярная величина. Значением по умолчанию является Inf.
MinSampleDistanceМинимальное расстояние между испытательными точками сгенерировано адаптивным сэмплером. См. Суррогатный Алгоритм Оптимизации.Положительная скалярная величина. Значением по умолчанию является 1e-3.
MinSurrogatePointsМинимальное количество случайной выборки указывает, чтобы создать в начале суррогатной фазы создания. См. Суррогатный Алгоритм Оптимизации.Целое число, по крайней мере, nvar + 1. Значением по умолчанию является max(20,2*nvar), где nvar количество переменных задачи.
ObjectiveLimitДопуск на значении целевой функции. Если расчетное значение целевой функции меньше чем или равно ObjectiveLimit, остановки алгоритма.Двойное скалярное значение. Значением по умолчанию является -Inf.
OutputFcnВыходная функция, чтобы сообщить относительно решателя прогрессирует или остановить решатель. Смотрите Выходную функцию.Указатель на функцию или cell-массив указателей на функцию. Значение по умолчанию: [].
PlotFcn

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

Указатель на функцию или cell-массив указателей на функцию. Встроенные функции построения графика:

  • @optimplotfval (значение по умолчанию) — График лучшее значение целевой функции, найденное как линейный график.

  • @optimplotx — Постройте лучшее решение, найденное как столбчатая диаграмма.

  • @surrogateoptplot — Постройте значение целевой функции в каждой итерации, показав, какая фаза алгоритма производит значение и оптимальное значение, найденное и в этой фазе и в целом. Смотрите Интерпретируют surrogateoptplot.

UseParallelБулево значение, указывающее, вычислить ли значения целевой функции параллельно.Булевская переменная. Значением по умолчанию является false. Для алгоритмических деталей смотрите Параллель surrogateopt Алгоритм.

Пример: options = optimoptions('surrogateopt','Display','iter','UseParallel',true)

Структура задачи, заданная как структура с этими полями:

  • objective — Целевая функция

  • lb — Нижние границы для x

  • ub — Верхние границы для x

  • solver'surrogateopt'

  • options — Опции создаются с optimoptions

  • rngstate — Дополнительное поле, чтобы сбросить состояние генератора случайных чисел

  • intcon — Дополнительное поле, задающее x с целочисленным знаком компоненты

Примечание

Все поля в problem требуются кроме rngstate и intcon.

Типы данных: struct

Путь к файлу контрольной точки, заданному как строка или вектор символов. Файл контрольной точки имеет .mat расширение. Если вы задаете имя файла без пути, surrogateopt использует файл контрольной точки в текущей папке.

Файл контрольной точки хранит состояние оптимизации для возобновления оптимизации. surrogateopt обновляет файл контрольной точки при каждой функциональной оценке, таким образом, можно возобновить оптимизацию даже когда surrogateopt остановы преждевременно. Для примера смотрите Оптимизацию Суррогата Перезапуска от Файла контрольной точки.

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

Можно изменить некоторые опции при возобновлении от файла контрольной точки. Смотрите opts.

Данные в файле контрольной точки находятся в .mat формат. Чтобы избежать ошибок или других неожиданных результатов, не изменяйте данные прежде, чем вызвать surrogateopt.

Предупреждение

Не возобновляйте surrogateopt от файла контрольной точки, созданного с различной версией MATLAB®. surrogateopt может ошибка или давать противоречивые результаты.

Пример: 'checkfile.mat'

Пример: "C:\Program Files\MATLAB\docs\checkpointNov2019.mat"

Типы данных: char | string

Опции для возобновления оптимизации от файла контрольной точки, заданного как optimoptions опции (от ограниченного набора), что можно измениться из исходных опций. Опции, которые можно изменить:

  • CheckpointFile

  • Display

  • MaxFunctionEvaluations

  • MaxTime

  • MinSurrogatePoints

  • ObjectiveLimit

  • OutputFcn

  • PlotFcn

  • UseParallel

Пример: opts = optimoptions(options,'MaxFunctionEvaluations',400);

Выходные аргументы

свернуть все

Решение, возвращенное как вектор действительных чисел. x имеет ту же длину как lb и как ub.

Значение целевой функции в решении, возвращенном как вещественное число. Обычно fval = fun(x).

Обоснуйте surrogateopt остановленный, возвращенный как одно из этих целочисленных значений:

Exitflag Описание

10

Все верхние границы ub равны нижним границам lb. Существует только одна допустимая точка, который surrogateopt возвращается, не выполняя оптимизации.

1

Значение целевой функции меньше чем или равно options.ObjectiveLimit. Этот выходной флаг более приоритетен по сравнению с выходным флагом 10 когда оба применяются.

0

Количество функциональных оценок превышает options.MaxFunctionEvaluations или прошедшее время превышает options.MaxTime.

-1

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

-2

Никакая допустимая точка не найдена. Нижняя граница lb(i) превышает соответствующую верхнюю границу ub(i).

Информация о процессе оптимизации, возвращенном как структура с этими полями:

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

  • elapsedtime — Время потратило выполнение решателя в секундах, как измерено tictoc.

  • message — Рассуждайте почему остановленный алгоритм.

  • rngstate — Состояние генератора случайных чисел MATLAB незадолго до алгоритма запускается. Используйте это поле, чтобы воспроизвести ваши результаты. Смотрите Воспроизводят Результаты, который обсуждает использование rngstate для ga.

Оцененные точки, возвратились как структура с этими полями:

  • X — Матрица с nvars столбцы, где nvars длина lb или ub. Каждая строка X представляет одну точку, оцененную surrogateopt.

  • Fval — Вектор-столбец, где каждая запись является значением целевой функции соответствующей строки X.

trials структура имеет ту же форму как options.InitialPoints структура. Так, можно продолжить оптимизацию путем передачи trials структура как InitialPoints опция.

Алгоритмы

surrogateopt неоднократно выполняет следующие шаги:

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

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

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

  4. Оцените цель в адаптивной точке и обновите суррогат на основе этой точки и ее значения. Считайте "успех", если значение целевой функции достаточно ниже, чем предыдущее лучшее (самое низкое) значение, наблюдаемое, и считайте "отказ" в противном случае.

  5. Обновите дисперсию демонстрационного распределения вверх, если существует три успеха перед max(nvar,5) отказы, где nvar количество размерностей. Обновите дисперсию вниз, если существует max(nvar,5) отказы перед тремя успехами.

  6. Продолжите от шага 3, пока все испытательные точки не будут в MinSampleDistance из оцененных точек. В то время сбросьте суррогат путем отбрасывания всех адаптивных точек от суррогата, сбросьте шкалу и вернитесь к шагу 1, чтобы создать MinSurrogatePoints новое случайное испытание указывает для оценки.

Для получения дополнительной информации см. Суррогатный Алгоритм Оптимизации.

Расширенные возможности

Введенный в R2018b