Создать options с использованием optimoptions функционируют следующим образом.
options = optimoptions('particleswarm','Param1',value1,'Param2',value2,...);
Пример см. в разделе Оптимизация с помощью роя частиц.
Каждый параметр в этом разделе указан по имени поля в options. Например, Display относится к соответствующему полю options.
По умолчанию particleswarm вызывает 'pswcreationuniform' функция создания роя. Эта функция работает следующим образом.
Если InitialSwarmMatrix параметр существует, 'pswcreationuniform' принимает первое SwarmSize строк InitialSwarmMatrix матрица как рой. Если количество строк InitialSwarmMatrix матрица меньше, чем SwarmSize, то 'pswcreationuniform' переходит к следующему шагу.
'pswcreationuniform' создает достаточное количество частиц, чтобы SwarmSize всего. 'pswcreationuniform' создает случайные, равномерно распределенные частицы. Диапазон для любого компонента роя: -InitialSwarmSpan/2,InitialSwarmSpan/2, сдвигается и масштабируется при необходимости для соответствия каким-либо границам.
После создания, particleswarm проверяет, что все частицы удовлетворяют любым границам, и при необходимости усекает компоненты. Если Display опция - 'iter' и частица нуждается в усечении, то particleswarm уведомляет вас.
Установка пользовательской функции создания с помощью optimoptions для установки CreationFcn опция для @, где customcreationcustomcreation - имя файла функции создания. Такой синтаксис имеет пользовательская функция создания.
swarm = customcreation(problem)
Функция создания должна возвращать матрицу размера SwarmSizeоколо-nvars, где каждая строка представляет расположение одной частицы. Посмотрите problem для получения подробной информации о структуре проблемы. В частности, можно получить SwarmSize от problem.options.SwarmSize, и nvars от problem.nvars.
Пример функции создания см. в коде для pswcreationuniform.
edit pswcreationuniform Display указывает, какой объем информации отображается в командной строке во время работы алгоритма.
'off' или 'none' - Выходные данные не отображаются.
'iter' - Информация отображается в каждой итерации.
'final' (по умолчанию) - отображается причина остановки.
iter отображает:
Iteration - Номер итерации
f-count - Совокупное число оценок целевых функций
Best f(x) - Наилучшее значение целевой функции
Mean f(x) - Среднее значение целевой функции по всем частицам
Stall Iterations - количество итераций с момента последнего изменения в Best f(x)
DisplayInterval задает количество итераций, выполняемых до обновления итеративного отображения. Введите положительное целое число.
Детали particleswarm появляется в алгоритме оптимизации роя частиц. В этом разделе описываются параметры настройки.
Основным шагом в алгоритме роя частиц является генерация новых скоростей роя:
Для u1 и u2 равномерно (0,1) распределенные случайные векторы длины nvars, обновить скорость
v = W*v + y1*u1.*(p-x) + y2*u2.*(g-x).
Переменные W = inertia, y1 = SelfAdjustmentWeight, и y2 = SocialAdjustmentWeight.
В этом обновлении используется взвешенная сумма:
Предыдущая скорость v
x-p, разница между текущим положением x и лучшая позиция p частица увидела
x-g, разница между текущим положением x и лучшая позиция g в текущем районе
Исходя из этой формулы, опции имеют следующий эффект:
Большее абсолютное значение инерции W приводит к тому, что новая скорость больше находится в той же самой линии, что и старая, и имеет большую абсолютную величину. Большое абсолютное значение W может дестабилизировать рой. Значение W находится в диапазоне двухэлементного вектора InertiaRange.
Большие значения y1 = SelfAdjustmentWeight сделать голову частиц больше к лучшему месту, которое она посетила.
Большие значения y2 = SocialAdjustmentWeight сделать голову частиц больше к лучшему месту в текущем районе.
Большие значения инерции, SelfAdjustmentWeight, или SocialAdjustmentWeight может дестабилизировать рой.
MinNeighborsFraction задает как начальный размер окрестности для каждой частицы, так и минимальный размер окрестности; см. Алгоритм оптимизации роя частиц. Настройка MinNeighborsFraction кому 1 все члены роя используют глобальную минимальную точку в качестве цели социальной перестройки.
Пример настройки некоторых из этих параметров см. в разделе Оптимизация с помощью роя частиц.
Гибридная функция - это другая функция минимизации, которая выполняется после завершения алгоритма роя частиц. Вы можете указать гибридную функцию в HybridFcn вариант. Выбор:
[] - Гибридная функция отсутствует.
'fminsearch' - Используйте функцию MATLAB ®fminsearch для выполнения неограниченной минимизации.
'patternsearch' - используйте поиск массива, чтобы выполнить минимизацию с ограничениями или без ограничений.
'fminunc' - Используйте функцию Optimization Toolbox™ fminunc для выполнения неограниченной минимизации.
'fmincon' - Использование функции «Панель инструментов оптимизации» fmincon для выполнения ограниченной минимизации.
Примечание
Убедитесь, что гибридная функция принимает ограничения проблемы. В противном случае particleswarm выдает ошибку.
Для гибридной функции можно задать отдельные опции. Использовать optimset для fminsearch, или optimoptions для fmincon, patternsearch, или fminunc. Например:
hybridopts = optimoptions('fminunc','Display','iter','Algorithm','quasi-newton');particleswarm options следующим образом:options = optimoptions(options,'HybridFcn',{@fminunc,hybridopts}); hybridopts должен существовать до установки options.Пример использования гибридной функции см. в разделе Оптимизация с помощью роя частиц. См. раздел Когда использовать гибридную функцию.
Функции вывода - это функции, которые particleswarm вызовы в каждой итерации. Функции вывода могут останавливаться particleswarmили может выполнять другие задачи. Чтобы задать функцию вывода,
options = optimoptions(@particleswarm,'OutputFcn',@outfun)где outfun - функция с синтаксисом, указанным в разделе «Структура функции вывода» или «Функция графика». Если имеется несколько функций вывода, передайте их в виде массива ячеек дескрипторов функций:
options = optimoptions(@particleswarm,'OutputFcn',{@outfun1,@outfun2,@outfun3})Аналогично, функции графика являются функциями, которые particleswarm вызовы в каждой итерации. Разница между функцией вывода и функцией печати заключается в том, что функция печати имеет встроенные расширения печати, такие как кнопки, появляющиеся в окне печати для приостановки или остановки particleswarm. Одиночная встроенная функция графика 'pswplotbestf' строит график наилучшего значения целевой функции относительно итераций. Чтобы указать его,
options = optimoptions(@particleswarm,'PlotFcn','pswplotbestf')
Чтобы создать пользовательскую функцию печати, напишите функцию с синтаксисом, указанным в разделе «Структура функции вывода» или «Функция печати». Чтобы задать пользовательскую функцию печати, используйте дескриптор функции. Если имеется несколько функций графика, передайте их как массив ячеек дескрипторов функций:
options = optimoptions(@particleswarm,'PlotFcn',{@plotfun1,@plotfun2,@plotfun3})Пример пользовательской функции вывода см. в разделе Функция вывода роя частиц.
Функция вывода имеет следующий синтаксис вызова:
stop = myfun(optimValues,state)
Если набор функций stop кому true, итерации заканчиваются. Набор stop кому false иметь particleswarm продолжить вычисление.
Функция имеет следующие входные аргументы:
optimValues - Структура, содержащая информацию о рое в текущей итерации. Подробные данные находятся в структуре optimValues.
state - строка, задающая состояние текущей итерации.
'init' - решатель не начал выполнять итерацию. Функция вывода или функция печати могут использовать это состояние для открытия файлов или настройки структур данных или графиков для последующих итераций.
'iter' - решатель продолжает итерации. Как правило, именно здесь выполняет свою работу функция вывода или функция графика.
'done' - Решатель достиг критерия остановки. Функция вывода или функция печати могут использовать это состояние для очистки, например, для закрытия всех открытых файлов.
В разделе Передача дополнительных параметров (Passing Extra Parameters) объясняется, как предоставить дополнительные параметры для выходных функций или функций графика.
particleswarm проходит optimValues структура для выходных функций или функций графика. optimValues структура имеет следующие поля.
| Область | Содержание |
|---|---|
funccount | Общее число оценок целевых функций. |
bestx | Найдена точка наилучшего решения, соответствующая значению лучшей целевой функции bestfval. |
bestfval | Найдено наилучшее (наименьшее) значение целевой функции. |
iteration | Номер итерации. |
meanfval | Средняя целевая функция среди всех частиц при текущей итерации. |
stalliterations | Число итераций с момента последнего изменения в bestfval. |
swarm | Матрица, содержащая положения частиц. Каждый ряд содержит положение одной частицы, а количество рядов равно размеру роя. |
swarmfvals | Вектор, содержащий значения целевой функции частиц роя. Для частиц i, swarmfvals(i) = fun(swarm(i,:)), где fun является целевой функцией. |
Для увеличения скорости можно настроить параметры так, чтобы particleswarm оценивает целевую функцию для роя параллельно или векторизированным образом. Можно использовать только одну из этих опций. Если установить UseParallel кому true и UseVectorized кому trueзатем вычисления выполняются векторизированным образом, а не параллельно.
Если у вас есть лицензия Parallel Computing Toolbox™, вы можете распределить оценку целевых функций на рой между вашими процессорами или ядрами. Установите UseParallel опция для true.
Параллельные вычисления, скорее всего, будут более быстрыми, чем последовательные, когда ваша целевая функция является вычислительно дорогой, или когда у вас много частиц и процессоров. В противном случае служебные данные связи могут привести к тому, что параллельные вычисления будут медленнее, чем последовательные вычисления.
Дополнительные сведения см. в разделе Параллельные вычисления.
Если целевая функция может оценить все частицы одновременно, обычно можно сэкономить время, установив UseVectorized опция для true. Ваша целевая функция должна принять Mоколо-N матрица, где каждая строка представляет одну частицу, и возвращает Mоколо-1 вектор значений целевой функции. Эта опция работает так же, как и patternsearch и ga UseVectorized варианты. Для patternsearch подробности см. в разделе Векторизация функций цели и ограничения.
particleswarm прекращает итерацию при выполнении любого из следующих действий.
| Опция остановки | Испытание остановки | Флаг выхода |
|---|---|---|
MaxStallIterations и FunctionTolerance | Относительное изменение наилучшего значения целевой функции g за последний MaxStallIterations итерации меньше, чем FunctionTolerance. | 1 |
MaxIterations | Число итераций достигает MaxIterations. | 0 |
OutputFcn или PlotFcn | OutputFcn или PlotFcn может остановить итерации. | -1 |
ObjectiveLimit | Наилучшее значение целевой функции g меньше, чем ObjectiveLimit. | -3 |
MaxStallTime | Наилучшее значение целевой функции g не изменился в последнем MaxStallTime секунд. | -4 |
MaxTime | Время выполнения функции превышает MaxTime секунд. | -5 |
Кроме того, если установить FunValCheck опция для 'on', и рой имеет частицы с NaN, Infили значения комплексной целевой функции, particleswarm останавливает и выдает ошибку.