exponenta event banner

Варианты генетического алгоритма

Варианты генетического алгоритма

Задать параметры для ga с помощью optimoptions.

options = optimoptions('ga','Option1','value1','Option2','value2');
  • Некоторые опции перечислены в italics. Эти параметры не отображаются в объявлении, 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');

Чтобы отобразить несколько графиков, используйте массив ячеек со встроенными именами функций графика или массив ячеек с дескрипторами функций:

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, который является входным аргументом для построения графиков, мутаций и выходных функций, содержит следующие поля:

  • 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. Если у вас есть частичная начальная популяция, то есть меньше, чем 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/r. Так масштабированный балл наиболее подходящего индивидуума пропорционален 1, масштабированный балл следующего наиболее подходящего пропорционален 1/2 и так далее. Масштабирование ранжирования пригодности удаляет эффект разброса необработанных баллов. Квадратный корень делает плохо ранжированных особей более почти равными по баллу, по сравнению с ранжированием. Дополнительные сведения см. в разделе Масштабирование фитнеса.

  • '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, стандартное отклонение в kth поколении, σk, является тем же во всех координатах родительского вектора и дано рекурсивной формулой

      (1 ShrinkkGenerations).

      Если установить InitialPopulationRange является вектором с двумя строками и nvars колонки, стандартное отклонение в координате i родительского вектора в kth поколении, σi, k, даны рекурсивной формулой

      σi, k =σi, k−1 (1−ShrinkkGenerations).

      Если установить 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. Установите 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.

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

    Внимание

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

Параметры миграции

Примечание

Субпопуляции относятся к форме параллельной обработки для генетического алгоритма. ga в настоящее время не поддерживает эту форму. В субпопуляциях каждый работник принимает несколько человек. Эти особи являются субпопуляцией. Работник развивает субпопуляцию независимо от других работников, за исключением случаев, когда миграция заставляет некоторых людей путешествовать между работниками.

Поскольку ga в настоящее время не поддерживает эту форму параллельной обработки, нет пользы от установки PopulationSize к вектору или к установке MigrationDirection, MigrationInterval, или MigrationFraction варианты.

Параметры миграции определяют, как люди перемещаются между субпопуляциями. Миграция происходит при установке PopulationSize является вектором длиной больше 1. Когда происходит миграция, лучшие особи из одной субпопуляции заменяют худших особей в другой субпопуляции. Копируются лица, которые мигрируют из одной субпопуляции в другую. Они не удаляются из исходной субпопуляции.

Управлять процессом миграции можно с помощью следующих трех опций.

  • MigrationDirection - Миграция может происходить в одном или обоих направлениях.

    • Если установить MigrationDirection кому 'forward', миграция происходит в сторону последней субпопуляции. То есть n-я субпопуляция мигрирует в (n + 1) -ю субпопуляцию.

    • Если установить MigrationDirection кому 'both'n-я субпопуляция мигрирует как в (n-1) -ю, так и в (n + 1) -ю субпопуляцию.

    Миграция переносится по концам субпопуляций. То есть последняя субпопуляция мигрирует в первую, а первая может мигрировать в последнюю.

  • 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' используя следующие пары имя-значение.

ИмяСтоимость
SolverOptsfmincon параметры, созданные с помощью 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' - Использует функцию «Панель инструментов оптимизации» 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 вариант.

При использовании в качестве многообъективной гибридной функции решатель выполняет следующие действия:

  1. Вычислите максимум и минимум каждой целевой функции в решениях. Для цели j при решении k, пусть

    Fmax (j) = maxkFk (j) Fmin (j) = minkFk (j).

  2. Вычислите общий вес для каждого раствора k,

    w (k) =∑jFmax (j) Fk (j) 1 + Fmax (j) − Fmin (j).

  3. Вычислите вес для каждой целевой функции j при каждом решении k,

    p (j, k) = w (k) Fmax (j) Fk (j) 1 + Fmax (j) − Fmin (j).

  4. Для каждого решения k выполните задачу достижения цели с помощью целевого вектора Fk (j) и весового вектора p (j, k).

