Установите опции для ga
при помощи optimoptions
.
options = optimoptions('ga','Option1','value1','Option2','value2');
Некоторые опции перечислены в italics
. Эти опции не появляются в листинге это optimoptions
возвращается. Видеть почему'optimoptions
скрывает эти значения опции, см. Опции, которые Скрывает optimoptions.
Убедитесь, что вы передаете опции решателю. В противном случае, patternsearch
использует значения опции по умолчанию.
[x,fval] = ga(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
PlotFcn
задает функцию построения графика или функции, вызванные на каждой итерации ga
или gamultiobj
. Установите PlotFcn
опция, чтобы быть встроенным именем функции построения графика или указателем на функцию построения графика. Можно остановить алгоритм в любое время путем нажатия кнопки Stop на окне графика. Например, чтобы отобразить лучшее значение функции, установите options
можно следующим образом:
options = optimoptions('ga','PlotFcn','gaplotbestf');
Чтобы отобразить несколько графиков, используйте массив ячеек встроенных имен функции построения графика или cell-массива указателей на функцию:
options = optimoptions('patternsearch','PlotFcn', {@plotfun1, @plotfun2, ...});
где @plotfun1
, @plotfun2
, и так далее указатели на функцию в функции построения графика. Если вы задаете больше чем одну функцию построения графика, все графики появляются как подграфики в том же окне. Щелкните правой кнопкой по любому подграфику, чтобы получить увеличенную версию в отдельном окне рисунка.
Доступные функции построения графика для ga
или для gamultiobj
:
'gaplotscorediversity'
строит гистограмму баллов при каждой генерации.
'gaplotstopping'
уровни критерия остановки графиков.
'gaplotgenealogy'
строит генеалогию индивидуумов. На линии от одной генерации до следующего наносят цветную маркировку можно следующим образом:
Красные линии указывают на дочерние элементы мутации.
Синие линии указывают на перекрестные дочерние элементы.
Черные линии указывают на элитных индивидуумов.
'gaplotscores'
строит множество индивидуумов при каждой генерации.
'gaplotdistance'
строит среднее расстояние между индивидуумами при каждой генерации.
'gaplotselection'
строит гистограмму родительских элементов.
'gaplotmaxconstr'
строит максимальное нелинейное нарушение ограничений при каждой генерации. Для ga
, доступный только, когда NonlinearConstraintAlgorithm
опцией является 'auglag'
(значение по умолчанию для проблем нецелого числа). Поэтому не доступный для ограниченных целым числом проблем, когда они используют 'penalty'
нелинейный ограничительный алгоритм.
Можно также создать и использовать собственную функцию построения графика. Структура Функций построения графика описывает структуру пользовательской функции построения графика. Передайте любую пользовательскую функцию как указатель на функцию.
Следующие функции построения графика доступны для ga
только:
'gaplotbestf'
строит лучшее значение баллов и средний счет по сравнению с генерацией.
'gaplotbestindiv'
строит векторные записи индивидуума с лучшим значением функции фитнеса в каждой генерации.
'gaplotexpectation'
строит ожидаемое количество дочерних элементов по сравнению с необработанными баллами при каждой генерации.
'gaplotrange'
строит минимум, максимум и средние значения баллов в каждой генерации.
Следующие функции построения графика доступны для gamultiobj
только:
'gaplotpareto'
строит переднюю сторону Парето для первых двух целевых функций.
'gaplotparetodistance'
строит столбчатую диаграмму расстояния каждого индивидуума от его соседей.
'gaplotrankhist'
строит гистограмму рангов индивидуумов. Индивидуумы ранга 1 находятся на границе Парето. Индивидуумы ранга 2 ниже, чем по крайней мере один ранг 1 индивидуум, но не ниже, чем какие-либо индивидуумы от других рангов и т.д.
'gaplotspread'
строит средний спред в зависимости от номера итерации.
Первая линия функции построения графика имеет эту форму:
function state = plotfun(options,state,flag)
Входные параметры к функции
options
— Структура, содержащая все текущие настройки опций.
state
— Структура, содержащая информацию о текущем поколении. Структура состояния описывает поля state
.
flag
— Описание этапа алгоритм находится в настоящее время в. Для получения дополнительной информации см. Опции Выходной функции.
Передача Дополнительных Параметров объясняет, как предоставить дополнительные параметры функции.
Выходной аргумент state
структура состояния также. Передайте входной параметр, измененный, если вам нравится; смотрите Изменение Структуры состояния. Чтобы остановить итерации, установите state.StopFlag
к непустому вектору символов, такому как 'y'
.
ga. Структура состояния для ga
, который является входным параметром, чтобы построить, мутация и выходные функции, содержат следующие поля:
Generation
— Номер текущего поколения.
StartTime
— Время, когда генетический алгоритм, запущенный, возвращенный tic
.
StopFlag
— Причина остановки, вектора символов.
LastImprovement
— Генерация, при которой произошло последнее улучшение значения фитнеса.
LastImprovementTime
— Время, в которое произошло последнее улучшение.
Best
— Вектор, содержащий лучшую оценку в каждой генерации.
how
— 'augLag'
нелинейный ограничительный алгоритм сообщает об одном из следующих действий: 'Infeasible point'
, 'Update multipliers'
, или 'Increase penalty'
; смотрите Увеличенный лагранжевый Генетический алгоритм.
FunEval
— Совокупное число вычислений функции.
Expectation
— Ожидание выбора индивидуумов.
Selection
— Индексы индивидуумов выбраны для элиты, перекрестного соединения и мутации.
Population
— Население в текущем поколении.
Score
— Множество текущего населения.
NonlinIneq
— Нелинейные ограничения неравенства в текущей точке, представьте только, когда нелинейная ограничительная функция задана, нет никаких целочисленных переменных, flag
не 'interrupt'
, и NonlinearConstraintAlgorithm
'auglag'
.
NonlinEq
— Нелинейные ограничения равенства в текущей точке, представьте только, когда нелинейная ограничительная функция задана, нет никаких целочисленных переменных, flag
не 'interrupt'
, и NonlinearConstraintAlgorithm
'auglag'
.
EvalElites
— Логическое значение, указывающее, ли ga
выполняет функцию фитнеса элитных индивидуумов. Первоначально, этим значением является true
. В первом поколении, если элитные индивидуумы оценивают к их предыдущим значениям (который указывает, что функция фитнеса детерминирована), затем это значение становится false
по умолчанию для последующих итераций. Когда EvalElites
false
, ga
не переоценивает функцию фитнеса элитных индивидуумов. Можно заменить это поведение в пользовательской функции построения графика или пользовательской выходной функции путем изменения выхода state.EvalElites
.
HaveDuplicates
— Логическое значение, указывающее, ли ga
добавляют дублирующиеся индивидуумы для начальной генеральной совокупности. ga
использует маленькую относительную погрешность, чтобы определить, дублирован ли индивидуум или уникален. Если HaveDuplicates
true
то ga
определяет местоположение уникальных индивидуумов и выполняет функцию фитнеса только однажды для каждого уникального индивидуума. ga
копирует фитнес и ограничительные значения функции, чтобы скопировать индивидуумов. ga
повторяет тест в каждой генерации, пока все индивидуумы не уникальны. Тест берет, заказывают n*m*log(m)
операции, где m
численность населения и n
nvars
. Чтобы заменить этот тест в пользовательской функции построения графика или пользовательской выходной функции, установите выход state.HaveDuplicates
к false
.
gamultiobj. Структура состояния для gamultiobj
, который является входным параметром, чтобы построить, мутация и выходные функции, содержат следующие поля:
Population
— Население в текущем поколении
Score
— Множество текущего населения, Population
- nObjectives
матрица, где nObjectives
количество целей
Generation
— Номер текущего поколения
StartTime
— Время, когда генетический алгоритм, запущенный, возвращенный tic
StopFlag
— Причина остановки, вектора символов
FunEval
— Совокупное число вычислений функции
Selection
— Индексы индивидуумов выбраны для элиты, перекрестного соединения и мутации
Rank
— Вектор из рангов членов в населении
Distance
— Вектор из расстояний каждого члена населения самому близкому соседнему члену
AverageDistance
— Стандартное отклонение (не средний) Distance
Spread
— Вектор, где записи являются распространением в каждой генерации
mIneq
— Количество нелинейных ограничений неравенства
mEq
— Количество нелинейных ограничений равенства
mAll
— Общее количество нелинейных ограничений, mAll
= mIneq
+ mEq
C
— Нелинейные ограничения неравенства в текущей точке, PopulationSize
- mIneq
матрица
Ceq
— Нелинейные ограничения равенства в текущей точке, PopulationSize
- mEq
матрица
isFeas
— Выполнимость населения, логического вектора с PopulationSize
элементы
maxLinInfeas
— Максимальная недопустимость относительно линейных ограничений для населения
Опции населения позволяют вам задать параметры населения, которое использует генетический алгоритм.
PopulationType
задает тип входа к функции фитнеса. Типы и их ограничения:
'doubleVector'
— Используйте эту опцию, если индивидуумы в населении имеют, вводят double
. Используйте эту опцию для частично-целочисленного программирования. Это значение по умолчанию.
'bitstring'
— Используйте эту опцию, если у индивидуумов в населении есть компоненты, которые являются 0
или 1
.
Внимание
Индивидуумы в Bit string
население является векторами из типа double
, не строки или символы.
Для CreationFcn
и MutationFcn
, используйте 'gacreationuniform'
и 'mutationuniform'
или указатели на пользовательские функции. Для CrossoverFcn
, используйте 'crossoverscattered'
, 'crossoversinglepoint'
, 'crossovertwopoint'
, или указатель на пользовательскую функцию. Вы не можете использовать HybridFcn
, и ga
игнорирует все ограничения, включая границы, линейные ограничения и нелинейные ограничения.
'custom'
— Указывает на пользовательский тип населения. В этом случае необходимо также использовать пользовательский CrossoverFcn
и MutationFcn
. Необходимо обеспечить или пользовательскую функцию создания или InitialPopulationMatrix
. Вы не можете использовать HybridFcn
, и ga
игнорирует все ограничения, включая границы, линейные ограничения и нелинейные ограничения.
PopulationSize
задает, сколько индивидуумов там находится в каждой генерации. С размером значительной части населения генетический алгоритм ищет пробел решения более тщательно, таким образом, уменьшая шанс, что алгоритм возвращает локальный минимум, который не является глобальным минимумом. Однако размер значительной части населения также заставляет алгоритм запускаться более медленно. Значением по умолчанию является '50 when numberOfVariables <= 5, else 200'
.
Если вы устанавливаете PopulationSize
к вектору генетический алгоритм создает несколько подпопуляций, номер которых является длиной вектора. Размер каждого поднаселения является соответствующей записью вектора. Обратите внимание на то, что эта опция не полезна. См. Опции Миграции.
CreationFcn
задает функцию, которая создает начальную генеральную совокупность для ga
. Не задавайте функцию создания с целочисленными задачами потому что ga
переопределения любой выбор вы делаете. Выберите из:
[]
использует функцию создания по умолчанию для вашего проблемного типа.
'gacreationuniform'
создает случайную начальную генеральную совокупность с равномерным распределением. Это - значение по умолчанию, когда нет никаких линейных ограничений, или когда существуют целочисленные ограничения. Равномерное распределение находится в области значений начальной генеральной совокупности (InitialPopulationRange
). Значения по умолчанию для InitialPopulationRange
[-10;10]
для каждого компонента или [-9999;10001]
когда существуют целочисленные ограничения. Эти границы смещены и масштабируются, чтобы совпадать с любыми существующими границами lb
и ub
.
Внимание
Не используйте 'gacreationuniform'
когда у вас есть линейные ограничения. В противном случае ваше население не может удовлетворить линейным ограничениям.
'gacreationlinearfeasible'
значение по умолчанию, когда существуют линейные ограничения и никакие целочисленные ограничения. Этот выбор создает случайную начальную генеральную совокупность, которая удовлетворяет всем границам и линейным ограничениям. Если существуют линейные ограничения, 'gacreationlinearfeasible'
создает многих индивидуумов на контурах области ограничений и создает хорошо рассеянное население. 'gacreationlinearfeasible'
игнорирует InitialPopulationRange
. 'gacreationlinearfeasible'
вызовы linprog
создать выполнимое население относительно границ и линейных ограничений.
Для примера, показывающего его поведение, смотрите Пользовательскую Функцию построения графика и Линейные Ограничения в ga.
'gacreationnonlinearfeasible'
функция создания по умолчанию для 'penalty'
нелинейный ограничительный алгоритм. Для получения дополнительной информации смотрите Параметры ограничения.
Указатель на функцию позволяет вам записать свою собственную функцию создания, которая должна сгенерировать данные типа, который вы задаете в PopulationType
. Например,
options = optimoptions('ga','CreationFcn',@myfun);
Ваша функция создания должна иметь следующий синтаксис вызова.
function Population = myfun(GenomeLength, FitnessFcn, options)
Входные параметры к функции:
Genomelength
— Количество независимых переменных для функции фитнеса
FitnessFcn
— Функция фитнеса
options
Опции
Функция возвращает Population
, начальная генеральная совокупность для генетического алгоритма.
Передача Дополнительных Параметров объясняет, как предоставить дополнительные параметры функции.
Внимание
Когда вы имеете границы или линейные ограничения, гарантируете, что ваша функция создания создает индивидуумов, которые удовлетворяют этим ограничениям. В противном случае ваше население не может удовлетворить ограничениям.
InitialPopulationMatrix
задает начальную генеральную совокупность для генетического алгоритма. Значением по умолчанию является []
, в этом случае ga
использует CreationFcn
по умолчанию создать начальную генеральную совокупность. Если вы вводите непустой массив в
InitialPopulationMatrix
, массив должен иметь не больше, чем PopulationSize
строки, и точно nvars
столбцы, где nvars
количество переменных, второго входа к ga
или gamultiobj
. Если у вас есть начальная генеральная совокупность partial, означая меньше, чем PopulationSize
строки, затем генетический алгоритм вызывает CreationFcn
сгенерировать остающихся индивидуумов.
InitialScoreMatrix
задает начальную музыку к начальной генеральной совокупности. Начальные баллы могут также быть частичными. Не задавайте начальные баллы с целочисленными задачами потому что ga
переопределения любой выбор вы делаете.
InitialPopulationRange
указывает диапазон векторов в начальной генеральной совокупности, которая сгенерирована gacreationuniform
функция создания. Можно установить InitialPopulationRange
быть матрицей с двумя строками и nvars
столбцы, каждый столбец которых имеет форму [lb;ub]
, где lb
нижняя граница и ub
верхняя граница для записей в той координате. Если вы задаете InitialPopulationRange
чтобы быть 2 1 вектор, каждая запись расширена до постоянной строки длины nvars
. Если вы не задаете InitialPopulationRange
, значением по умолчанию является [-10;10]
([-1e4+1;1e4+1]
для ограниченных целым числом проблем), измененный, чтобы совпадать с любыми существующими границами. 'gacreationlinearfeasible'
игнорирует InitialPopulationRange
. Смотрите Область значений Начальной буквы Набора для примера.
Масштабирование фитнеса преобразует необработанные баллы фитнеса, которые возвращены функцией фитнеса в значения в области значений, которая подходит для функции выбора.
FitnessScalingFcn
задает функцию, которая выполняет масштабирование. Опции
'fitscalingrank'
— Функция масштабирования фитнеса по умолчанию, 'fitscalingrank'
, масштабирует необработанные баллы на основе ранга каждого индивидуума вместо его счета. Ранг индивидуума является своим положением в отсортированных баллах. Индивидуум с рангом r масштабировал счет, пропорциональный . Таким образом, масштабированный счет самого подходящего индивидуума пропорционален 1, масштабированный счет следующего самого подходящего пропорционален , и так далее. Займите место масштабирование фитнеса удаляет эффект распространения необработанных баллов. Квадратный корень заставляет плохо оцениваемых индивидуумов более близко равняться в счете, сравненном с выигрышем ранга. Для получения дополнительной информации смотрите, что Фитнес Масштабируется.
'fitscalingprop'
— Пропорциональное масштабирование делает масштабированное значение индивидуума пропорциональным его необработанному счету фитнеса.
'fitscalingtop'
— Главное масштабирование масштабирует главных индивидуумов одинаково. Можно изменить главное масштабирование с помощью дополнительного параметра:
options = optimoptions('ga','FitnessScalingFcn',{@fitscalingtop,quantity})
quantity
задает количество индивидуумов, которые присвоены положительные масштабированные значения. quantity
может быть целое число от 1 до численности населения или части от 0 до 1 определения части численности населения. Значением по умолчанию является 0.4
. Каждый из индивидуумов, которые производят потомков, присвоен равное масштабированное значение, в то время как остальные присвоены значение 0. Масштабированные значения имеют форму [01/n 1/n 0 0 1/n 0 0 1/n...].
'fitscalingshiftlinear'
— Переключите линейные шкалы масштабирования необработанные баллы так, чтобы ожидание самого подходящего индивидуума было равно постоянному названному rate
умноженный на среднюю оценку. Можно изменить rate
параметр:
options = optimoptions('ga','FitnessScalingFcn',... {@fitscalingshiftlinear, rate})
Значение по умолчанию rate
2
.
Указатель на функцию позволяет вам записать свою собственную функцию масштабирования.
options = optimoptions('ga','FitnessScalingFcn',@myfun);
Ваша функция масштабирования должна иметь следующий синтаксис вызова:
function expectation = myfun(scores, nParents)
Входные параметры к функции:
scores
— Вектор из скаляров, один для каждого члена населения
nParents
— Количество родительских элементов необходимо от этого населения
Функция возвращает expectation
, вектор-столбец скаляров той же длины как scores
, предоставление масштабированных значений каждого члена населения. Сумма записей expectation
должен равняться nParents
.
Передача Дополнительных Параметров объясняет, как предоставить дополнительные параметры функции.
Смотрите, что Фитнес Масштабируется для получения дополнительной информации.
Опции выбора задают, как генетический алгоритм выбирает родительские элементы для следующего поколения.
SelectionFcn
опция задает функцию выбора. Не используйте с целочисленными задачами.
gamultiobj
использование только 'selectiontournament'
функция выбора.
Для ga
опции:
'selectionstochunif'
— ga
функция выбора по умолчанию, 'selectionstochunif'
, размечает линию, в которой каждый родительский элемент соответствует разделу линии длины, пропорциональной ее масштабированному значению. Алгоритм проходит линия с шагом равного размера. На каждом шаге алгоритм выделяет родительский элемент от раздела, на который это приземляется. Первый шаг является универсальным случайным числом меньше, чем размер шага.
'selectionremainder'
— Родительские элементы присвоений выбора остатка детерминировано от целой части масштабированного значения каждого индивидуума и затем используют выбор рулетки на остающейся дробной части. Например, если масштабированное значение индивидуума 2.3, тот индивидуум перечислен дважды как родительский элемент, потому что целая часть равняется 2. После того, как родительские элементы были присвоены согласно целым частям масштабированных значений, остальная часть родительских элементов выбраны стохастическим образом. Вероятность, что родительский элемент выбран на этом шаге, пропорциональна дробной части своего масштабированного значения.
'selectionuniform'
— Универсальный выбор выбирает родительские элементы с помощью ожиданий и количества родительских элементов. Универсальный выбор полезен для отладки и тестирования, но не является очень эффективной поисковой стратегией.
'selectionroulette'
— Выбор рулетки выбирает родительские элементы путем симуляции колеса рулетки, в котором область раздела колеса, соответствующего индивидууму, пропорциональна ожиданию индивидуума. Алгоритм использует случайное число, чтобы выбрать один из разделов с вероятностью, равной ее области.
'selectiontournament'
— Выбор турнира выбирает каждый родительский элемент путем выбора size
проигрыватели наугад и затем выбор лучшего индивидуума из того набора, чтобы быть родительским элементом. size
должны быть по крайней мере 2. Значение по умолчанию size
4
. Установите size
к различному значению можно следующим образом:
options = optimoptions('ga','SelectionFcn',... {@selectiontournament,size})
Когда NonlinearConstraintAlgorithm
Penalty
, ga
использование 'selectiontournament'
с размером 2
.
Указатель на функцию позволяет вам записать свою собственную функцию выбора.
options = optimoptions('ga','SelectionFcn',@myfun);
Ваша функция выбора должна иметь следующий синтаксис вызова:
function parents = myfun(expectation, nParents, options)
ga
предоставляет входным параметрам expectation
, nParents
, и options
. Ваша функция возвращает индексы родительских элементов.
Входные параметры к функции:
expectation
Для ga
, expectation
вектор-столбец масштабированной физической формы каждого члена населения. Масштабирование прибывает из Опций Масштабирования Фитнеса.
Совет
Можно гарантировать, что у вас есть вектор-столбец при помощи expectation(:,1)
. Например, edit selectionstochunif
или любая из других встроенных функций выбора.
Для gamultiobj
, expectation
матрица, первый столбец которой является отрицанием ранга индивидуумов, и чей второй столбец является мерой по расстоянию индивидуумов. См. Многоцелевые Опции.
nParents
— Количество родительских элементов, чтобы выбрать.
options
— Генетический алгоритм options
.
Функция возвращает parents
, вектор-строка из длины nParents
содержа индексы родительских элементов, которые вы выбираете.
Передача Дополнительных Параметров объясняет, как предоставить дополнительные параметры функции.
Смотрите Выбор для получения дополнительной информации.
Опции воспроизведения задают, как генетический алгоритм создает дочерние элементы для следующего поколения.
EliteCount
задает количество индивидуумов, которые, как гарантируют, выживут к следующему поколению. Установите EliteCount
быть положительным целым числом, меньше чем или равным численности населения. Значением по умолчанию является ceil(0.05*PopulationSize)
для непрерывных проблем и 0.05*(default PopulationSize)
для смешанных целочисленных задач.
CrossoverFraction
задает часть следующего поколения, кроме элитных дочерних элементов, которые производятся перекрестным соединением. Установите CrossoverFraction
быть частью между 0
и 1
. Значением по умолчанию является 0.8
.
Смотрите Установку Перекрестной Части для примера.
Опции мутации задают, как генетический алгоритм вносит маленькие случайные изменения в индивидуумах в населении, чтобы создать дочерние элементы мутации. Мутация обеспечивает генетическое разнообразие и позволяет генетическому алгоритму искать на большем пространстве. Задайте функцию мутации в MutationFcn
опция. Не используйте с целочисленными задачами.
MutationFcn
опции:
'mutationgaussian'
— Мутация по умолчанию функционирует для неограниченных проблем, 'mutationgaussian'
, добавляет случайное число, взятое из Распределения Гаусса со средним значением 0 к каждой записи родительского вектора. Стандартное отклонение этого распределения определяется параметрами scale
и shrink
, и InitialPopulationRange
опция. Установите scale
и shrink
можно следующим образом:
options = optimoptions('ga','MutationFcn', ... {@mutationgaussian, scale, shrink})
scale
параметр определяет стандартное отклонение в первом поколении. Если вы устанавливаете InitialPopulationRange
быть 2 1 векторным v
, начальное стандартное отклонение является тем же самым во всех координатах родительского вектора и дано scale
*(v(2)-v(1))
.
Если вы устанавливаете InitialPopulationRange
быть векторным v
с двумя строками и nvars
столбцы, начальное стандартное отклонение в координатном i
из родительского вектора дан scale
*(v(i,2) - v(i,1))
.
shrink
параметр управляет, как стандартное отклонение уменьшается, когда поколения проходят. Если вы устанавливаете InitialPopulationRange
чтобы быть 2 1, вектор, стандартное отклонение в k th генерация, σ k, являются тем же самым во всех координатах родительского вектора и даны рекурсивной формулой
Если вы устанавливаете InitialPopulationRange
быть вектором с двумя строками и nvars
столбцы, стандартное отклонение в координатном i родительского вектора в k th генерация, σi,k, даны рекурсивной формулой
Если вы устанавливаете shrink
к 1
, алгоритм уменьшает стандартное отклонение в каждой координате линейно, пока это не достигает 0 при последней генерации, достигнут. Отрицательная величина shrink
заставляет стандартное отклонение расти.
Значение по умолчанию обоих scale
и shrink
1.
Внимание
Не используйте mutationgaussian
когда у вас есть границы или линейные ограничения. В противном случае ваше население не обязательно удовлетворит ограничениям. Вместо этого используйте 'mutationadaptfeasible'
или пользовательская функция мутации, которая удовлетворяет линейным ограничениям.
'mutationuniform'
— Универсальная мутация является двухступенчатым процессом. Во-первых, алгоритм выбирает часть векторных записей индивидуума для мутации, где каждая запись имеет вероятность rate
из того, чтобы быть видоизмененным. Значение по умолчанию rate
0.01
. На втором шаге алгоритм заменяет каждую выбранную запись случайным числом, выбранным однородно из области значений для той записи.
Изменить значение по умолчанию rate
,
options = optimoptions('ga','MutationFcn', {@mutationuniform, rate})
Внимание
Не используйте mutationuniform
когда у вас есть границы или линейные ограничения. В противном случае ваше население не обязательно удовлетворит ограничениям. Вместо этого используйте 'mutationadaptfeasible'
или пользовательская функция мутации, которая удовлетворяет линейным ограничениям.
'mutationadaptfeasible'
, мутация по умолчанию функционирует, когда существуют ограничения, случайным образом генерирует направления, которые адаптивны относительно последней успешной или неудачной генерации. Мутация выбирает направление и длину шага, которая удовлетворяет границам и линейным ограничениям.
Указатель на функцию позволяет вам записать свою собственную функцию мутации.
options = optimoptions('ga','MutationFcn',@myfun);
Ваша функция мутации должна иметь этот синтаксис вызова:
function mutationChildren = myfun(parents, options, nvars,
FitnessFcn, state, thisScore, thisPopulation)
Аргументы к функции
parents
— Вектор-строка из родительских элементов выбран функцией выбора
options
Опции
nvars
— Количество переменных
FitnessFcn
— Функция фитнеса
state
— Структура, содержащая информацию о текущем поколении. Структура состояния описывает поля state
.
thisScore
— Вектор из множества текущего населения
thisPopulation
— Матрица индивидуумов в текущем населении
Функция возвращает mutationChildren
— видоизмененные потомки — как матрица, где строки соответствуют дочерним элементам. Количеством столбцов матрицы является nvars
.
Передача Дополнительных Параметров объясняет, как предоставить дополнительные параметры функции.
Внимание
Когда вы имеете границы или линейные ограничения, гарантируете, что ваша функция мутации создает индивидуумов, которые удовлетворяют этим ограничениям. В противном случае ваше население не обязательно удовлетворит ограничениям.
Перекрестные опции задают, как генетический алгоритм комбинирует двух индивидуумов или родительские элементы, чтобы сформировать перекрестный дочерний элемент для следующего поколения.
CrossoverFcn
задает функцию, которая выполняет перекрестное соединение. Не используйте с целочисленными задачами. Можно выбрать из следующих функций:
'crossoverscattered'
, перекрестная функция по умолчанию для проблем без линейных ограничений, создает случайный бинарный вектор и выбирает гены, где вектор является 1 от первого родительского элемента и генами, где вектор является 0 от второго родительского элемента, и комбинирует гены, чтобы сформировать дочерний элемент. Например, если p1
и p2
родительские элементы
p1 = [a b c d e f g h] p2 = [1 2 3 4 5 6 7 8]
и бинарный вектор [1 1 0 0 1 0 0 0], функция возвращает следующий дочерний элемент:
child1 = [a b 3 4 e 6 7 8]
Внимание
Когда ваша проблема имеет линейные ограничения, 'crossoverscattered'
может дать плохо распределенное население. В этом случае используйте различную перекрестную функцию, такую как 'crossoverintermediate'
.
'crossoversinglepoint'
выбирает случайное целое число n между 1 и nvars
и затем
Выбирает векторные записи, пронумерованные меньше чем или равный n от первого родительского элемента.
Выбирает векторные записи, пронумерованные больше, чем n от второго родительского элемента.
Конкатенации этих записей, чтобы сформировать дочерний вектор.
Например, если p1
и p2
родительские элементы
p1 = [a b c d e f g h] p2 = [1 2 3 4 5 6 7 8]
и точка перехода равняется 3, функция возвращает следующий дочерний элемент.
child = [a b c 4 5 6 7 8]
Внимание
Когда ваша проблема имеет линейные ограничения, 'crossoversinglepoint'
может дать плохо распределенное население. В этом случае используйте различную перекрестную функцию, такую как 'crossoverintermediate'
.
'crossovertwopoint'
выбирает два случайных целых числа m
и n
между 1
и nvars
. Функция выбирает
Векторные записи, пронумерованные меньше чем или равный m
от первого родительского элемента
Векторные записи пронумерованы от m+1
к n
, включительно, от второго родительского элемента
Векторные записи, пронумерованные больше, чем n
от первого родительского элемента.
Алгоритм затем конкатенирует эти гены, чтобы сформировать один ген. Например, если p1
и p2
родительские элементы
p1 = [a b c d e f g h] p2 = [1 2 3 4 5 6 7 8]
и точки перехода равняются 3 и 6, функция возвращает следующий дочерний элемент.
child = [a b c 4 5 6 g h]
Внимание
Когда ваша проблема имеет линейные ограничения, 'crossovertwopoint'
может дать плохо распределенное население. В этом случае используйте различную перекрестную функцию, такую как 'crossoverintermediate'
.
'crossoverintermediate'
, перекрестная функция по умолчанию, когда существуют линейные ограничения, создает дочерние элементы путем взятия взвешенного среднего родительских элементов. Можно задать веса одним параметром, ratio
, который может быть скаляром или вектором-строкой из длины nvars
. Значение по умолчанию ratio
вектор из всех 1's. Установите ratio
параметр можно следующим образом.
options = optimoptions('ga','CrossoverFcn', ... {@crossoverintermediate, ratio});
'crossoverintermediate'
создает дочерний элемент из parent1
и parent2
использование следующей формулы.
child = parent1 + rand * Ratio * ( parent2 - parent1)
Если все записи ratio
находитесь в диапазоне [0, 1], произведенные дочерние элементы в гиперкубе, заданном путем размещения родительских элементов в противоположных вершинах. Если ratio
не находится в той области значений, дочерняя сила лежат вне гиперкуба. Если ratio
скаляр, затем вся дочерняя ложь на линии между родительскими элементами.
'crossoverheuristic'
возвращает дочерний элемент, который лежит на линии, содержащей два родительских элемента, маленькое расстояние далеко от родительского элемента с лучшим значением фитнеса в направлении далеко от родительского элемента с худшим значением фитнеса. Можно задать, как далеко дочерним элементом является от лучшего родительского элемента параметром ratio
. Значение по умолчанию ratio
1.2. Установите ratio
параметр можно следующим образом.
options = optimoptions('ga','CrossoverFcn',... {@crossoverheuristic,ratio});
Если parent1
и parent2
родительские элементы и parent1
имеет лучшее значение фитнеса, функция возвращает дочерний элемент
child = parent2 + ratio * (parent1 - parent2);
Внимание
Когда ваша проблема имеет линейные ограничения, 'crossoverheuristic'
может дать плохо распределенное население. В этом случае используйте различную перекрестную функцию, такую как 'crossoverintermediate'
.
'crossoverarithmetic'
создает дочерние элементы, которые являются взвешенным средним арифметическим двух родительских элементов. Дочерние элементы всегда выполнимы относительно линейных ограничений и границ.
Указатель на функцию позволяет вам записать свою собственную перекрестную функцию.
options = optimoptions('ga','CrossoverFcn',@myfun);
Ваша перекрестная функция должна иметь следующий синтаксис вызова.
xoverKids = myfun(parents, options, nvars, FitnessFcn, ...
unused,thisPopulation)
Аргументы к функции
parents
— Вектор-строка из родительских элементов выбран функцией выбора
options
Опции
nvars
— Количество переменных
FitnessFcn
— Функция фитнеса
unused
— Заполнитель, не используемый
thisPopulation
— Матрица, представляющая текущее население. Количеством строк матрицы является PopulationSize
и количеством столбцов является nvars
.
Функция возвращает xoverKids
— перекрестные потомки — как матрица, где строки соответствуют дочерним элементам. Количеством столбцов матрицы является nvars
.
Передача Дополнительных Параметров объясняет, как предоставить дополнительные параметры функции.
Внимание
Когда вы имеете границы или линейные ограничения, гарантируете, что ваша перекрестная функция создает индивидуумов, которые удовлетворяют этим ограничениям. В противном случае ваше население не обязательно удовлетворит ограничениям.
Примечание
Subpopulations относится к форме параллельной обработки для генетического алгоритма. ga
в настоящее время не поддерживает эту форму. В подпопуляциях каждый рабочий размещает много индивидуумов. Эти индивидуумы являются поднаселением. Рабочий развивает поднаселение независимо от других рабочих, кроме тех случаев, когда миграция заставляет некоторых индивидуумов перемещаться между рабочими.
Поскольку ga
в настоящее время не поддерживает эту форму параллельной обработки, нет никакого преимущества к установке PopulationSize
к вектору, или к установке MigrationDirection
, MigrationInterval
, или MigrationFraction
опции.
Опции миграции задают, как индивидуумы перемещаются между подпопуляциями. Миграция происходит, если вы устанавливаете PopulationSize
быть вектором из длины, больше, чем 1. Когда миграция происходит, лучшие индивидуумы от одного поднаселения заменяют худших индивидуумов в другом поднаселении. Копируются индивидуумы, которые мигрируют от одного поднаселения на другого. Они не удалены из исходного поднаселения.
Можно управлять, как миграция происходит следующими тремя опциями:
MigrationDirection
— Миграция может произойти в одной или обоих направлениях.
Если вы устанавливаете MigrationDirection
к 'forward'
, миграция происходит к последнему поднаселению. Таким образом, n th поднаселение мигрирует в (n +1) th поднаселение.
Если вы устанавливаете MigrationDirection
к 'both'
, n th поднаселение мигрирует в обоих (n –1) th и (n +1) th поднаселение.
Миграция переносится в концах подпопуляций. Таким образом, последнее поднаселение мигрирует в первое, и первое может мигрировать в последнее.
MigrationInterval
— Задает сколько передачи генерации между миграциями. Например, если вы устанавливаете MigrationInterval
к 20
, миграция происходит каждые 20 поколений.
MigrationFraction
— Задает, сколько индивидуумов перемещается между подпопуляциями. MigrationFraction
задает часть меньших из двух подпопуляций, которые перемещаются. Например, если индивидуумы мигрируют от поднаселения 50 индивидуумов в поднаселение 100 индивидуумов, и вы устанавливаете MigrationFraction
к 0.1
, количество индивидуумов, которые мигрируют, 0.1*50=5.
Параметры ограничения относятся к нелинейному ограничительному решателю. Для получения дополнительной информации на алгоритме, смотрите Нелинейные Ограничительные Алгоритмы решателя.
Выберите между нелинейными ограничительными алгоритмами путем установки NonlinearConstraintAlgorithm
опция к 'auglag'
(Увеличенная функция Лагранжа) или 'penalty'
(Алгоритм штрафа).
InitialPenalty
— Задает начальное значение параметра штрафа, который используется нелинейным ограничительным алгоритмом. InitialPenalty
должен быть больше или быть равен 1
, и имеет значение по умолчанию 10
.
PenaltyFactor
— Увеличивает параметр штрафа, когда задача не решена к требуемой точности, и ограничениям не удовлетворяют. PenaltyFactor
должен быть больше 1
, и имеет значение по умолчанию 100
.
Алгоритм штрафа использует 'gacreationnonlinearfeasible'
функция создания по умолчанию. Эта функция создания использование fmincon
найти выполнимых индивидуумов. 'gacreationnonlinearfeasible'
запускается fmincon
от множества начальных точек в границах от InitialPopulationRange
опция. Опционально, 'gacreationnonlinearfeasible'
может запуститься fmincon
параллельно на начальных точках.
Можно задать настраивающиеся параметры для 'gacreationnonlinearfeasible'
использование следующих пар "имя-значение".
Имя | Значение |
---|---|
SolverOpts | fmincon опции, созданное использование optimoptions или optimset . |
UseParallel | Когда true запущенный fmincon параллельно на начальных точках; значением по умолчанию является false . |
NumStartPts | Количество стартовых точек, положительного целого числа до sum(PopulationSize) в значении. |
Включайте пары "имя-значение" в массив ячеек наряду с @gacreationnonlinearfeasible
.
options = optimoptions('ga','CreationFcn',{@gacreationnonlinearfeasible
,...
'UseParallel',true,'NumStartPts',20});
Многоцелевые опции задают характеристику параметров gamultiobj
алгоритм. Можно задать следующие параметры:
ParetoFraction
— Устанавливает часть индивидуумов сохранять первую переднюю сторону Парето, в то время как решатель выбирает индивидуумов из более высоких передних сторон. Эта опция является скаляром между 0 и 1.
Примечание
Часть индивидуумов на первой передней стороне Парето может превысить ParetoFraction
. Это происходит, когда существует слишком мало индивидуумов других рангов на шаге 6 Итераций.
DistanceMeasureFcn
— Задает указатель на функцию, которая вычисляет меру по расстоянию индивидуумов, вычисленных на пробеле переменной решения (генотип, который также называют пробелом переменной проекта) или в функциональном пространстве (фенотип). Например, функцией меры по расстоянию по умолчанию является 'distancecrowding'
в функциональном пространстве, которое совпадает с {@distancecrowding,'phenotype'}
.
“Расстояние” измеряет давку каждого индивидуума в населении. Выберите между следующим:
'distancecrowding'
, или эквивалентный {@distancecrowding,'phenotype'}
— Измерьте расстояние в функциональном пространстве фитнеса.
{@distancecrowding,'genotype'}
— Измерьте расстояние на пробеле переменной решения.
@distancefunction
— Запишите пользовательской функции расстояния использование следующего шаблона.
function distance = distancefunction(pop,score,options) % Uncomment one of the following two lines, or use a combination of both % y = score; % phenotype % y = pop; % genotype popSize = size(y,1); % number of individuals numData = size(y,2); % number of dimensions or fitness functions distance = zeros(popSize,1); % allocate the output % Compute distance here
gamultiobj
передает население в pop
, вычисленная музыка к населению в scores
, и опции в options
. Ваша функция расстояния возвращает расстояние от каждого члена населения к ссылке, такой как самый близкий сосед в некотором смысле. Для примера отредактируйте встроенный файл distancecrowding.m
.
ga
Гибридная функцияГибридная функция является другой функцией минимизации, которая выполняется после генетического алгоритма, завершает работу. Можно задать гибридную функцию в HybridFcn
опция. Не используйте с целочисленными задачами. Выбор
[]
— Никакая гибридная функция.
'fminsearch'
— Использует функцию MATLAB® fminsearch
выполнять безусловную минимизацию.
'patternsearch'
— Использует поиск шаблона, чтобы выполнить ограниченную или безусловную минимизацию.
'fminunc'
— Использует функцию Optimization Toolbox™ fminunc
выполнять безусловную минимизацию.
'fmincon'
— Использует функцию Optimization Toolbox fmincon
выполнять ограниченную минимизацию.
Примечание
Убедитесь, что ваша гибридная функция принимает ваши ограничения задач. В противном случае, ga
выдает ошибку.
Можно установить отдельные опции для гибридной функции. Использование optimset
для fminsearch
, или optimoptions
для fmincon
, patternsearch
, или fminunc
. Например:
hybridopts = optimoptions('fminunc','Display','iter','Algorithm','quasi-newton');
options
можно следующим образом:options = optimoptions('ga',options,'HybridFcn',{@fminunc,hybridopts});
hybridopts
должен существовать, прежде чем вы установите options
.См. Гибридную Схему в Генетическом алгоритме для примера. Смотрите, Когда Использовать Гибридную Функцию.
gamultiobj
Гибридная функцияГибридная функция является другой функцией минимизации, которая выполняется после многоцелевого генетического алгоритма, завершает работу. Можно задать гибридный функциональный 'fgoalattain'
в HybridFcn
опция.
В использовании в качестве многоцелевой гибридной функции решатель делает следующее:
Вычислите максимум и минимум каждой целевой функции при решениях. Для объективного j в решении k позволить
Вычислите общую массу в каждом решении k,
Вычислите вес для каждой целевой функции j в каждом решении k,
Для каждого решения k выполните целевую проблему достижения с целевым векторным Fk (j) и вектор веса p (j, k).
Для получения дополнительной информации смотрите раздел 9.6 из Деб [3].
Критерий остановки определяет то, что заставляет алгоритм завершать работу. Можно задать следующие опции:
MaxGenerations
— Задает максимальное количество итераций для генетического алгоритма, чтобы выполнить. Значением по умолчанию является 100*numberOfVariables
.
MaxTime
— Задает максимальное время в секундах запуски генетического алгоритма перед остановкой, как измерено tic
и toc
. Этот предел осуществляется после каждой итерации, таким образом, ga
может превысить предел, когда итерация занимает время.
FitnessLimit
— Алгоритм останавливается, если лучшее значение фитнеса меньше чем или равно значению FitnessLimit
. Не применяется к gamultiobj
.
MaxStallGenerations
— Алгоритм останавливается если среднее относительное изменение в лучшем значении функции фитнеса по MaxStallGenerations
меньше чем или равно FunctionTolerance
. (Если StallTest
опцией является 'geometricWeighted'
, затем тест для геометрического средневзвешенного относительного изменения.) Для проблемы с нелинейными ограничениями, MaxStallGenerations
применяется к подпроблеме (см. Нелинейные Ограничительные Алгоритмы решателя).
Для gamultiobj
, если среднее геометрическое относительного изменения в spread решений Парето по MaxStallGenerations
меньше FunctionTolerance
, и итоговое распространение меньше, чем средний спред по последнему MaxStallGenerations
, затем остановки алгоритма. Коэффициент среднего геометрического ½. Распространение является мерой перемещения передней стороны Парето. См. gamultiobj Алгоритм.
MaxStallTime
— Алгоритм останавливается, если нет никакого улучшения лучшего значения фитнеса в течение интервала времени в секундах, заданных MaxStallTime
, как измерено tic
и toc
.
FunctionTolerance
— Алгоритм останавливается если среднее относительное изменение в лучшем значении функции фитнеса по MaxStallGenerations
меньше чем или равно FunctionTolerance
. (Если StallTest
опцией является 'geometricWeighted'
, затем тест для геометрического средневзвешенного относительного изменения.)
Для gamultiobj
, если среднее геометрическое относительного изменения в spread решений Парето по MaxStallGenerations
меньше FunctionTolerance
, и итоговое распространение меньше, чем средний спред по последнему MaxStallGenerations
, затем остановки алгоритма. Коэффициент среднего геометрического ½. Распространение является мерой перемещения передней стороны Парето. См. gamultiobj Алгоритм.
ConstraintTolerance
— ConstraintTolerance
не используется в качестве останавливающегося критерия. Это используется, чтобы определить выполнимость относительно нелинейных ограничений. Кроме того, max(sqrt(eps),ConstraintTolerance)
определяет выполнимость относительно линейных ограничений.
Смотрите Определенный Максимальный номер Поколений и Поколений Останова для примера.
Выходные функции являются функциями, что генетический алгоритм заходит в каждую генерацию. В отличие от других решателей, a ga
выходная функция может не только считать значения состояния алгоритма, но также и изменить те значения. Выходная функция может также остановить решатель согласно условиям, которые вы устанавливаете.
options = optimoptions('ga','OutputFcn',@myfun);
Для нескольких выходных функций введите cell-массив указателей на функцию:
options = optimoptions('ga','OutputFcn',{@myfun1,@myfun2,...});
Чтобы видеть шаблон, который можно использовать, чтобы записать собственные выходные функции, войти
edit gaoutputfcntemplate
в командной строке MATLAB.
Для примера смотрите Пользовательскую Выходную функцию для Генетического алгоритма.
Ваша выходная функция должна иметь следующий синтаксис вызова:
[state,options,optchanged] = myfun(options,state,flag)
MATLAB передает options
, state
, и flag
данные к вашей выходной функции и выходной функции возвращают state
Опции
, и optchanged
данные.
Примечание
Чтобы остановить итерации, установите state.StopFlag
к непустому вектору символов, такому как 'y'
.
Выходная функция имеет следующие входные параметры:
options
Опции
state
— Структура, содержащая информацию о текущем поколении. Структура состояния описывает поля state
.
flag
— Текущий статус алгоритма:
'init'
— Состояние инициализации
'iter'
— Состояние итерации
'interrupt'
— Итерация подпроблемы нелинейно ограниченной проблемы для 'auglag'
нелинейный ограничительный алгоритм. Когда flag
'interrupt'
:
Значения state
поля применяются к подпроблемным итерациям.
ga
не принимает изменения в options
, и игнорирует optchanged
.
state.NonlinIneq
и state.NonlinEq
поля не доступны.
'done'
— Конечное состояние
Передача Дополнительных Параметров объясняет, как предоставить дополнительные параметры функции.
Выходная функция возвращает следующие аргументы в ga
:
state
— Структура, содержащая информацию о текущем поколении. Структура состояния описывает поля state
. Чтобы остановить итерации, установите state.StopFlag
к непустому вектору символов, такому как 'y'
.
options
— Опции, как изменено выходной функцией. Этот аргумент является дополнительным.
optchanged
— Указание булева флага превращается в options
. Изменить options
для последующих итераций, набор optchanged
к true
.
Внимание
Изменение структуры состояния небрежно может привести к противоречивым или ошибочным результатам. Обычно, можно достигнуть тех же или лучших модификаций состояния при помощи мутации или перекрестно соединить функции, вместо того, чтобы изменить структуру состояния в функции построения графика или выходной функции.
ga
выходные функции могут изменить state
структура (см. Структуру состояния). Будьте осторожны при изменении значений в этой структуре, когда можно передать противоречивые данные обратно ga
.
Совет
Если ваша структура output изменяет Population
поле, затем убедиться обновить Score
поле, и возможно Best
, NonlinIneq
, или NonlinEq
поля, так, чтобы они содержали сопоставимую информацию.
Обновить Score
поле после изменения Population
поле, сначала вычислите значения функции фитнеса населения, затем вычислите фитнес, масштабирующийся для населения. Смотрите, что Фитнес Масштабирует Опции.
'Display'
задает, сколько информации отображено в командной строке, в то время как генетический алгоритм запускается. Доступные параметры
'final'
(значение по умолчанию) — Причина остановки отображена.
'off'
или эквивалентный 'none'
— Никакой вывод не отображен.
'iter'
— Информация отображена в каждой итерации.
'diagnose'
— Информация отображена в каждой итерации. Кроме того, диагностика перечисляет некоторую информацию о задаче и опции, которые были изменены от значений по умолчанию.
Оба 'iter'
и 'diagnose'
отобразите следующую информацию:
Generation
— Номер генерации
f-count
— Совокупное число вычислений функции фитнеса
Best f(x)
— Лучшее значение функции фитнеса
Mean f(x)
— Среднее значение функции фитнеса
Stall generations
— Количество поколений начиная с последнего улучшения функции фитнеса
Когда нелинейная ограничительная функция была задана, 'iter'
и 'diagnose'
не отображайте Mean f(x)
, но дополнительно отобразится:
Max Constraint
— Максимальное нелинейное нарушение ограничений
Можно принять решение иметь физическую форму и ограничительные функции, выполненные в последовательном, параллельном, или векторизованным способом. Установите 'UseVectorized'
и 'UseParallel'
опции с optimoptions
.
Когда 'UseVectorized'
false
(значение по умолчанию), ga
вызывает функцию фитнеса на одном индивидууме за один раз, когда она циклично выполняется через население. (Это принимает 'UseParallel'
в его значении по умолчанию false
.)
Когда 'UseVectorized'
true
, ga
вызывает функцию фитнеса на целом населении целиком, в одном вызове функции фитнеса.
Если существуют нелинейные ограничения, функция фитнеса и нелинейные ограничения вся потребность, которая будет векторизована для алгоритма, чтобы вычислить векторизованным способом.
Смотрите Векторизуют Функцию Фитнеса для примера.
Когда UseParallel
true
, ga
вызывает функцию фитнеса параллельно, с помощью параллельной среды, которую вы установили (см., Как Использовать Параллельную обработку в Global Optimization Toolbox). Установите UseParallel
к false
(значение по умолчанию), чтобы вычислить последовательно.
Примечание
Вы не можете одновременно использовать векторизованный и найти что-либо подобное расчетам. Если вы устанавливаете 'UseParallel'
к true
и 'UseVectorized'
к true
, ga
оценивает вашу физическую форму и ограничительные функции векторизованным способом, не параллельно.
Как фитнес и ограничительные функции оценены
UseVectorized = false | UseVectorized = true | |
---|---|---|
UseParallel = false | Последовательный | Векторизованный |
UseParallel = true | Параллель | Векторизованный |