exponenta event banner

ga

Найти минимум функции с помощью генетического алгоритма

Описание

пример

x = ga(fun,nvars) находит локальный неограниченный минимум, x, к целевой функции, fun. nvars - размерность (количество конструктивных переменных) fun.

Примечание

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

пример

x = ga(fun,nvars,A,b) находит локальный минимум x кому fun, с учетом линейных неравенств A*x ≤ b. ga оценивает матричное произведение A*x как если бы x транспонируется (A*x').

пример

x = ga(fun,nvars,A,b,Aeq,beq) находит локальный минимум x кому fun, с учетом линейных уравнений Aeq*x = beq и A*x ≤ b. (Набор A=[] и b=[] если не существует линейных неравенств.) ga оценивает матричное произведение Aeq*x как если бы x транспонируется (Aeq*x').

пример

x = ga(fun,nvars,A,b,Aeq,beq,lb,ub) определяет набор нижних и верхних границ для конструктивных переменных, x, так что решение находится в диапазоне lb  x  ub. (Набор Aeq=[] и beq=[] если не существует линейных уравнений.)

пример

x = ga(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon) подвергает минимизацию ограничениям, определенным в nonlcon. Функция nonlcon принимает x и возвращает векторы C и Ceq, представляя нелинейные неравенства и равенства соответственно. ga минимизирует fun такой, что C(x)  0 и Ceq(x) = 0. (Набор lb=[] и ub=[] если не существует границ.)

пример

x = ga(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,options) минимизирует с параметрами оптимизации по умолчанию, замененными значениями в options. (Набор nonlcon=[] если нет нелинейных ограничений.) Создать options использование optimoptions.

пример

x = ga(fun,nvars,A,b,[],[],lb,ub,nonlcon,IntCon) или x = ga(fun,nvars,A,b,[],[],lb,ub,nonlcon,IntCon,options) требует, чтобы переменные, перечисленные в IntCon принимать целочисленные значения.

Примечание

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

x = ga(problem) находит минимальное значение для problem, структура, описанная в problem.

пример

[x,fval] = ga(___), для любых предыдущих входных аргументов, также возвращает fval, значение функции пригодности при x.

пример

[x,fval,exitflag,output] = ga(___) также возвращает exitflag, целое число, идентифицирующее причину прекращения алгоритма, и outputструктура, которая содержит выходные данные каждого поколения и другую информацию о производительности алгоритма.

пример

[x,fval,exitflag,output,population,scores] = ga(___) также возвращает матрицу population, чьи строки являются конечной популяцией, и вектор scores, оценки конечной популяции.

Примеры

свернуть все

ps_example.m файлы поставляются с программным обеспечением. Постройте график функции.

xi = linspace(-6,2,300);
yi = linspace(-4,4,300);
[X,Y] = meshgrid(xi,yi);
Z = ps_example([X(:),Y(:)]);
Z = reshape(Z,size(X));
surf(X,Y,Z,'MeshStyle','none')
colormap 'jet'
view(-26,43)
xlabel('x(1)')
ylabel('x(2)')
title('ps\_example(x)')

Figure contains an axes. The axes with title ps\_example(x) contains an object of type surface.

Найти минимум этой функции с помощью ga.

rng default % For reproducibility
x = ga(@ps_example,2)
Optimization terminated: average change in the fitness value less than options.FunctionTolerance.
x = 1×2

   -4.6793   -0.0860

Используйте генетический алгоритм, чтобы минимизировать ps_example функция в регионе x(1) + x(2) >= 1 и x(2) <= 5 + x(1).

Сначала преобразуйте два ограничения неравенства в матричную форму A*x <= b. Другими словами, получите x переменные в левой части неравенства и делают оба неравенства менее или равными:

-x(1) -x(2) <= -1

-x(1) + x(2) <= 5

A = [-1,-1;
    -1,1];
b = [-1;5];

Решение проблемы с ограничениями с помощью ga.

rng default % For reproducibility
fun = @ps_example;
x = ga(fun,2,A,b)
Optimization terminated: average change in the fitness value less than options.FunctionTolerance.
x = 1×2

    0.9991    0.0000

Зависимости удовлетворяются в пределах значения допуска по умолчанию, 1e-3. Чтобы увидеть это, вычислите A*x' - b, которые должны иметь отрицательные компоненты.

disp(A*x' - b)
    0.0009
   -5.9991

Используйте генетический алгоритм, чтобы минимизировать ps_example функция в регионе x(1) + x(2) >= 1 и x(2) == 5 + x(1).

Сначала преобразуйте два ограничения в матричную форму A*x <= b и Aeq*x = beq. Другими словами, получите x переменные в левой части выражений и преобразуют неравенство в меньшую или равную форму:

-x(1) -x(2) <= -1

-x(1) + x(2) == 5

A = [-1 -1];
b = -1;
Aeq = [-1 1];
beq = 5;

Решение проблемы с ограничениями с помощью ga.

rng default % For reproducibility
fun = @ps_example;
x = ga(fun,2,A,b,Aeq,beq)
Optimization terminated: average change in the fitness value less than options.FunctionTolerance.
x = 1×2

   -2.0000    2.9990

Убедитесь, что ограничения удовлетворяются в пределах значения по умолчанию ConstraintTolerance, 1e-3.

disp(A*x' - b)
   9.9998e-04
disp(Aeq*x' - beq)
  -9.9937e-04

Используйте генетический алгоритм, чтобы минимизировать ps_example функция в регионе x(1) + x(2) >= 1 и x(2) == 5 + x(1). Кроме того, устанавливаются границы 1 <= x(1) <= 6 и -3 <= x(2) <= 8.

Сначала преобразуйте две линейные зависимости в матричную форму. A*x <= b и Aeq*x = beq. Другими словами, получите x переменные в левой части выражений и преобразуют неравенство в меньшую или равную форму:

-x(1) -x(2) <= -1

-x(1) + x(2) == 5

A = [-1 -1];
b = -1;
Aeq = [-1 1];
beq = 5;

Установить границы lb и ub.

lb = [1 -3];
ub = [6 8];

Решение проблемы с ограничениями с помощью ga.

rng default % For reproducibility
fun = @ps_example;
x = ga(fun,2,A,b,Aeq,beq,lb,ub)
Optimization terminated: average change in the fitness value less than options.FunctionTolerance.
x = 1×2

    1.0001    5.9992

Проверьте, что линейные ограничения удовлетворяются в пределах значения по умолчанию ConstraintTolerance, 1e-3.

disp(A*x' - b)
   -5.9992
disp(Aeq*x' - beq)
  -8.9237e-04

Используйте генетический алгоритм, чтобы минимизировать ps_example функция в области 2x12+x22≤3 и (x1 + 1) 2 = (x2/2) 4.

Для этого сначала необходимо записать функцию. ellipsecons.m возвращает ограничение неравенства в первом выводе, cи ограничение равенства во втором выводе, ceq. Сохранить файл ellipsecons.m в папку на вашем пути MATLAB ®.

type ellipsecons
function [c,ceq] = ellipsecons(x)

c = 2*x(1)^2 + x(2)^2 - 3;
ceq = (x(1)+1)^2 - (x(2)/2)^4;

Включить дескриптор функции в ellipsecons в качестве nonlcon аргумент.

nonlcon = @ellipsecons;
fun = @ps_example;
rng default % For reproducibility
x = ga(fun,2,[],[],[],[],[],[],nonlcon)
Optimization terminated: average change in the fitness value less than options.FunctionTolerance
 and constraint violation is less than options.ConstraintTolerance.
x = 1×2

   -0.9766    0.0362

Проверьте, что нелинейные ограничения выполнены в x. Ограничения удовлетворяются, когда c ≤ 0 и ceq = 0 в пределах значения по умолчанию ConstraintTolerance, 1e-3.

[c,ceq] = nonlcon(x)
c = -1.0911
ceq = 5.4645e-04

Используйте генетический алгоритм, чтобы минимизировать ps_example функция в регионе x(1) + x(2) >= 1 и x(2) == 5 + x(1) используя допуск зависимости, который меньше, чем допуск по умолчанию.

Сначала преобразуйте два ограничения в матричную форму A*x <= b и Aeq*x = beq. Другими словами, получите x переменные в левой части выражений и преобразуют неравенство в меньшую или равную форму:

-x(1) -x(2) <= -1

-x(1) + x(2) == 5

A = [-1 -1];
b = -1;
Aeq = [-1 1];
beq = 5;

Чтобы получить более точное решение, задайте допуск ограничения 1e-6. Для контроля выполнения решателя задайте функцию графика.

options = optimoptions('ga','ConstraintTolerance',1e-6,'PlotFcn', @gaplotbestf);

Решите проблему минимизации.

rng default % For reproducibility
fun = @ps_example;
x = ga(fun,2,A,b,Aeq,beq,[],[],[],options)
Optimization terminated: average change in the fitness value less than options.FunctionTolerance.

Figure Genetic Algorithm contains an axes. The axes with title Best: 4 Mean: 4 contains 2 objects of type line. These objects represent Best fitness, Mean fitness.

x = 1×2

   -2.0000    3.0000

Проверьте, что линейные ограничения удовлетворяются в пределах 1e-6.

disp(A*x' - b)
   9.9999e-07
disp(Aeq*x' - beq)
  -9.8695e-07

Используйте генетический алгоритм, чтобы минимизировать ps_example функция подчиняется ограничению, x(1) - целое число.

IntCon = 1;
rng default % For reproducibility
fun = @ps_example;
A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
nonlcon = [];
x = ga(fun,2,A,b,Aeq,beq,lb,ub,nonlcon,IntCon)
Optimization terminated: average change in the penalty fitness value less than options.FunctionTolerance
and constraint violation is less than options.ConstraintTolerance.
x = 1×2

   -5.0000   -0.0000

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

IntCon = 1;
rng default % For reproducibility
fun = @ps_example;
A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
nonlcon = [];
[x,fval] = ga(fun,2,A,b,Aeq,beq,lb,ub,nonlcon,IntCon)
Optimization terminated: average change in the penalty fitness value less than options.FunctionTolerance
and constraint violation is less than options.ConstraintTolerance.
x = 1×2

   -5.0000   -0.0000

fval = -1.9178

Сравните этот результат с решением задачи без ограничений.

[x,fval] = ga(fun,2)
Optimization terminated: maximum number of generations exceeded.
x = 1×2

   -4.7121    0.0051

fval = -1.9949

Используйте генетический алгоритм, чтобы минимизировать ps_example функция ограничена, чтобы иметь x(1) целочисленное значение. Чтобы понять причину остановки решателя и способ ga искали минимум, получить exitflag и output результаты. Также постройте график минимального наблюдаемого значения целевой функции по мере продвижения решателя.

IntCon = 1;
rng default % For reproducibility
fun = @ps_example;
A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
nonlcon = [];
options = optimoptions('ga','PlotFcn', @gaplotbestf);
[x,fval,exitflag,output] = ga(fun,2,A,b,Aeq,beq,lb,ub,nonlcon,IntCon,options)

Figure Genetic Algorithm contains an axes. The axes with title Best: -1.91785 Mean: 1.00005e+06 contains 2 objects of type line. These objects represent Best penalty value, Mean penalty value.

Optimization terminated: average change in the penalty fitness value less than options.FunctionTolerance
and constraint violation is less than options.ConstraintTolerance.
x = 1×2

   -5.0000   -0.0000

fval = -1.9178
exitflag = 1
output = struct with fields:
      problemtype: 'integerconstraints'
         rngstate: [1x1 struct]
      generations: 96
        funccount: 3691
          message: 'Optimization terminated: average change in the penalty fitness value less than options.FunctionTolerance...'
    maxconstraint: 0
       hybridflag: []

Используйте генетический алгоритм, чтобы минимизировать ps_example функция ограничена, чтобы иметь x(1) целочисленное значение. Получение всех результатов, включая конечную совокупность и вектор баллов.

IntCon = 1;
rng default % For reproducibility
fun = @ps_example;
A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
nonlcon = [];
[x,fval,exitflag,output,population,scores] = ga(fun,2,A,b,Aeq,beq,lb,ub,nonlcon,IntCon);
Optimization terminated: average change in the penalty fitness value less than options.FunctionTolerance
and constraint violation is less than options.ConstraintTolerance.

Изучите первых 10 членов конечной популяции и их соответствующие оценки. Обратите внимание, что x(1) является целочисленным для всех этих членов совокупности. Целое число ga алгоритм генерирует только целочисленные осуществимые совокупности.

disp(population(1:10,:))
   -5.0000   -0.0000
   -5.0000   -0.0000
   -5.0000    0.0014
   -6.0000    0.0008
  -13.0000   -0.0124
  -10.0000    0.0011
   -4.0000   -0.0010
         0    0.0072
   -4.0000    0.0010
   -5.0000   -0.0000
disp(scores(1:10))
   -1.9178
   -1.9178
   -1.9165
    1.0008
   64.0124
   25.0011
   -1.5126
    2.5072
   -1.5126
   -1.9178

Входные аргументы

свернуть все

Целевая функция, указанная как дескриптор функции или имя функции. Запишите целевую функцию, чтобы принять вектор строки длины nvars и возвращает скалярное значение.

Когда 'UseVectorized' опция - true, написать fun чтобы принять popоколо-nvars матрица, где pop - текущий размер населения. В этом случае fun возвращает вектор той же длины, что и pop содержащий значения функции пригодности. Убедитесь, что fun не принимает какой-либо конкретный размер для pop, так как ga может передавать одного члена населения даже в векторизованном расчете.

Пример: fun = @(x)(x-[4,2]).^2

Типы данных: char | function_handle | string

Число переменных, указанное как положительное целое число. Решатель пропускает векторы строк длины nvars кому fun.

Пример: 4

Типы данных: double

Линейные ограничения неравенства, заданные как вещественная матрица. A является Mоколо-nvars матрица, где M - число неравенств.

A кодирует M линейные неравенства

A*x <= b,

где x - вектор столбца nvars переменные x(:), и b - вектор столбца с M элементы.

Например, для указания

x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,

дать следующие ограничения:

A = [1,2;3,4;5,6];
b = [10;20;30];

Пример: Чтобы указать, что управляющие переменные суммируются до 1 или менее, задайте ограничения A = ones(1,N) и b = 1.

Типы данных: double

Линейные ограничения неравенства, заданные как действительный вектор. b является M-элементный вектор, связанный с A матрица. Если вы проходите b как вектор строки, решатели внутренне преобразуют b к вектору столбца b(:).

b кодирует M линейные неравенства

A*x <= b,

где x - вектор столбца N переменные x(:), и A является матрицей размера Mоколо-N.

Например, для указания

x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,

дать следующие ограничения:

A = [1,2;3,4;5,6];
b = [10;20;30];

Пример: Чтобы указать, что управляющие переменные суммируются до 1 или менее, задайте ограничения A = ones(1,N) и b = 1.

Типы данных: double

Линейные ограничения равенства, заданные как вещественная матрица. Aeq является Meоколо-nvars матрица, где Me - количество уравнений.

Aeq кодирует Me линейные равенства

Aeq*x = beq,

где x - вектор столбца N переменные x(:), и beq - вектор столбца с Me элементы.

Например, для указания

x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20,

дать следующие ограничения:

Aeq = [1,2,3;2,4,1];
beq = [10;20];

Пример: Чтобы указать, что управляющие переменные суммируются до 1, задайте ограничения Aeq = ones(1,N) и beq = 1.

Типы данных: double

Линейные ограничения равенства, заданные как действительный вектор. beq является Me-элементный вектор, связанный с Aeq матрица. Если вы проходите beq как вектор строки, решатели внутренне преобразуют beq к вектору столбца beq(:).

beq кодирует Me линейные равенства

Aeq*x = beq,

где x - вектор столбца N переменные x(:), и Aeq является матрицей размера Meqоколо-N.

Например, для указания

x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20,

дать следующие ограничения:

Aeq = [1,2,3;2,4,1];
beq = [10;20];

Пример: Чтобы указать, что управляющие переменные суммируются до 1, задайте ограничения Aeq = ones(1,N) и beq = 1.

Типы данных: double

Нижние границы, определяемые как действительный вектор или массив двойников. lb представляет нижние границы по элементам в lb  x  ub.

Внутри, ga преобразует массив lb к вектору lb(:).

Пример: lb = [0;-Inf;4] средства x(1) ≥ 0, x(3) ≥ 4.

Типы данных: double

Верхние границы, определяемые как действительный вектор или массив двойников. ub представляет верхние границы по элементам в lb  x  ub.

Внутри, ga преобразует массив ub к вектору ub(:).

Пример: ub = [Inf;4;10] средства x(2) ≤ 4, x(3) ≤ 10.

Типы данных: double

Нелинейные ограничения, указанные как дескриптор функции или имя функции. nonlcon - функция, принимающая вектор или массив; x и возвращает два массива, c(x) и ceq(x).

  • c(x) - массив нелинейных ограничений неравенства в x. ga попытки удовлетворить

    c(x) <= 0

    для всех записей c.

  • ceq(x) - массив нелинейных ограничений равенства в x. ga попытки удовлетворить

    ceq(x) = 0

    для всех записей ceq.

Например,

x = ga(@myfun,4,A,b,Aeq,beq,lb,ub,@mycon)

где mycon является функцией MATLAB ®, такой как

function [c,ceq] = mycon(x)
c = ...     % Compute nonlinear inequalities at x.
ceq = ...   % Compute nonlinear equalities at x.
Дополнительные сведения см. в разделе Нелинейные ограничения.

Сведения об использовании векторизированных зависимостей см. в разделе Векторизованные зависимости.

Примечание

ga не обеспечивает выполнение нелинейных ограничений при PopulationType параметр имеет значение 'bitString' или 'custom'.

Если IntCon не пуст, второй выход nonlcon (ceq) должна быть пустой записью ([]).

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

Типы данных: char | function_handle | string

Опции оптимизации, указанные как выходные данные optimoptions или структура.

optimoptions скрывает параметры, перечисленные курсивом. См. раздел Опциональные опции скрытия.

  • Значения в {} укажите значение по умолчанию.

  • {}* представляет значение по умолчанию при наличии линейных ограничений и для MutationFcn также при наличии границ.

  • I * указывает, чтоga по-разному обрабатывает опции целочисленных ограничений; эта нотация не применяется к gamultiobj.

  • NM указывает, что опция не применяется к gamultiobj.

Опции для ga, Целое число ga, и gamultiobj

ВыборОписаниеЦенности
ConstraintTolerance

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

Для структуры опций используйте TolCon.

Положительный скаляр | {1e-3}

CreationFcn

I * Функция, создающая исходную популяцию. Укажите в качестве имени встроенной функции создания или дескриптора функции. См. раздел Параметры заполнения.

{'gacreationuniform'} | {'gacreationlinearfeasible'}* | Пользовательская функция создания

CrossoverFcn

I * Функция, которую алгоритм использует для создания перекрестных потомков. Укажите в качестве имени встроенной перекрестной функции или дескриптора функции. См. раздел Параметры кроссовера.

{'crossoverscattered'} для ga, {'crossoverintermediate'}* для gamultiobj | 'crossoverheuristic' | 'crossoversinglepoint' | 'crossovertwopoint' | 'crossoverarithmetic' | Пользовательская функция кроссовера

CrossoverFraction

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

Положительный скаляр | {0.8}

Display

Уровень отображения.

'off' | 'iter' | 'diagnose' | {'final'}

DistanceMeasureFcn

Функция, которая вычисляет измерение расстояния отдельных лиц. Укажите в качестве имени встроенной функции измерения расстояния или дескриптора функции. Значение применяется к переменной решения или пространству проектирования (генотип) или к пространству функций (фенотип). Дефолт 'distancecrowding' находится в функциональном пространстве (фенотип). Для gamultiobj только. См. раздел Параметры многообъективности.

Для структуры опций используйте дескриптор функции, а не имя.

{'distancecrowding'} означает то же, что и {@distancecrowding,'phenotype'} | {@distancecrowding,'genotype'} | Пользовательская функция расстояния

EliteCount

NM Положительное целое число, указывающее, сколько людей в текущем поколении гарантированно выживет до следующего поколения. Не используется в gamultiobj.

Положительное целое число | {ceil(0.05*PopulationSize)} | {0.05*(default PopulationSize)} для смешанно-целочисленных проблем

FitnessLimit

NM Если функция пригодности достигает значения FitnessLimitалгоритм останавливается.

Скаляр | {-Inf}

FitnessScalingFcn

Функция, которая масштабирует значения функции фитнеса. Укажите в качестве имени встроенной функции масштабирования или дескриптора функции. Параметр недоступен для gamultiobj.

{'fitscalingrank'} | 'fitscalingshiftlinear' | 'fitscalingprop' | 'fitscalingtop' | Пользовательская функция масштабирования фитнеса

FunctionTolerance

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

Для gamultiobjалгоритм останавливается, когда среднее геометрическое относительное изменение значения разброса по options.MaxStallGenerations поколения меньше, чем options.FunctionTolerance, и окончательный разброс меньше среднего разброса за прошлый options.MaxStallGenerations поколений. См. Алгоритм gamultiobj.

Для структуры опций используйте TolFun.

Положительный скаляр | {1e-6} для ga, {1e-4} для gamultiobj

HybridFcn

I * Функция, которая продолжает оптимизацию послеga завершается. Укажите в качестве имени или дескриптора функции.

Альтернативно, массив ячеек, задающий гибридную функцию и ее опции. См. раздел Гибридная функция ga.

Для gamultiobj, единственной гибридной функцией является @fgoalattain. См. раздел Гибридная функция gamultiobj.

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

Имя функции или дескриптор | 'fminsearch' | 'patternsearch' | 'fminunc' | 'fmincon' | {[]}

или

массив ячеек 1 на 2 | {@solver, hybridoptions}, где solver = fminsearch, patternsearch, fminunc, или fmincon {[]}

InitialPenalty

NM I * Начальное значение штрафного параметра

Положительный скаляр | {10}

InitialPopulationMatrix

Первоначальная популяция использовалась для формирования генетического алгоритма. Имеет до PopulationSize строки и N столбцы, где N - количество переменных. Можно пройти частичное заполнение, то есть с меньшим, чем PopulationSize строк. В этом случае генетический алгоритм использует CreationFcn для создания оставшихся членов населения. См. раздел Параметры заполнения

Для структуры опций используйте InitialPopulation.

Матрица | {[]}

InitialPopulationRange

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

Для структуры опций используйте PopInitRange.

Матрица или вектор | {[-10;10]} для неограниченных компонентов, {[-1e4+1;1e4+1]} для неограниченных компонентов проблем с целочисленными ограничениями, {[lb;ub]} для ограниченных компонентов с диапазоном по умолчанию, измененным в соответствии с односторонними границами.

InitialScoresMatrix

I * Начальные баллы, используемые для определения пригодности. Имеет до PopulationSize строки и имеет Nf столбцы, где Nf - количество фитнес-функций (1 для ga, больше, чем 1 для gamultiobj). Можно передать матрицу частичных баллов, то есть матрицу с меньшим количеством баллов, чем PopulationSize строк. В этом случае решатель заполняет баллы при оценке функций пригодности.

Для структуры опций используйте InitialScores.

Вектор столбца для одного объектива | матрица для мультиобъектива | {[]}

MaxGenerations

Максимальное число итераций перед остановкой алгоритма.

Для структуры опций используйте Generations.

Положительное целое число |{100*numberOfVariables} для ga, {200*numberOfVariables} для gamultiobj

MaxStallGenerations

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

Для gamultiobjалгоритм останавливается, когда среднее геометрическое относительное изменение значения разброса по options.MaxStallGenerations поколения меньше, чем options.FunctionTolerance, и окончательный разброс меньше среднего разброса за прошлый options.MaxStallGenerations поколений. См. Алгоритм gamultiobj.

Для структуры опций используйте StallGenLimit.

Положительное целое число | {50} для ga, {100} для gamultiobj

MaxStallTime

NM Алгоритм останавливается, если нет улучшения целевой функции для MaxStallTime секунды, измеренные tic и toc.

Для структуры опций используйте StallTimeLimit.

Положительный скаляр | {Inf}

MaxTime

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

Для структуры опций используйте TimeLimit.

Положительный скаляр | {Inf}

MigrationDirection

Направление миграции. См. раздел Параметры переноса

'both' | {'forward'}

MigrationFraction

Скаляр от 0 до 1, указывающий долю индивидуумов в каждой субпопуляции, которая мигрирует в другую субпопуляцию. См. раздел Параметры переноса

Скаляр | {0.2}

MigrationInterval

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

Положительное целое число | {20}

MutationFcn

I * Функция, которая производит детей мутации. Укажите в качестве имени встроенной мутационной функции или дескриптора функции. См. раздел Параметры мутации.

{'mutationgaussian'} для ga, {'mutationadaptfeasible'}* для gamultiobj | 'mutationuniform' | Пользовательская функция мутации

NonlinearConstraintAlgorithm

Алгоритм нелинейных ограничений. См. раздел Алгоритмы решателя нелинейных ограничений. Опция, неизменяемая для gamultiobj.

Для структуры опций используйте NonlinConAlgorithm.

{'auglag'} для ga, {'penalty'} для gamultiobj

OutputFcn

Функции, которые ga вызовы в каждой итерации. Укажите в качестве дескриптора функции или массива ячеек дескрипторов функции. См. раздел Параметры функции вывода.

Для структуры опций используйте OutputFcns.

Дескриптор функции или массив ячеек дескрипторов функции | {[]}

ParetoFraction

Скаляр от 0 до 1, указывающий долю отдельных лиц, которые должны оставаться на первом фронте Парето, в то время как решатель выбирает отдельных лиц с более высоких фронтов, для gamultiobj только. См. раздел Параметры многообъективности.

Скаляр | {0.35}

PenaltyFactor

NM I * Параметр обновления штрафа.

Положительный скаляр | {100}

PlotFcn

Функция, отображающая данные, вычисленные алгоритмом. Укажите в качестве имени встроенной функции печати, дескриптора функции или массива ячеек встроенных имен или дескрипторов функций. См. раздел Параметры печати.

Для структуры опций используйте PlotFcns.

ga или gamultiobj: {[]} | 'gaplotdistance' | 'gaplotgenealogy' | 'gaplotselection' | 'gaplotscorediversity' |'gaplotscores' | 'gaplotstopping' | 'gaplotmaxconstr' | Пользовательская функция печати

ga только: 'gaplotbestf' | 'gaplotbestindiv' | 'gaplotexpectation' | 'gaplotrange'

gamultiobj только: 'gaplotpareto' | 'gaplotparetodistance' | 'gaplotrankhist' | 'gaplotspread'

PlotInterval

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

Положительное целое число | {1}

PopulationSize

Численность населения.

Положительное целое число | {50} когда numberOfVariables <= 5, {200} в противном случае | {min(max(10*nvars,40),100)} для смешанно-целочисленных проблем

PopulationType

Тип данных населения. Должно быть 'doubleVector' для проблем со смешанными целыми числами.

'bitstring' | 'custom' | {'doubleVector'}

ga игнорирует все ограничения, когда PopulationType имеет значение 'bitString' или 'custom'. См. раздел Параметры заполнения.

SelectionFcn

I * Функция, которая выбирает родителей детей кроссовера и мутации. Укажите в качестве имени встроенной функции выбора или дескриптора функции .

gamultiobj использует только 'selectiontournament'.

{'selectionstochunif'} для ga, {'selectiontournament'} для gamultiobj | 'selectionremainder' | 'selectionuniform' | 'selectionroulette' | Пользовательская функция выбора

StallTest

Тип теста остановки NM.

'geometricWeighted' | {'averageChange'}

UseParallel

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

true | {false}

UseVectorized

Указывает, являются ли функции векторизованными. См. разделы Векторизация и параллельные опции (оценка пользовательских функций) и Векторизация фитнес-функции.

Для структуры опций используйте Vectorized со значениями 'on' или 'off'.

true | {false}

Пример: optimoptions('ga','PlotFcn',@gaplotbestf)

Целочисленные переменные, заданные как вектор положительных целых чисел, берущих значения из 1 кому nvars. Каждое значение в IntCon представляет x компонент, который является целочисленным.

Примечание

Когда IntCon является непустым, Aeq и beq должна быть пустой записью ([]), и nonlcon должен вернуться пустым для ceq. Дополнительные сведения о целочисленном программировании см. в разделе Оптимизация смешанного целого ga.

Пример: Чтобы указать, что четные записи в x целочисленные, набор IntCon кому 2:2:nvars

Типы данных: double

Описание проблемы, указанное как структура, содержащая эти поля.

fitnessfcn

Фитнес-функции

nvars

Количество конструктивных переменных

Aineq

A матрица для линейных ограничений неравенства

Bineq

b вектор для линейных ограничений неравенства

Aeq

Aeq матрица для линейных ограничений равенства

Beq

beq вектор для линейных ограничений равенства

lb

Нижняя граница на x

ub

Верхняя граница на x

nonlcon

Функция нелинейных ограничений

intconИндексы целочисленных переменных
rngstate

Поле для сброса состояния генератора случайных чисел

solver

'ga'

options

Параметры, созданные с помощью optimoptions или структура опций

Необходимо указать поля fitnessfcn, nvars, и options. Остальные необязательны для ga.

Типы данных: struct

Выходные аргументы

свернуть все

Решение, возвращенное как реальный вектор. x является лучшим моментом, что ga находится во время итераций.

Значение целевой функции в решении, возвращаемое как вещественное число. Как правило, fval = fun(x).

Причина, которая ga остановлено, возвращено как целое число.

Флаг выходаЗначение
1

Без нелинейных ограничений - среднее совокупное изменение значения функции фитнеса MaxStallGenerations поколения меньше, чем FunctionTolerance, и нарушение ограничения меньше, чем ConstraintTolerance.

С нелинейными ограничениями - величина показателя комплементарности (см. Показатель комплементарности) меньше sqrt(ConstraintTolerance), субпроблема решается с использованием допуска, меньшего, чем FunctionTolerance, и нарушение ограничения меньше, чем ConstraintTolerance.

3

Значение фитнес-функции не изменилось в MaxStallGenerations поколения и нарушение ограничения меньше, чем ConstraintTolerance.

4

Величина шага меньше точности станка, а нарушение ограничения меньше ConstraintTolerance.

5

Минимальный лимит фитнеса FitnessLimit достигнуто, а нарушение ограничения меньше ConstraintTolerance.

0

Максимальное число поколений MaxGenerations превышено.

-1

Оптимизация завершается функцией вывода или функцией графика.

-2

Выполнимая точка не найдена.

-4

Ограничение времени простоя MaxStallTime превышено.

-5

Ограничение по времени MaxTime превышено.

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

Информация о процессе оптимизации, возвращенная в виде структуры со следующими полями:

  • problemtype - Тип проблемы, один из:

    • 'unconstrained'

    • 'boundconstraints'

    • 'linearconstraints'

    • 'nonlinearconstr'

    • 'integerconstraints'

  • rngstate - состояние генератора случайных чисел MATLAB непосредственно перед запуском алгоритма. Можно использовать значения в rngstate для воспроизведения выходных данных ga. См. раздел Воспроизведение результатов.

  • generations - Число вычисленных поколений.

  • funccount - Количество оценок фитнес-функции.

  • message - Причина прекращения работы алгоритма.

  • maxconstraint - Максимальное нарушение ограничений, если таковое имеется.

  • hybridflag - Флаг выхода из гибридной функции. Относится к HybridFcn options. Неприменимо к gamultiobj.

Конечное население, возвращенное как PopulationSizeоколо-nvars матрица. Строки population являются личностями.

Окончательные оценки, возвращенные в виде вектора столбца.

  • Для не целочисленных проблем окончательные оценки являются значениями функции пригодности строк population.

  • Для целочисленных проблем окончательные оценки представляют собой штрафные значения пригодности членов популяции. См. раздел Алгоритм целочисленной ga.

Подробнее

свернуть все

Показатель взаимодополняемости

В решателе дополненных лагранжевых нелинейных ограничений мера комплементарности является нормой вектора, элементами которого являются ciλ i, где ci - нарушение ограничения нелинейных неравенств, λ i - соответствующий множитель Лагранжа. См. Дополненный лагранжианский генетический алгоритм.

Совет

  • Чтобы записать функцию с дополнительными параметрами в независимые переменные, которые могут быть вызваны ga, см. раздел Передача дополнительных параметров.

  • Для проблем, использующих тип заполнения Double Vector (по умолчанию), ga не принимает функции, входы которых имеют тип complex. Для решения задач, связанных со сложными данными, запишите свои функции так, чтобы они принимали вещественные векторы, разделяя действительную и мнимую части.

Алгоритмы

Описание генетического алгоритма см. в разделе Как работает генетический алгоритм.

Описание алгоритма смешанного целочисленного программирования см. в разделе Алгоритм целочисленного ga.

Описание алгоритмов нелинейных ограничений см. в разделе Алгоритмы решателя нелинейных ограничений.

Альтернативная функциональность

Приложение

Задача «Оптимизировать интерактивный редактор» обеспечивает визуальный интерфейс для ga.

Вопросы совместимости

развернуть все

В R2019b изменилось поведение

Ссылки

[1] Голдберг, Дэвид Э., Генетические алгоритмы в поиске, оптимизации и машинном обучении, Эддисон-Уэсли, 1989.

[2] А. Р. Конн, Н. И. М. Гулд и Ф. Л. Тоунт. «Глобально конвергентный дополненный лагранжевый алгоритм оптимизации с общими ограничениями и простыми границами», SIAM Journal on Numerical Analysis, Volume 28, Number 2, pages 545-572, 1991.

[3] А. Р. Конн, Н. И. М. Гулд и Ф. Л. Тоунт. «Глобально конвергентный дополненный лагранжевый барьерный алгоритм для оптимизации с общими ограничениями неравенства и простыми границами», Математика вычислений, том 66, число 217, стр. 261-288, 1997.

Расширенные возможности

Представлен до R2006a