gamultiobj

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

Описание

пример

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

Примечание

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

пример

x = gamultiobj(fun,nvars,A,b) находит локальный набор Парето x удовлетворяющее линейным неравенствам Axb. См. «Линейные ограничения неравенства». gamultiobj поддерживает линейные ограничения только для PopulationType по умолчанию опция ('doubleVector').

x = gamultiobj(fun,nvars,A,b,Aeq,beq) находит локальный набор Парето x удовлетворяющее линейным равенствам Aeqx=beq и линейное неравенство Axb, см. «Линейные ограничения равенства». (Установите   A = [] и   b = [] если неравенства не существует.) gamultiobj поддерживает линейные ограничения только для PopulationType по умолчанию опция ('doubleVector').

пример

x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub) задает набор нижних и верхних границ переменных проектов x так, чтобы локальный набор Парето был найден в области значений lb  x  ub, см. «Связанные ограничения». Используйте пустые матрицы для Aeq и beq если линейных ограничений равенства не существует. gamultiobj поддерживает ограничения, накладываемые только на PopulationType по умолчанию опция ('doubleVector').

x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon) находит набор Парето, удовлетворяющий ограничениям, заданным в nonlcon. Функция nonlcon принимает x и возвращает векторы c и ceq, представляющих нелинейные неравенства и равенства соответственно. gamultiobj минимизирует fun таким образом c(x)  0 и   ceq(x) = 0. (Установите   lb = [] и   ub = [] если никаких ограничений не существует.) gamultiobj поддерживает нелинейные ограничения только для PopulationType по умолчанию опция ('doubleVector').

пример

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

x = gamultiobj(problem) находит набор Парето для problem, где problem - структура, описанная в problem.

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

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

пример

[x,fval,exitflag,output,population,scores] = gamultiobj(___) возвращает population, чьи строки являются конечным населением, и scores, счета конечного населения.

Примеры

свернуть все

Найдите фронт Парето для простой мультиобъективной задачи. Существует две цели и две переменные принятия решений x.

fitnessfcn = @(x)[norm(x)^2,0.5*norm(x(:)-[2;-1])^2+2];

Найдите фронт Парето для этой целевой функции.

rng default % For reproducibility
x = gamultiobj(fitnessfcn,2);
Optimization terminated: average change in the spread of Pareto solutions less than options.FunctionTolerance.

Постройте график точек решения.

plot(x(:,1),x(:,2),'ko')
xlabel('x(1)')
ylabel('x(2)')
title('Pareto Points in Parameter Space')

Figure contains an axes. The axes with title Pareto Points in Parameter Space contains an object of type line.

Чтобы увидеть эффект линейного ограничения на эту задачу, см. «Мультиобъективная задача с линейным ограничением».

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

Существует две целевые функции и две переменные принятия решений x.

fitnessfcn = @(x)[norm(x)^2,0.5*norm(x(:)-[2;-1])^2+2];

Линейное ограничение x(1)+x(2)1/2.

A = [1,1];
b = 1/2;

Найти фронт Парето.

rng default % For reproducibility
x = gamultiobj(fitnessfcn,2,A,b);
Optimization terminated: average change in the spread of Pareto solutions less than options.FunctionTolerance.

Постройте график ограниченного решения и линейного ограничения.

plot(x(:,1),x(:,2),'ko')
t = linspace(-1/2,2);
y = 1/2 - t;
hold on
plot(t,y,'b--')
xlabel('x(1)')
ylabel('x(2)')
title('Pareto Points in Parameter Space')
hold off

Figure contains an axes. The axes with title Pareto Points in Parameter Space contains 2 objects of type line.

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

Найдите переднюю сторону Парето для двух функций соответствия sin(x) и cos(x) на интервале 0x2π.

fitnessfcn = @(x)[sin(x),cos(x)];
nvars = 1;
lb = 0;
ub = 2*pi;
rng default % for reproducibility
x = gamultiobj(fitnessfcn,nvars,[],[],[],[],lb,ub)
Optimization terminated: average change in the spread of Pareto solutions less than options.FunctionTolerance.
x = 18×1

    4.7124
    4.7124
    3.1415
    3.6733
    3.9845
    3.4582
    3.9098
    4.4409
    4.0846
    3.8686
      ⋮

