Опции для роя частиц

Задание опций для particleswarm

Создание options использование optimoptions функционировать следующим образом.

options = optimoptions('particleswarm','Param1',value1,'Param2',value2,...);

Для получения примера смотрите Оптимизацию с использованием роя частиц.

Каждая опция в этом разделе указана по имени поля в options. Для примера, Display относится к соответствующему полю options.

Создание роя

По умолчанию, particleswarm вызывает 'pswcreationuniform' функция создания роя. Эта функция работает следующим образом.

  1. Если задан InitialSwarmMatrix опция существует, 'pswcreationuniform' принимает первое SwarmSize строки InitialSwarmMatrix матрица как рой. Если количество строк в InitialSwarmMatrix матрица меньше SwarmSize, затем 'pswcreationuniform' переходит к следующему шагу.

  2. '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' - Решатель достиг критерия остановки. Ваша выходная функция или функция построения графика могут использовать это состояние для очистки, например, для закрытия любых файлов, которые она открыла.

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

Структура optimValues

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, затем расчеты выполняются векторизованным образом, а не параллельно.

Параллельные частицы warm

Если у вас есть лицензия Parallel Computing Toolbox™, можно распределить оценку целевых функций по роям среди процессоров или ядер. Установите UseParallel опция для true.

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

Для получения дополнительной информации смотрите Параллельные вычисления.

Векторизованные частицы warm

Если ваша целевая функция может вычислить все частицы сразу, вы обычно можете сэкономить время, установив UseVectorized опция для true. Ваша целевая функция должна принять M-by- N матрица, где каждая строка представляет одну частицу, и возвращает M-by- 1 вектор значений целевой функции. Эта опция работает так же, как и patternsearch и ga UseVectorized опции. Для patternsearch подробные сведения см. в разделе Векторизация функций «Цель» и «Ограничения».

Критерий остановки

particleswarm останавливает итерацию, когда происходит любое из следующих событий.

Опция остановкиОстановка тестаВыходной флаг
MaxStallIterations и FunctionToleranceОтносительное изменение наилучшего значения целевой функции g за последнее MaxStallIterations итерации меньше FunctionTolerance.1
MaxIterationsКоличество итераций достигает MaxIterations.0
OutputFcn или PlotFcnOutputFcn или PlotFcn может остановить итерации.-1
ObjectiveLimitЛучшее значение целевой функции g меньше ObjectiveLimit.-3
MaxStallTimeЛучшее значение целевой функции g не изменился в последнем MaxStallTime секунд.-4
MaxTimeВремя выполнения функции превышает MaxTime секунд.-5

Кроме того, если вы устанавливаете FunValCheck опция для 'on', и рой имеет частицы с NaN, Inf, или комплексные значения целевых функций, particleswarm останавливает и выдает ошибку.