Библиотека генетических алгоритмов - часть 3 - Встроенные сравнители и операции

ОГЛАВЛЕНИЕ

Встроенные сравнители пригодности

Встроенные сравнители пригодности расположены в пространстве имен Chromosome::FitnessComparators.

 

Схема – Встроенные сравнители пригодности

Есть два сравнителя пригодности:
•    GaMaxFitnessComparator – применяется для генетических алгоритмов, максимизирующих значение пригодности,
•    GaMinFitnessComparator - применяется для генетических алгоритмов, минимизирующих значение пригодности.

Встроенные операции кроссовера

Встроенные операции кроссовера расположены в пространстве имен Chromosome::Crossover.

 

Схема - Встроенные операции кроссовера

Класс GaMutiValueCrossover реализует операцию кроссовера, создающую потомка путем выбора N точек пересечения, и затем поочередно копирующую значения из родителей, меняя исходного родителя при каждом достижении выбранной точки пересечения. Эта операция требует хромосом, реализующих интерфейс GaMultiValueCode.

 

Схема – Результаты операции GaMutiValueCrossover

Класс GaMidpointCrossover реализует операцию кроссовера, создающую потомка путем вызова метода Midpoint выбранных родителей. Эта операция требует хромосом, реализующих интерфейс GaArithmeticalCode.

 

Схема - Результаты операции GaMidpointCrossover [хромосома с множеством значений, тип значений - int]

GaAddCrossover вызывает operator+ родительской хромосомы, а GaSubCrossover вызывает operator-.

 

Схема - Результаты операции GaAddCrossover [хромосома с множеством значений, тип значений - int]

 

Схема - Результаты операции GaSubCrossover [хромосома с множеством значений, тип значений - int]

Встроенные операции мутации

Встроенные операции мутации расположены в пространстве имен Chromosome::Mutation.

 

Схема - Встроенные операции мутации

Класс GaSwapMutation реализует операцию мутации, выбирающую два блока значений в коде хромосомы и меняющую их местами в коде [максимальное число переставляемых значений определяется размером мутации, заданным в параметрах хромосомы].

 

Схема - Результаты операции GaSwapMutation

Класс GaInvertMutation реализует операцию мутации, выбирающую N значений [максимальное число значений определяется размером мутации, заданным в параметрах хромосомы] и инвертирующую их значения с помощью метода Invert набора значений, определенного хромосомой. Эта операция требует хромосом, реализующих интерфейс GaMutableCode.

 

Схема - Результаты операции GaInvertMutation

Класс GaFlipMutation реализует операцию мутации, выбирающую N значений [максимальное число значений определяется размером мутации, заданным в параметрах хромосомы] и случайно устанавливает их значения с помощью метода GenerateRandom набора значений, определенного хромосомой. Эта операция требует хромосом, реализующих интерфейс GaMutableCode.

 

Схема - Результаты операции GaFlipMutation

Встроенные операции селекции

Встроенные операции селекции расположены в пространстве имен Population::SelectionOperations.

 

Схема – Операции селекции GaSelectBest и GaSelectWorst

Класс GaSelectBest реализует операцию селекции, выбирающую N [определено размером селекции в параметрах операции] хромосом, являющимся лучшими в популяции. Если популяция несортированная, операция выбирает только хромосомы, входящие в сортированную группу лучших хромосом популяции.

Схема – Операции GaSelectRouletteWheel и GaSelectTournament

Класс GaSelectRouletteWheel реализует операцию селекции, выбирающую хромосомы исходя из их значения пригодности. Значения пригодности хромосом используются для вычисления их вероятности селекции. Если генетический алгоритм максимизирует пригодность, большая пригодность означает большую вероятность селекции. Если генетический алгоритм минимизирует пригодность, меньшая пригодность означает большую вероятность селекции. Операция требует сортированную популяцию. Если популяция имеет определенную операцию масштабирования, селекция использует масштабированные значения пригодности; в противном случае используются необработанные значения пригодности. Эта операция селекции может выбрать отдельного родителя более одного раза, что может создать проблемы для некоторых операций замены. Во избежание этого GaSelectRouletteWheel использует класс GaSelectDuplicatesParams для своих параметров, чтобы контролировать дубликаты в наборе результатов селекции.

GaSelectTournament использует метод, подобный GaSelectRouletteWheel. Он выполняет N [определено параметрами операции] селекций "колеса рулетки" для единственного места в наборе результатов селекции. Лучшая хромосома из выбранных помещается в набор результатов. Этот процесс повторяется, чтобы выбрать всех родителей. Операция использует класс GaSelectTournamentParam для своих параметров.

 

Схема - Операции GaSelectRandom и GaSelectRandomBest

Класс GaSelectRandom реализует операцию селекции, случайно выбирающую родителей. Операция может выбрать отдельного родителя более одного раза, что может создать проблемы для некоторых операций замены. Во избежание этого GaSelectRandom использует класс GaSelectDuplicatesParams для своих параметров, чтобы контролировать дубликаты в наборе результатов селекции.

GaSelectRandomBest работает так же, как GaSelectRandom, но выбирает больше родителей, чем определено параметрами; затем она обрезает набор результатов до желаемого размера селекции, оставляя только лучших родителей в наборе. Эта операция использует класс GaRandomBestParams, определяющий число родителей, выбираемых перед обрезкой.

Встроенные операции спаривания

Встроенные операции спаривания расположены в пространстве имен Population::CouplingOperations.

 

Схема – Встроенные операции спаривания

Операция GaSimpleCoupling принимает первые два родителя из набора результатов селекции и затем вырабатывает две хромосомы потомства посредством операций кроссовера, и каждый родитель привязывается к потомку, затем она принимает следующих двух родителей, и так далее... Если все родители были использованы, но надо выработать больше потомков, операция заново запускается с начала набора результатов селекции, пока не выработается достаточно потомков. Это спаривание использует класс GaCouplingParams для своих параметров.

 

Схема - Операция GaSimpleCoupling

 

Схема – Встроенные операции спаривания

Операция GaCrossCoupling последовательно берет родителей из набора результатов селекции. Если все родители были использованы, но надо выработать больше потомков, операция заново запускается с начала, пока не выработается достаточно потомков.

 

Схема - Операция GaCrossCoupling

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

 

Схема - Операция GaInverseCoupling

Операция GaRandomCoupling последовательно берет первых родителей из результатов селекции, а вторые родители выбираются случайно. Если все родители были использованы как первые родители, но надо выработать больше потомков, операция заново запускается с начала, пока не выработается достаточно потомков.

 

Схема - Операция GaRandomCoupling

Операция GaBestAlwaysCoupling всегда берет хромосому с лучшим значением пригодности в наборе результатов селекции в качестве первого родителя, а вторые родители берутся последовательно. Если все родители были использованы, но надо выработать больше потомков, операция заново запускается с начала, пока не выработается достаточно потомков.

 

Схема - Операция GaBestAlwaysCoupling

Когда выбраны два родителя, эти операции вырабатывают заданное число потомков путем операции кроссовера. Затем они выбирают потомка с лучшим значением пригодности из выработанных потомков, сохраняют потомка в наборе результатов спаривания и привязывают родителя к потомку. Эти спаривания используют класс GaMultipleCrossoverCouplingParams для параметров, чтобы контролировать число выработанных потомков на пару родителей.