Постройте график решения. gamultiobj находит точки вдоль всего фронта Парето.

plot(sin(x),cos(x),'r*')
xlabel('sin(x)')
ylabel('cos(x)')
title('Pareto Front')
legend('Pareto front')

Figure contains an axes. The axes with title Pareto Front contains an object of type line. This object represents Pareto front.

Найдите и постройте график фронта Парето для второй функции Шаффера с двумя целями. Эта функция имеет отключенный фронт Парето.

Скопируйте этот код в файл функции в пути MATLAB ®.

function y = schaffer2(x) % y has two columns

% Initialize y for two objectives and for all x
y = zeros(length(x),2);

% Evaluate first objective. 
% This objective is piecewise continuous.
for i = 1:length(x)
    if x(i) <= 1
        y(i,1) = -x(i);
    elseif x(i) <=3 
        y(i,1) = x(i) -2; 
    elseif x(i) <=4 
        y(i,1) = 4 - x(i);
    else 
        y(i,1) = x(i) - 4;
    end
end

% Evaluate second objective
y(:,2) = (x -5).^2;

Постройте график двух целей.

x = -1:0.1:8;
y = schaffer2(x);
plot(x,y(:,1),'r',x,y(:,2),'b');
xlabel x
ylabel 'schaffer2(x)'
legend('Objective 1','Objective 2')

Две целевые функции конкурируют за x в областях значений [1,3] и [4,5]. Но, оптимальный по Парето фронт состоит только из двух отключенных областей, соответствующих x в областях значений [1,2] и [4,5]. Есть отключенные области, потому что область [2,3] уступает [4,5]. В этой области значений целевые 1 имеет те же значения, но целевое 2 меньше.

Установите границы, чтобы сохранить представителей населения в области значений.$-5\le x\le 10$

lb = -5;
ub = 10;

Установите опции, чтобы просмотреть фронт Парето как gamultiobj выполняется.

options = optimoptions('gamultiobj','PlotFcn',@gaplotpareto);

Функции gamultiobj.

rng default % For reproducibility
[x,fval,exitflag,output] = gamultiobj(@schaffer2,1,[],[],[],[],lb,ub,options);
Optimization terminated: maximum number of generations exceeded.

Запустите простую мультиобъективную задачу и получите все доступные выходы.

Установите генератор случайных чисел для повторяемости.

rng default

Установите функции соответствия равными kur_multiobjective, функция, которая имеет три переменные управления и возвращает два значения функции соответствия.

fitnessfcn = @kur_multiobjective;
nvars = 3;

The kur_multiobjective функция имеет следующий код.

function y = kur_multiobjective(x)
%KUR_MULTIOBJECTIVE Objective function for a multiobjective problem. 
%   The Pareto-optimal set for this two-objective problem is nonconvex as
%   well as disconnected. The function KUR_MULTIOBJECTIVE computes two
%   objectives and returns a vector y of size 2-by-1.
%
%   Reference: Kalyanmoy Deb, "Multi-Objective Optimization using
%   Evolutionary Algorithms", John Wiley & Sons ISBN 047187339 

%   Copyright 2007 The MathWorks, Inc.


% Initialize for two objectives 
y = zeros(2,1);

% Compute first objective
for i = 1:2
  y(1) = y(1)  - 10*exp(-0.2*sqrt(x(i)^2 + x(i+1)^2));
end

% Compute second objective
for i = 1:3
   y(2) = y(2) +  abs(x(i))^0.8 + 5*sin(x(i)^3);
end

Установите нижнюю и верхнюю границы для всех переменных.

ub = [5 5 5];
lb = -ub;

Найдите фронт Парето и все другие выходы для этой проблемы.

[x,fval,exitflag,output,population,scores] = gamultiobj(fitnessfcn,nvars, ...
    [],[],[],[],lb,ub);
