Создание 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
опция @
, где customcreation
customcreation
- имя файла функции создания. Функция пользовательского создания имеет этот синтаксис.
swarm = customcreation(problem)
Функция создания должна вернуть матрицу размера SwarmSize
-by- nvars
, где каждая строка представляет расположение одной частицы. См. problem
для получения подробной информации о структуре задачи. В частности, можно получить SwarmSize
от problem.options.SwarmSize
, и nvars
от problem.nvars
.
Пример функции создания см. в коде для pswcreationuniform
.
edit pswcreationuniform
The Display
опция задаёт, какой объем информации отображается в командной строке во время работы алгоритма.
'off'
или 'none'
- Вывод не отображается.
'iter'
- Информация отображается при каждой итерации.
'final'
(по умолчанию) - Отображается причина остановки.
iter
отображает:
Iteration
- Число итерации
f-count
- Совокупное число вычислений целевых функций
Best f(x)
- Лучшее значение целевой функции
Mean f(x)
- Среднее значение целевой функции для всех частиц
Stall Iterations
- Количество итераций с момента последнего изменения Best f(x)
The 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
может дестабилизировать рой.
The MinNeighborsFraction
опция устанавливает как начальный размер окрестности для каждой частицы, так и минимальный размер окрестности; см. Алгоритм оптимизации роя частиц. Настройка MinNeighborsFraction
на 1
все представители роя используют глобальную минимальную точку в качестве своей цели социальной корректировки.
Смотрите Оптимизируйте Использование роя частиц для примера, который устанавливает несколько из этих опций настройки.
Гибридная функция является другой функцией минимизации, которая запускается после завершения алгоритма роя частиц. Можно задать гибридную функцию в HybridFcn
опция. Выбор:
[]
- Нет гибридной функции.
'fminsearch'
- Используйте MATLAB® функция fminsearch
для выполнения минимизации без ограничений.
'patternsearch'
- Используйте поиск шаблона для выполнения минимизации с ограничениями или без ограничений.
'fminunc'
- Используйте функцию Optimization Toolbox™ fminunc
для выполнения минимизации без ограничений.
'fmincon'
- Используйте функцию Optimization Toolbox 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
- функция с синтаксисом, заданным в Структуре Выходной Функции или Функции построения графика. Если у вас есть несколько выходных функций, передайте их как cell-массив указателей на функцию:
options = optimoptions(@particleswarm,'OutputFcn',{@outfun1,@outfun2,@outfun3})
Точно так же функции построения графика являются функциями, которые particleswarm
вызовы при каждой итерации. Различие между выходной функцией и функцией построения графика заключается в том, что функция построения графика имеет встроенные улучшения графического изображения, такие как кнопки, которые появляются в окне вывода на паузу или остановку particleswarm
. Встроенная функция построения графика 'pswplotbestf'
строит графики наилучшего значения целевой функции против итераций. Чтобы указать его,
options = optimoptions(@particleswarm,'PlotFcn','pswplotbestf')
Чтобы создать пользовательскую функцию построения графика, запишите функцию с синтаксисом, заданным в Structure of the Выходная Функция или Функция Построения Графика. Чтобы задать пользовательскую функцию построения графика, используйте указатель на функцию. Если у вас есть несколько функции построения графика, передайте их как cell-массив указателей на функцию:
options = optimoptions(@particleswarm,'PlotFcn',{@plotfun1,@plotfun2,@plotfun3})
Для примера пользовательской выходной функции см. «Выходная функция роя частиц».
Выходная функция имеет следующий синтаксис вызова:
stop = myfun(optimValues,state)
Если ваша функция устанавливает stop
на true
, итерации заканчиваются. Задайте stop
на false
иметь particleswarm
продолжить вычислять.
Функция имеет следующие входные параметры:
optimValues
- Структура, содержащая информацию о рое в текущей итерации. Детали указаны в optimValues Structure.
state
- Строка, задающая состояние текущей итерации.
'init'
- Решатель не начал итерацию. Ваша выходная функция или функция построения графика могут использовать это состояние для открытия файлов или настройки структур данных или графиков для последующих итераций.
'iter'
- Решатель продолжает свои итерации. Как правило, здесь ваша выходная функция или функция построения графика выполняет свою работу.
'done'
- Решатель достиг критерия остановки. Ваша выходная функция или функция построения графика могут использовать это состояние для очистки, например, для закрытия любых файлов, которые она открыла.
Передача дополнительных параметров объясняет, как обеспечить дополнительные параметры для выходных функций или функций построения графика.
particleswarm
проходит optimValues
структура к вашим выходным функциям или функциям построения графика. The optimValues
структура имеет следующие поля.
Область | Содержание |
---|---|
funccount | Общее количество целевых вычислений функции. |
bestx | Лучшая найденная точка решения, соответствующая лучшему значению целевой функции bestfval . |
bestfval | Найдено лучшее (самое низкое) значение целевой функции. |
iteration | Номер итерации. |
meanfval | Средняя целевая функция среди всех частиц при текущей итерации. |
stalliterations | Количество итераций с момента последнего изменения bestfval . |
swarm | Матрица, содержащая положения частиц. Каждая строка содержит положение одной частицы, а количество строк равно размеру роя. |
swarmfvals | Вектор, содержащий значения целевой функции частиц в рое. Для i частиц , swarmfvals(i) = fun(swarm(i,:)) , где fun - целевая функция. |
Для повышенной скорости можно задать опции так, чтобы particleswarm
оценивает целевую функцию для роя parallel или vectorized способом. Можно использовать только один из следующих опций. Если вы задаете UseParallel
на true
и UseVectorized
на true
, затем расчеты выполняются векторизованным образом, а не параллельно.
Если у вас есть лицензия Parallel Computing Toolbox™, можно распределить оценку целевых функций по роям среди процессоров или ядер. Установите UseParallel
опция для true
.
Параллельные расчеты, вероятно, будут быстрее последовательных, когда ваша целевая функция является вычислительно дорогой, или когда у вас есть много частиц и процессоров. В противном случае накладные расходы на связь могут привести к тому, что параллельные расчеты будут медленнее, чем последовательные расчеты.
Для получения дополнительной информации смотрите Параллельные вычисления.
Если ваша целевая функция может вычислить все частицы сразу, вы обычно можете сэкономить время, установив UseVectorized
опция для true
. Ваша целевая функция должна принять M
-by- N
матрица, где каждая строка представляет одну частицу, и возвращает M
-by- 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
останавливает и выдает ошибку.