Для получения дополнительной информации см. раздел 9.6 Deb [3].

Параметры критериев остановки

Критерии остановки определяют причины завершения работы алгоритма. Можно задать следующие параметры:

  • MaxGenerations - указывает максимальное число итераций, выполняемых генетическим алгоритмом. Значение по умолчанию: 100*numberOfVariables.

  • MaxTime - указывает максимальное время в секундах, в течение которого генетический алгоритм запускается перед остановкой, измеренное tic и toc. Этот предел применяется после каждой итерации, поэтому ga может превышать предел, если итерация занимает значительное время.

  • FitnessLimit - Алгоритм останавливается, если наилучшее значение пригодности меньше или равно значению FitnessLimit. Не применяется к gamultiobj.

  • MaxStallGenerations - Алгоритм останавливается, если среднее относительное изменение значения функции наилучшего фитнеса превышает MaxStallGenerations меньше или равно FunctionTolerance. (Если StallTest опция - 'geometricWeighted'затем выполняется тест на изменение относительного среднего геометрического веса.) Для проблемы с нелинейными ограничениями: MaxStallGenerations применяется к подпроблеме (см. Алгоритмы решателя нелинейных ограничений).

    Для gamultiobj, если среднее геометрическое относительного изменения разброса решений Парето над MaxStallGenerations меньше, чем FunctionTolerance, и конечный разброс меньше, чем средний разброс за последний MaxStallGenerationsзатем алгоритм останавливается. Средний геометрический коэффициент равен ½. Разброс - мера движения фронта Парето. См. Алгоритм gamultiobj.

  • MaxStallTime - Алгоритм останавливается, если нет улучшения в лучшем значении пригодности для интервала времени в секундах, указанного MaxStallTime, как измерено tic и toc.

  • FunctionTolerance - Алгоритм останавливается, если среднее относительное изменение значения функции наилучшего фитнеса превышает MaxStallGenerations меньше или равно FunctionTolerance. (Если StallTest опция - 'geometricWeighted'затем выполняется тест на изменение относительного среднего геометрического веса.)

    Для gamultiobj, если среднее геометрическое относительного изменения разброса решений Парето над MaxStallGenerations меньше, чем FunctionTolerance, и конечный разброс меньше, чем средний разброс за последний MaxStallGenerationsзатем алгоритм останавливается. Средний геометрический коэффициент равен ½. Разброс - мера движения фронта Парето. См. Алгоритм gamultiobj.

  • ConstraintTolerance- ConstraintTolerance не используется в качестве критерия остановки. Он используется для определения осуществимости нелинейных ограничений. Также, max(sqrt(eps),ConstraintTolerance) определяет выполнимость в отношении линейных ограничений.

Пример см. в разделах Установка максимального количества поколений и остановка поколений.

Параметры функции вывода

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

options = optimoptions('ga','OutputFcn',@myfun);

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

options = optimoptions('ga','OutputFcn',{@myfun1,@myfun2,...});

Для просмотра шаблона, который можно использовать для записи собственных функций вывода, введите

edit gaoutputfcntemplate

в командной строке MATLAB.

Пример см. в разделе Пользовательская функция вывода для генетического алгоритма.

Структура функции вывода

Функция вывода должна иметь следующий синтаксис вызова:

[state,options,optchanged] = myfun(options,state,flag)

MATLAB проходит options, state, и flag данные для вашей функции вывода, и функция вывода возвращает state, options, и 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.

Совет

Если структура вывода изменяет 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 вызывает функцию фитнеса параллельно, используя установленную параллельную среду (см. Как использовать параллельную обработку в инструментарии глобальной оптимизации). Набор UseParallel кому false (по умолчанию) для последовательного вычисления.

Примечание

Нельзя одновременно использовать векторизированные и параллельные вычисления. Если установить 'UseParallel' кому true и 'UseVectorized' кому true, ga оценивает функции пригодности и ограничения векторизированным образом, а не параллельно.

Оценка функций фитнеса и ограничений

 UseVectorized = falseUseVectorized = true
UseParallel = falseПоследовательныйВекторизованный
UseParallel = trueПараллельВекторизованный