Чтобы управлять алгоритмом суррогатной оптимизации, используйте следующие опции.
ConstraintTolerance
- Допуск ограничения не используется в качестве критерия остановки. Он используется для определения допустимости относительно нелинейных ограничений. Допуск удовлетворяется, когда max(fun(x).Ineq) <= ConstraintTolerance
, и в противном случае нарушается. Значение по умолчанию 1e-3
.
InitialPoints
- Задайте начальные точки одним из двух способов.
Матрица - каждая строка матрицы представляет начальную точку. Длина каждой строки совпадает с количеством элементов в границах lb
или ub
. Количество строк произвольно. surrogateopt
использует все строки, чтобы создать начальный суррогат. Если их меньше MinSurrogatePoints
строки, затем surrogateopt
генерирует оставшиеся начальные точки. surrogateopt
вычисляет целевую функцию в каждой начальной точке.
Структура - Структура содержит поле X
и, опционально, поля Fval
и Ineq
. The X
поле содержит матрицу, где каждая строка представляет начальную точку. The Fval
поле содержит вектор, представляющий значения целевой функции в каждой точке X
. Передача Fval
экономит время для решателя, потому что в противном случае решатель оценивает значение целевой функции в каждой начальной точке. The Ineq
поле содержит матрицу, содержащую нелинейные значения ограничений неравенства. Каждая строка Ineq
представляет одну начальную точку, и каждый столбец представляет значение нелинейной функции ограничения в этой точке. Передача Ineq
экономит время для решателя, потому что в противном случае решатель оценивает значения ограничительных функций в каждой начальной точке.
MinSurrogatePoints
- Количество начальных точек, используемых для построения суррогата. Большие значения приводят к более точному законченному суррогату, но занимают больше времени, чтобы закончить суррогат. surrogateopt
создает это количество случайных точек после каждого переключения в фазу случайной генерации. См. Алгоритм суррогатной оптимизации.
Когда BatchUpdateInterval
> 1, минимальное количество случайных точек выборки, используемых для создания суррогата, больше из MinSurrogatePoints
и BatchUpdateInterval
.
MinSampleDistance
- Эта опция управляет двумя аспектами алгоритма.
Во время фазы для оценки минимального значения суррогата алгоритм генерирует случайные точки, в которых можно оценить суррогат. Если какая-либо из этих точек ближе, чем MinSampleDistance
до любой предыдущей точки, чье значение целевой функции было оценено, затем surrogateopt
отбрасывает вновь сгенерированные точки и не вычисляет их.
Если surrogateopt
отбрасывает все случайные точки, затем не пытается минимизировать суррогат и вместо этого переключается на фазу случайной генерации. Если на surrogateoptplot
функция построения графика выполняется, затем он помечает этот переключатель синей вертикальной линией.
BatchUpdateInterval
- Эта опция управляет тремя аспектами алгоритма:
Количество вычислений функции перед обновлением суррогата.
Число точек для прохождения в векторизованной оценке. Когда UseVectorized
является true
, surrogateopt
передает матрицу размера BatchUpdateInterval
-by- nvar
, где nvar
- количество переменных задачи. Каждая строка матрицы представляет одну точку оценки. Для окончательной итерации (той, которая вызывает MaxFunctionEvaluations
вычисления функции), если MaxFunctionEvaluations
не является целым числом, кратным BatchUpdateInterval
, surrogateopt
передает матрицу с меньшим числом BatchUpdateInterval
строки.
Когда BatchUpdateInterval
> 1, минимальное количество случайных точек выборки, используемых для создания суррогата, больше из MinSurrogatePoints
и BatchUpdateInterval
.
Выходные функции и функции построения графика обновляются после полной оценки каждого пакета.
Для получения дополнительной информации см. Surrogate Optimization Algorithm.
Обычно алгоритм останавливается, только когда он достигает предела, который вы задаете в опциях решателя. Кроме того, функция построения графика или выходная функция могут остановить решатель.
Опция остановки | Остановка теста | Выходной флаг |
---|---|---|
MaxFunctionEvaluations | Решатель останавливается после завершения | 0 |
MaxTime | Решатель останавливается, когда достигает MaxTime секунд от начала оптимизации, измеренных tic / toc . Решатель не прерывает вычисления функции в прогресс, поэтому фактическое вычислительное время может превысить MaxTime . | 0 |
ObjectiveLimit | Решатель останавливается, если получает значение целевой функции меньше ObjectiveLimit . | 1 |
OutputFcn или PlotFcn | Система координат OutputFcn или PlotFcn может остановить итерации. | -1 |
Границы lb и ub | Если запись в lb превышает соответствующую запись в ub решатель останавливается, потому что границы несогласованны. | -2 |
Установите Display
опция управления тем, что surrogateopt
возвращается в командную строку.
'final'
- Возвращает только выходное сообщение. Это поведение по умолчанию.
'iter'
- Возвращает итеративное отображение.
'off'
или эквивалентное 'none'
- Нет отображения командной строки.
При итерационном отображении решатель возвращает следующую информацию в формате таблицы.
F-count
- Количество вычислений функции
Time(s)
- Время в секундах с момента запуска решателя
Best Fval
- Получено самое низкое значение целевой функции
Current Fval
- Последнее значение целевой функции
Trial Type
- Алгоритм, дающий оцененную точку, либо random
или adaptive
. Для получения дополнительной информации см. Surrogate Optimization Algorithm.
Когда целевая функция возвращает нелинейное ограничение, итеративное отображение Best Fval
и Current Fval
изменения. Вместо этого заголовки Best
и Current
, и в каждом из них отображаются два столбца (Fval, Infeas)
.
Когда точка допустима, surrogateopt
отображает значение функции и показывает -
как недопустимость.
Когда точка недопустима, surrogateopt
отображает максимальную недопустимость среди всех нелинейных функций ограничения (положительное число) и показывает -
как значение функции.
Однажды surrogateopt
находит допустимую точку, последующие записи в Best
столбец показывает только наименьшее найденное значение функции и показывает -
как лучшая недопустимость.
При итерационном отображении решатель также возвращает информацию о задаче перед таблицей:
Количество переменных
Тип целевой функции (скаляр или нет)
Количество неравенств
Выходная функция может остановить решатель или выполнить расчет при каждой итерации. Чтобы включить выходную функцию, установите OutputFcn
опция для @myoutputfcn
, где myoutputfcn
- функция с синтаксисом, описанным в следующем абзаце. Этот синтаксис такой же, как и для Optimization Toolbox™ выходных функций, но с другими значениями x
и optimValues
аргументы. Для получения информации об этих выходных функциях, смотрите Выходная функция и Синтаксис функции построения графика. Пример выходной функции см. в разделе Целочисленная оптимизация с Пользовательской Выходной Функцией.
Синтаксис выходной функции:
stop = outfun(x,optimValues,state)
surrogateopt
передает значения x
, optimValues
, и state
к выходной функции (outfun
, в этом случае) при каждой итерации. Выходная функция возвращается stop
, логическое значение (true
или false
), указывающий, следует ли останавливать surrogateopt
.
x
- входной параметр x
является лучшей точкой, найденной до сих пор, что означает точку с самым низким значением целевой функции.
optimValues
- Этот входной параметр является структурой, содержащей следующие поля. Для получения дополнительной информации об этих полях см. Surrogate Optimization Algorithm.
optimValues
Структура
Имя поля | Содержание |
---|---|
constrviolation | Максимальное нарушение ограничений лучшей точки, max(optimValues.ineq) |
currentConstrviolation | Максимальное нарушение ограничений текущей точки, max(optimValues.currentIneq) |
currentFlag | Способ создания текущей точки.
|
currentFval | Значение целевой функции в текущей точке |
currentIneq | Вектор нарушения ограничений текущей точки, fun(currentX).Ineq |
currentX | Current point |
elapsedtime | Время в секундах с момента запуска решателя |
flag | Как была создана лучшая точка
|
funccount | Общее количество целевых вычислений функции |
fval | Встретилось самое низкое значение целевой функции |
incumbentConstrviolation | Максимальное нарушение ограничений текущей точки, max(optimValues.incumbentIneq) |
incumbentIneq | Вектор нарушения ограничений действующей точки, fun(incumbentX).Ineq |
incumbentFlag | Как была создана действующая точка
|
incumbentFval | Значение целевой функции в действующей точке |
incumbentX | Действующая точка, означающая лучшую точку, найденную со времени последнего сдвига фазы к случайной выборке |
ineq | Вектор нарушения ограничений лучшей точки, fun(x).Ineq |
iteration | То же, что и |
surrogateReset | Логическое значение, указывающее, что текущая итерация сбрасывает модель и переключается на случайную выборку |
surrogateResetCount | Общее количество раз, |
state
- Этот входной параметр является состоянием алгоритма, заданным в качестве одного из следующих значений.
'init'
- Алгоритм находится в начальном состоянии перед первой итерацией. Когда алгоритм находится в этом состоянии, можно настроить оси графика или другие структуры данных или открыть файлы.
Примечание
Когда state
является 'init'
, входные параметры x
и optimValues.fval
пусты ([]
) потому что surrogateopt
предназначен для длительных целевых функций и поэтому не вычисляет целевую функцию перед вызовом шага инициализации.
'iter'
- Алгоритм только что оценил целевую функцию. Вы выполняете большинство вычислений и просматриваете большинство отображений, когда алгоритм находится в этом состоянии.
'done'
- Алгоритм выполнил окончательную оценку целевой функции. Когда алгоритм находится в этом состоянии, можно закрыть файлы, закончить графики или подготовиться другими способами к surrogateopt
чтобы остановить.
A функции построения графика отображает информацию при каждой итерации. Можно приостановить или остановить решатель, нажав кнопки на графике. Чтобы включить функцию построения графика, установите PlotFcn
опция для имени функции или указателя на функцию или массива ячеек из имен функции или указателей для функций построения графика. Четыре встроенные функции построения графика:
'optimplotfvalconstr'
(по умолчанию) - постройте график наилучшего допустимого значения целевой функции, найденного как линейный график. Если целевой функции нет, постройте график максимального нелинейного нарушения ограничений как линейный график.
График показывает недопустимые точки как красные и допустимые точки как синие.
Если нет целевой функции, заголовок графика показывает количество возможных решений.
'optimplotfval'
- Показывает лучшее значение функции. Если вы не выбираете функцию построения графика, surrogateopt
использует @optimplotfval
.
'optimplotx'
- Показывает лучшую точку, найденную как штриховой график.
'surrogateoptplot'
- Показывает текущее значение целевой функции, лучшее значение функции и информацию о фазе алгоритма. См. «Интерпретация суррогатеоптплота».
Вы можете записать пользовательскую функцию построения графика с помощью синтаксиса выходной функции. Для получения примера исследуйте код на surrogateoptplot
путем ввода type surrogateoptplot
в MATLAB® командная строка.
Когда вы устанавливаете UseParallel
опция для true
, surrogateopt
вычисляет параллельно. Для параллельных вычислений требуется лицензия Parallel Computing Toolbox™. Для получения дополнительной информации см. Surrogate Optimization Algorithm.
Вы не можете задать оба UseParallel = true
и UseVectorized = true
. Если вы оба задаете true
решатель игнорирует UseVectorized
и пытается вычислить параллельно с помощью параллельного пула, если это возможно.
Когда вы устанавливаете UseVectorized
опция для true
, surrogateopt
передает матрицу в целевую функцию. Каждая строка матрицы представляет одну точку для вычисления. Матрица имеет options.BatchUpdateInterval
строки; однако матрица может иметь меньше строк во время окончательной итерации. Используйте эту опцию для пользовательских параллельных вычислений, как показано на Vectorized Surrogate Optimization for Custom Parallel Simulation.
Вы не можете задать оба UseParallel = true
и UseVectorized = true
. Если вы оба задаете true
решатель игнорирует UseVectorized
и пытается вычислить параллельно с помощью параллельного пула, если это возможно.
Когда вы задаете имя файла контрольной точки используя CheckpointFile
опция, surrogateopt
записывает данные в файл после каждой итерации, что позволяет функции возобновить оптимизацию из текущего состояния. При перезапуске, surrogateopt
не оценивает значение целевой функции в ранее оцененных точках.
Файл контрольной точки может быть путем к файлу, таким как "C:\Documents\MATLAB\check1.mat"
или имя файла, например 'checkpoint1June2019.mat'
. Если вы задаете имя файла без пути, surrogateopt
сохраняет файл контрольной точки в текущей папке.
При возобновлении оптимизации можно изменить только следующие опции:
BatchUpdateInterval
CheckpointFile
Display
MaxFunctionEvaluations
MaxTime
MinSurrogatePoints
ObjectiveLimit
OutputFcn
PlotFcn
UseParallel
UseVectorized
Чтобы возобновить оптимизацию из файла контрольной точки, вызовите surrogateopt
с именем файла в качестве первого аргумента.
[x,fval,exitflag,output] = surrogateopt('check1.mat')
Чтобы возобновить оптимизацию с помощью новых опций, включите новые опции в качестве второго аргумента.
opts = optimoptions(options,'MaxFunctionEvaluations',500); [x,fval,exitflag,output] = surrogateopt('check1.mat',opts)
Во время перезапуска, surrogateopt
запускает любые выходные функции и функции построения графика, основанные на исходных вычислениях функции. Так, например, можно создать другой график на основе уже запущенной оптимизации. См. «Работа с файлами контрольных точек».
Примечание
surrogateopt
не сохраняет все сведения о состоянии в файле контрольной точки. Поэтому последующие итерации могут отличаться от итераций, которые принимает решатель, не останавливаясь в проверенном состоянии.
Примечание
Выгрузки требуют времени. Эти накладные расходы особенно заметны для функций, которым в противном случае требуется мало времени для оценки.
Предупреждение
Не возобновлять surrogateopt
из файла контрольной точки, созданного с другой версией MATLAB. surrogateopt
может выдать ошибку или дать несогласованные результаты.