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

Примеры

свернуть все

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- 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 элементы.

Например, чтобы задать

x 1 + 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.

Например, чтобы задать

x 1 + 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 элементы.

Например, чтобы задать

x 1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x 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- N.

Например, чтобы задать

x 1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x 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 скрывает опции, перечисленные курсивом. См. Опции, которые Скрывает optimoptions.

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

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

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

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

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

ОпцияОписаниеЗначения
ConstraintTolerance

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

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

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

CreationFcn

Я* Функция, которая создает начальную генеральную совокупность. Задайте как имя встроенной функции создания или указателя на функцию. См. Опции Населения.

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

CrossoverFcn

Я* Функция, что использование алгоритма, чтобы создать перекрестные дочерние элементы. Задайте как имя встроенной перекрестной функции или указателя на функцию. См. Перекрестные Опции.

{'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 поколения. См. gamultiobj Алгоритм.

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

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

HybridFcn

Я* Функция, которая продолжает оптимизацию после 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

Я* Начальные баллы раньше определял фитнес. Имеет до 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

Я* Функция, которая производит дочерние элементы мутации. Задайте как имя встроенной функции мутации или указателя на функцию. См. Опции Мутации.

{'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

Я* Функция, которая выбирает родительские элементы дочерних элементов перекрестного соединения и мутации. Задайте как имя встроенной функции выбора или указателя на функцию.

gamultiobj использование только 'selectiontournament'.

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

StallTest

NM, Останавливающий тестовый тип.

'geometricWeighted' | {'averageChange'}

UseParallel

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

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 остановленный, возвращенный как целое число.

Exitflag Значение
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 Алгоритм.

Больше о

свернуть все

Мера по взаимозависимости

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

Советы

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

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

Алгоритмы

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

Для описания алгоритма частично-целочисленного программирования смотрите Целое число ga Алгоритм.

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

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

Приложение

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

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

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

Поведение изменяется в R2019b

Ссылки

[1] Голдберг, Дэвид Э., генетические алгоритмы в Search, Optimization & Machine Learning, Аддисоне-Уэсли, 1989.

[2] А. Р. Конн, Н. Ай. М. Гулд и Ph Л. Тойнт. “Глобально Конвергентный Увеличенный лагранжевый Алгоритм для Оптимизации с Общими ограничениями и Простыми Границами”, SIAM Journal согласно Числовому Анализу, Объем 28, Номер 2, страницы 545-572, 1991.

[3] А. Р. Конн, Н. Ай. М. Гулд и Ph Л. Тойнт. “Глобально Конвергентный Увеличенный лагранжевый Алгоритм Барьера для Оптимизации с Общими Ограничениями неравенства и Простыми Границами”, Математика Расчета, Объем 66, Номер 217, страницы 261-288, 1997.

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

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