Для управления алгоритмом суррогатной оптимизации используйте следующие опции.
ConstraintTolerance - допуск ограничения не используется в качестве критерия остановки. Он используется для определения осуществимости в отношении нелинейных ограничений. Допуск удовлетворяется, когда max(fun(x).Ineq) <= ConstraintTolerance, а в противном случае нарушается. Значение по умолчанию: 1e-3.
InitialPoints - Укажите начальные точки одним из двух способов.
Матрица - каждая строка матрицы представляет начальную точку. Длина каждой строки совпадает с количеством элементов в границах lb или ub. Число строк является произвольным. surrogateopt использует все строки для построения начального суррогата. Если их меньше, чем MinSurrogatePoints строки, затем surrogateopt генерирует оставшиеся начальные точки. surrogateopt оценивает целевую функцию в каждой начальной точке.
Структура - структура содержит поле X и, необязательно, поля Fval и Ineq. X поле содержит матрицу, где каждая строка представляет начальную точку. Fval поле содержит вектор, представляющий значения целевой функции в каждой точке в X. Прохождение Fval экономит время для решателя, поскольку в противном случае решатель оценивает значение целевой функции в каждой начальной точке. Ineq поле содержит матрицу, содержащую нелинейные значения ограничений неравенства. Каждая строка Ineq представляет одну начальную точку, и каждый столбец представляет значение нелинейной функции ограничения в этой точке. Прохождение Ineq экономит время для решателя, поскольку в противном случае решатель оценивает значения функции ограничения в каждой начальной точке.
MinSurrogatePoints - количество исходных точек, используемых для построения суррогата. Более крупные значения приводят к более точному готовому суррогату, но требуют больше времени, чтобы закончить суррогат. surrogateopt создает это число случайных точек после каждого переключения на фазу случайного генерирования. См. раздел Алгоритм суррогатной оптимизации.
Когда BatchUpdateInterval > 1, минимальное количество точек случайной выборки, используемых для создания суррогата, больше MinSurrogatePoints и BatchUpdateInterval.
MinSampleDistance - Эта опция управляет двумя аспектами алгоритма.
Во время фазы оценки минимального значения суррогата алгоритм генерирует случайные точки, в которых оценивается суррогат. Если любой из этих пунктов ближе, чем MinSampleDistance к любой предыдущей точке, значение целевой функции которой было оценено, то surrogateopt отбрасывает вновь сгенерированные точки и не оценивает их.
Если surrogateopt отбрасывает все случайные точки, то не пытается минимизировать суррогат и вместо этого переключается на фазу случайного генерирования. Если surrogateoptplot функция печати выполняется, затем этот переключатель помечается синей вертикальной линией.
BatchUpdateInterval - Эта опция управляет тремя аспектами алгоритма:
Количество оценок функций перед обновлением суррогата.
Количество точек для передачи в векторизированной оценке. Когда UseVectorized является true, surrogateopt передает матрицу размера BatchUpdateIntervalоколо-nvar, где nvar - количество переменных проблемы. Каждая строка матрицы представляет одну точку оценки. Для конечной итерации (вызывающей MaxFunctionEvaluations оценки функций), если MaxFunctionEvaluations не является целым числом, кратным BatchUpdateInterval, surrogateopt передает матрицу, содержащую менее BatchUpdateInterval строк.
Когда BatchUpdateInterval > 1, минимальное количество точек случайной выборки, используемых для создания суррогата, больше MinSurrogatePoints и BatchUpdateInterval.
Функции вывода и функции печати обновляются после полной оценки каждого пакета.
Дополнительные сведения см. в разделе Алгоритм суррогатной оптимизации.
Как правило, алгоритм останавливается только при достижении предела, заданного в опциях решателя. Кроме того, функция графика или функция вывода может остановить решатель.
| Опция остановки | Испытание остановки | Флаг выхода |
|---|---|---|
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. Дополнительные сведения см. в разделе Алгоритм суррогатной оптимизации.
Когда целевая функция возвращает нелинейное ограничение, итеративное отображение Best Fval и Current Fval изменения. Вместо этого названия Best и Current, и каждая отображает два столбца, (Fval, Infeas).
Когда точка выполнима, surrogateopt отображает значение функции и показывает - в качестве несходимости.
Когда точка неосуществима, surrogateopt отображает максимальную несходимость среди всех функций нелинейных ограничений (положительное число) и показывает - в качестве значения функции.
Однажды surrogateopt находит выполнимую точку, последующие записи в Best столбец показывает только наименьшее найденное значение функции и показывает - как лучшая несходимость.
При итеративном отображении решатель также возвращает информацию о проблеме перед таблицей:
Количество переменных
Тип целевой функции (скаляр или нет)
Число неравенств
Функция вывода может остановить решатель или выполнить вычисление в каждой итерации. Чтобы включить функцию вывода, установите OutputFcn опция для @myoutputfcn, где myoutputfcn - функция с синтаксисом, описанным в следующем абзаце. Этот синтаксис тот же, что и для функций Optimization Toolbox™ output, но с различными значениями x и optimValues аргументы. Сведения об этих функциях вывода см. в разделах Функция вывода и Синтаксис функции печати. Пример функции вывода см. в разделе Целочисленная оптимизация с помощью пользовательской функции вывода.
Синтаксис выходной функции:
stop = outfun(x,optimValues,state)
surrogateopt передает значения x, optimValues, и state к функции вывода (outfun, в данном случае) на каждой итерации. Функция вывода возвращает stop, логическое значение (true или false) указывает, следует ли останавливать surrogateopt.
x - Входной аргумент x является лучшей точкой, найденной на данный момент, что означает точку с наименьшим значением целевой функции.
optimValues - Этот входной аргумент представляет собой структуру, содержащую следующие поля. Дополнительные сведения об этих полях см. в разделе Алгоритм суррогатной оптимизации.
optimValues Структура
| Имя поля | Содержание |
|---|---|
constrviolation | Максимальное нарушение ограничения лучшей точки, max(optimValues.ineq) |
currentConstrviolation | Максимальное нарушение ограничения текущей точки, max(optimValues.currentIneq) |
currentFlag | Способ создания текущей точки.
|
currentFval | Значение целевой функции в текущей точке |
currentIneq | Вектор нарушения ограничения текущей точки, fun(currentX).Ineq |
currentX | Текущая точка |
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 чтобы остановиться.
Функция печати отображает информацию на каждой итерации. Можно приостановить или приостановить работу решателя, нажав кнопки на графике. Чтобы включить функцию печати, задайте значение PlotFcn опция для указания имени функции или дескриптора функции или массива ячеек имен функций или дескрипторов для печати функций. Четыре встроенные функции графика:
'optimplotfvalconstr' (по умолчанию) - постройте график наилучшего возможного значения целевой функции, найденного в виде линейного графика. Если целевая функция отсутствует, постройте график максимального нарушения нелинейных ограничений в виде линейного графика.
На графике невидимые точки отображаются как красные, а возможные точки - как синие.
При отсутствии объективной функции заголовок графика показывает количество возможных решений.
'optimplotfval' - Показывает наилучшее значение функции. Если функция печати не выбрана, surrogateopt использование @optimplotfval.
'optimplotx' - Показывает наилучшую точку, найденную в виде штрих-графика.
'surrogateoptplot' - показывает текущее значение целевой функции, значение лучшей функции и информацию о фазе алгоритма. См. раздел Интерпретировать суррогатеоптплот.
Можно написать пользовательскую функцию печати, используя синтаксис функции вывода. Например, изучите код для surrogateoptplot путем ввода type surrogateoptplot в командной строке MATLAB ®.
При установке UseParallel опция для true, surrogateopt вычисляет параллельно. Для параллельных вычислений требуется лицензия Parallel Computing Toolbox™. Дополнительные сведения см. в разделе Алгоритм суррогатной оптимизации.
Вы не можете указать оба UseParallel = true и UseVectorized = true. Если оба параметра имеют значение true, решатель игнорирует UseVectorized и пытается вычисляться параллельно, используя параллельный пул, если это возможно.
При установке UseVectorized опция для true, surrogateopt передает матрицу целевой функции. Каждая строка матрицы представляет одну точку для вычисления. Матрица имеет options.BatchUpdateInterval строки; однако матрица может иметь меньше строк во время конечной итерации. Используйте этот параметр для пользовательских параллельных вычислений, как показано в разделе Векторизированная суррогатная оптимизация для пользовательского параллельного моделирования.
Вы не можете указать оба 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 может вызвать ошибку или привести к противоречивым результатам.