surrogateopt

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

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

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

Синтаксис

x = surrogateopt(fun,lb,ub)
x = surrogateopt(fun,lb,ub,options)
x = surrogateopt(problem)
x = surrogateopt(checkpointFile)
x = surrogateopt(checkpointFile,opts)
[x,fval] = surrogateopt(___)
[x,fval,exitflag,output] = surrogateopt(___)
[x,fval,exitflag,output,trials] = surrogateopt(___)

Описание

пример

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

Примечание

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

пример

x = surrogateopt(fun,lb,ub,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

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

Чтобы систематически искать область, используйте обычную сетку отправных точек. Установите 120 как максимальное количество функциональных оценок. Используйте функцию построения графика 'surrogateoptplot'. Чтобы понять сюжет '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'. Чтобы понять сюжет '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:
       rngstate: [1x1 struct]
      funccount: 200
    elapsedtime: 45.7775
        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');

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

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: 8.6254
        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',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: 41.1504
        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.

Примечание

Все записи в lb должны быть строго меньше, чем соответствующие записи в ub.

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

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

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

Внимание

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

Примечание

Все записи в lb должны быть строго меньше, чем соответствующие записи в ub.

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

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

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

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

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

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

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

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

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)

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

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

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

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

  • solver'surrogateopt'

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

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

Примечание

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

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

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

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

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

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

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

Пример: 'checkfile'

Пример: "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 Описание

1

Значение целевой функции меньше чем или равно options.ObjectiveLimit.

0

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

-1

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

-2

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

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

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

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

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

  • 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