Optimization terminated: average change in the spread of Pareto solutions less than options.FunctionTolerance.

Исследуйте размеры некоторых возвращенных переменных.

sizex = size(x)
sizepopulation = size(population)
sizescores = size(scores)
sizex =

    18     3


sizepopulation =

    50     3


sizescores =

    50     2

Возвращенный фронт Парето содержит 18 точки. Насчитывается 50 представители окончательного населения. Каждый population строка имеет три размерности, соответствующие трем переменным принятия решений. Каждый scores строка имеет две размерности, соответствующих двум функциям соответствия.

Входные параметры

свернуть все

Функции соответствия для оптимизации, заданные как указатель на функцию или имя функции.

fun является функцией, которая принимает действительный вектор-строку двойников x длины nvars и возвращает вектор действительных чисел F(x) значений целевой функции. Для получения дополнительной информации о написании fun, см. «Вычисление целевых функций».

Если вы задаете UseVectorized опция для true, затем fun принимает матрицу размера n-by- nvars, где матрица представляет n индивидуумов. fun возвращает матрицу размера n-by- m, где m количество целевых функций. См. Векторизация функции соответствия.

Пример: @(x)[sin(x),cos(x)]

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

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

Пример: 4

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

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

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

A*x <= b,

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

Для примера дайте ограничения   A = [1,2;3,4;5,6] и   b = [10;20;30] для определения следующих сумм:

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

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

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

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

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

A*x <= b,

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

Для примера дайте ограничения   A = [1,2;3,4;5,6] и   b = [10;20;30] для определения следующих сумм:

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

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

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

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

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

Aeq*x = beq,

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

Для примера дайте ограничения   Aeq = [1,2,3;2,4,1] и   beq = [10;20] для определения следующих сумм:

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

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

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

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

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

Aeq*x = beq,

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

Для примера дайте ограничения   Aeq = [1,2,3;2,4,1] и   beq = [10;20] для определения следующих сумм:

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

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

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

Нижние границы, заданные как вектор действительных чисел или вещественный массив. Если   numel(lb) = nvars, затем lb задает, что   x(i) >= lb(i) для всех i.

Если   numel(lb) < nvars, затем lb задает, что   x(i) >= lb(i) для     1 <= i <= numel(lb).

В этом случае решатели выдают предупреждение.

Пример: Чтобы задать все x-компоненты как положительные, установите lb = zeros(nvars,1).

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

Верхние границы, заданные как вектор действительных чисел или действительный массив. Если   numel(ub) = nvars, затем ub задает, что   x(i) <= ub(i) для всех i.

Если   numel(ub) < nvars, затем ub задает, что   x(i) <= ub(i) для     1 <= i <= numel(ub).

В этом случае решатели выдают предупреждение.

Пример: Чтобы задать все x-компоненты как меньше единицы, установите ub = ones(nvars,1).

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

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

  • c(x) - вектор-строка нелинейных ограничений неравенства в x. gamultiobj функция пытается удовлетворить   c(x) <= 0 для всех записей c.

  • ceq(x) является вектор-строка нелинейными ограничениями равенства в x. gamultiobj функция пытается удовлетворить   ceq(x) = 0 для всех записей ceq.

Если вы задаете UseVectorized опция для true, затем nonlcon принимает матрицу размера n-by- nvars, где матрица представляет n индивидуумов. nonlcon возвращает матрицу размера n-by- mc в первом аргументе, где mc - количество нелинейных ограничений неравенства. nonlcon возвращает матрицу размера n-by- mceq во втором аргументе, где mceq - количество нелинейных ограничений равенства. См. Векторизация функции соответствия.

