exponenta event banner

gamultiobj

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

Описание

пример

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

Примечание

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

пример

x = gamultiobj(fun,nvars,A,b) находит локальный набор Pareto x в зависимости от A∗x≤b линейных неравенств. См. раздел Ограничения линейного неравенства. gamultiobj поддерживает только линейные зависимости по умолчанию PopulationType вариант ('doubleVector').

x = gamultiobj(fun,nvars,A,b,Aeq,beq) находит локальный набор Pareto x с учетом Aeq∗x=beq линейных уравнений и A∗x≤b линейных неравенств см. раздел Ограничения линейного равенства. (Набор A = [] и b = [] если неравенства не существует.) gamultiobj поддерживает только линейные зависимости по умолчанию PopulationType вариант ('doubleVector').

пример

x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub) определяет набор нижних и верхних границ для конструктивных переменных x чтобы локальный аппарат Pareto был найден в диапазоне 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) находит набор Pareto для 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.

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

Найдите фронт Pareto для двух фитнес-функций sin(x) и cos(x) на 0≤x≤2π интервала.

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;

Настройка параметров для просмотра передней панели Pareto как 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;

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;

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

[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около-nvars, где матрица представляет n отдельных лиц. fun возвращает матрицу размера nоколо-m, где m - количество объективных функций. См. раздел Векторизация фитнес-функции.

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

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

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

Пример: 4

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

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

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

A*x <= b,

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

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

x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 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около-nvars.

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

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

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

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

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

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

Aeq*x = beq,

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

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

x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 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около-N.

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

x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 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около-nvars, где матрица представляет n отдельных лиц. nonlcon возвращает матрицу размера nоколо-mc в первом аргументе, где mc - количество нелинейных ограничений неравенства. nonlcon возвращает матрицу размера nоколо-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

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

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

DistanceMeasureFcn

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

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

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

EliteCount

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

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

FitnessLimit

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

Скаляр | {-Inf}

FitnessScalingFcn

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

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

FunctionTolerance

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

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

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

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

HybridFcn

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

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

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

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

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

или

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

InitialPenalty

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

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

InitialPopulationMatrix

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

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

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

InitialPopulationRange

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

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

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

InitialScoresMatrix

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

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

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

MaxGenerations

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

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

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

MaxStallGenerations

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

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

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

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

MaxStallTime

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

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

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

MaxTime

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

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

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

MigrationDirection

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

'both' | {'forward'}

MigrationFraction

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

Скаляр | {0.2}

MigrationInterval

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

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

MutationFcn

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

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

NonlinearConstraintAlgorithm

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

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

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

OutputFcn

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

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

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

ParetoFraction

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

Скаляр | {0.35}

PenaltyFactor

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

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

PlotFcn

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

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

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

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

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

PlotInterval

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

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

PopulationSize

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

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

PopulationType

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

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

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

SelectionFcn

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

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

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

StallTest

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

'geometricWeighted' | {'averageChange'}

UseParallel

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

true | {false}

UseVectorized

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

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

true | {false}

Пример: optimoptions('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около-nvars массив, где m - количество точек на фронте Парето. Каждая строка x представляет одну точку на фронте Парето.

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

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

значение 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около-nvars массив, где n - численность населения.

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

При наличии нелинейных ограничений gamultiobj устанавливает scores неосуществимых членов населения Inf.

Подробнее

свернуть все

Фронт Парето

Фронт Парето - это набор точек в пространстве параметров (пространство переменных принятия решения), которые имеют значения функции неподходящей пригодности.

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

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

Алгоритмы

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

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

Приложение

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

Ссылки

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

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

Представлен в R2007b