ga

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

Синтаксис

x = ga(fun,nvars)
x = ga(fun,nvars,A,b)
x = ga(fun,nvars,A,b,Aeq,beq)
x = ga(fun,nvars,A,b,Aeq,beq,lb,ub)
x = ga(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon)
x = ga(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,options)
x = ga(fun,nvars,A,b,[],[],lb,ub,nonlcon,IntCon)
x = ga(fun,nvars,A,b,[],[],lb,ub,nonlcon,IntCon,options)
x = ga(problem)
[x,fval] = ga(___)
[x,fval,exitflag,output] = ga(___)
[x,fval,exitflag,output,population,scores] = ga(___)

Описание

пример

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

Примечание

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

пример

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

Найдите минимум этой функции с помощью 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.9993    0.0000

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

disp(A*x' - b)
    0.0007
   -5.9993

Используйте генетический алгоритм, чтобы минимизировать функцию 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)
   1.0000e-03
disp(Aeq*x' - beq)
  -9.9997e-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.9993
disp(Aeq*x' - beq)
  -9.4902e-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.
x = 1×2

   -2.0000    3.0000

Проверяйте, что линейные ограничения удовлетворены к в 1e-6.

disp(A*x' - b)
   9.9986e-07
disp(Aeq*x' - beq)
  -9.9565e-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 искал минимум, получите результаты output и exitflag. Кроме того, постройте минимальное наблюдаемое значение целевой функции, в то время как решатель прогрессирует.

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)

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: 3881
          message: 'Optimization terminated: average change in the penalty fitness value less than options.FunctionTolerance...'
    maxconstraint: 0

Используйте генетический алгоритм, чтобы минимизировать функцию 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.

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

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-by-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-by-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-by-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

Нижние границы, заданные как вектор действительных чисел или массив, удваиваются. 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.
Для получения дополнительной информации смотрите Нелинейные Ограничения (Optimization Toolbox).

Чтобы изучить, как использовать векторизованные ограничения, смотрите Векторизованные Ограничения.

Примечание

ga не осуществляет нелинейные ограничения, которые будут удовлетворены, когда опция PopulationType установлена в 'bitString' или 'custom'.

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

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

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

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

Создайте options при помощи (рекомендуемого) optimoptions или путем экспорта опций из приложения Оптимизации. Для получения дополнительной информации смотрите Импорт и Экспорт Вашей работы (Optimization Toolbox).

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

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

'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. Для получения дополнительной информации о целочисленном программировании смотрите Смешанную Целочисленную Оптимизацию.

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

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

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

fitnessfcn

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

nvars

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

Aineq

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

Bineq

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

Aeq

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

Beq

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

lb

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

ub

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

nonlcon

Нелинейная ограничительная функция

rngstate

Дополнительное поле, чтобы сбросить состояние генератора случайных чисел

solver

'ga'

options

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

Создайте problem путем экспорта проблемы из приложения Оптимизации, как описано в Импорте и Экспорте работы (Optimization Toolbox).

Типы данных: 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 использует значение фитнеса штрафа вместо значения фитнеса для критерия остановки.

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

  • проблемный тип Проблемный тип, один из:

    • 'unconstrained'

    • 'boundconstraints'

    • 'linearconstraints'

    • 'nonlinearconstr'

    • 'integerconstraints'

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

  • generations — Количество поколений вычисляется.

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

  • сообщение Причина отключения алгоритма.

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

Итоговая генеральная совокупность, возвращенная как PopulationSize-by-nvars матрица. Строки population являются людьми.

Итоговые счета, возвращенные как вектор-столбец.

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

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

Больше о

свернуть все

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

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

Советы

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

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

Алгоритмы

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

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

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

Ссылки

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

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

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

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

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