ga

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

Описание

пример

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

Примечание

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

пример

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, счета конечного населения.

Примеры

свернуть все

The 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+x223 и (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-by- nvars матрица, где pop - текущий размер населения. В этом случае fun возвращает вектор той же длины, что и pop содержащие значения функции соответствия. Убедитесь, что fun не принимает какого-либо конкретного размера для pop, с ga может пройти один представитель населения даже в векторизованном вычислении.

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

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

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

Пример: 4

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

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

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

A*x <= b,

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

Для примера, чтобы задать

<reservedrangesplaceholder1> 1 + 2 <reservedrangesplaceholder0> 2  10
3 <reservedrangesplaceholder1> 1 + 4 <reservedrangesplaceholder0> 2  20
5 <reservedrangesplaceholder1> 1 + 6 <reservedrangesplaceholder0> 2  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-by- N.

Для примера, чтобы задать

<reservedrangesplaceholder1> 1 + 2 <reservedrangesplaceholder0> 2  10
3 <reservedrangesplaceholder1> 1 + 4 <reservedrangesplaceholder0> 2  20
5 <reservedrangesplaceholder1> 1 + 6 <reservedrangesplaceholder0> 2  30,

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

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

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

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

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

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

Aeq*x = beq,

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

Для примера, чтобы задать

<reservedrangesplaceholder2> 1 + 2 <reservedrangesplaceholder1> 2 + 3 <reservedrangesplaceholder0> 3 = 10
2 <reservedrangesplaceholder2> 1 + 4 <reservedrangesplaceholder1> 2 + <reservedrangesplaceholder0> 3 = 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-by- N.

Для примера, чтобы задать

<reservedrangesplaceholder2> 1 + 2 <reservedrangesplaceholder1> 2 + 3 <reservedrangesplaceholder0> 3 = 10
2 <reservedrangesplaceholder2> 1 + 4 <reservedrangesplaceholder1> 2 + <reservedrangesplaceholder0> 3 = 20,

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

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

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

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

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

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

Пример: lb = [0;-Inf;4] означает x(1) ≥ 0, x(3) ≥ 4.

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

Верхние границы, заданные как вектор действительных чисел или массив типа 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

Level of 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 поколений. См. Алгоритм Гамультиобj.

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

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

HybridFcn

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

Кроме того, массив ячеек, задающий гибридную функцию и ее опции. См. Ga Hybrid Function.

Для gamultiobj, единственная гибридная функция @fgoalattain. См. Gamultiobj Hybrid Function.

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

Имя функции или указатель | '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.

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

MaxStallGenerations

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

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

Для структуры опций используйте 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 вызовы при каждой итерации. Задайте как указатель на функцию или cell-массив указателей на функцию. См. «Опции выходной функции».

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

Указатель на функцию или cell-массив указателей на функцию | {[]}

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

Вычислите соответствие и нелинейные функции ограничения параллельно. См. «Векторизация и параллельные Опции» (User Вычисления функции) и «Как использовать параллельную обработку в Global Optimization Toolbox».

true | {false}

UseVectorized

Определяет, векторизированы ли функции. См. «Векторизация и параллельные Опции» (User Вычисления функции) и «Векторизация функции соответствия».

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

true | {false}

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

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

Примечание

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

Пример: Чтобы указать, что четные значения в 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 stop, возвращается как целое число.

Выходной флагЗначение
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-by- nvars матрица. Строки population являются индивидуумами.

Финальные счета, вернулись как вектор-столбец.

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

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

Подробнее о

свернуть все

Мера комплементарности

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

Совет

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

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

Алгоритмы

Для описания генетического алгоритма смотрите, Как работает Генетический Алгоритм.

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

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

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

Приложение

Задача Optimize Live Editor обеспечивает визуальный интерфейс для ga.

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

расширить все

Поведение изменено в R2019b

Ссылки

[1] Goldberg, David E., Genetic Algorithms in Search, Optimization & Машинное Обучение, Addison-Wesley, 1989.

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

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

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

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