Для примера,   x = gamultiobj(@myfun,nvars,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.

Для получения дополнительной информации см. Раздел «Нелинейные ограничения».

Типы данных: 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('gamultiobj','PlotFcn',@gaplotpareto)

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

fitnessfcn

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

nvars

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

Aineq

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

Bineq

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

Aeq

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

Beq

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

lb

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

ub

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

nonlcon

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

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

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

solver

'gamultiobj'

options

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

Необходимо задать поля fitnessfcn, nvars, и options. Оставшаяся часть опциональна для gamultiobj.

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

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

свернуть все

Точки Парето, возвращенные как m-by- nvars массив, где m - число точек на фронте Парето. Каждая строка x представляет одну точку на фронте Парето.

Значения функций на фронте Парето, возвращенные как m-by- nf массив. m - число точек на фронте Парето и nf - количество фитнес-функций. Каждая строка fval представляет значения функций в одной точке Парето в x.

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

exitflag ЗначениеУсловие остановки
1

Геометрическое среднее значение относительного изменения значения спреда по options.MaxStallGenerations поколения меньше options.FunctionToleranceи конечный спред меньше среднего спреда за последнее время options.MaxStallGenerations генерация

0

Превышено максимальное количество поколений

-1

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

-2

Допустимая точка не найдена

-5

Превышен предел времени

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

Выходное полеЗначение
problemtype

Тип задачи:

  • 'unconstrained' - Никаких ограничений

  • 'boundconstraints' - Только связанные ограничения

  • 'linearconstraints' - Линейные ограничения, с ограничениями или без них

  • 'nonlinearconstr' - Нелинейные ограничения, с другими типами ограничений или без них

rngstate

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

generationsОбщее количество поколений, исключая HybridFcn итераций.
funccountОбщее количество вычислений функции.
messagegamultiobj выходное сообщение.
averagedistanceСреднее «расстояние», которое по умолчанию является стандартным отклонением нормы различия между передними представителями Парето и их средним значением.
spreadКомбинация «расстояния» и меры перемещения точек на фронте Парето между последними двумя итерациями.
maxconstraintМаксимальное нарушение ограничений на конечном наборе Парето.

Окончательное население, возвращенная как n-by- nvars массив, где n - количество представителей населения.

Счета конечного населения, возвращенные как n-by- nf массив. n количество представителей населения, и nf - количество фитнес-функций.

Когда существуют нелинейные ограничения, gamultiobj устанавливает scores недопустимых представителей населения для Inf.

Подробнее о

свернуть все

Парето-Фронт

A Pareto front является набором точек в пространстве параметров (пространстве переменных принятия решений), которые имеют неинфекционные значения функций соответствия.

Другими словами, для каждой точки на фронте Парето можно улучшить одну функцию соответствия, только деградировав другую. Для получения дополнительной информации смотрите Что такое мультиобъективная оптимизация?

Как и в случае Local vs. Global Optima, фронт Парето может быть локальным, но не глобальным. «Локальный» означает, что точки Парето могут быть неинфекционными по сравнению с ближайшими точками, но точки, расположенные дальше в пространстве параметров, могут иметь более низкие значения функций в каждом компоненте.

Алгоритмы

gamultiobj использует управляемый, элитный генетический алгоритм (вариант NSGA-II [1]). Элитный GA всегда отдает предпочтение индивидуумам с лучшим значением соответствия (ранга). Контролируемый элитарный ГА также благоприятствует индивидуумам, которые могут помочь увеличить разнообразие населения, даже если они имеют более низкое значение соответствия. Важно сохранять разнообразие населения для сходимости к оптимальному фронту Парето. Разнообразие поддерживается путем управления элитными представителями населения по мере прогрессирования алгоритма. Две опции, ParetoFraction и DistanceMeasureFcn, управляйте элитарностью. ParetoFraction ограничивает число индивидуумов на фронте Парето (элитных представителей). Функция расстояния, выбранная DistanceMeasureFcn, помогает поддерживать разнообразие на фронте, отдавая предпочтение индивидуумам, которые находятся относительно далеко на фронте. Алгоритм останавливается, если spread, мера движения фронта Парето, мала. Для получения дополнительной информации смотрите Алгоритм Гамультиобj.

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

Приложение

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

Ссылки

[1] Дэб, Калянмой. Мультиобъектная оптимизация с использованием эволюционных алгоритмов. Chichester, England: John Wiley & Sons, 2001.

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

Введенный в R2007b