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 для всех решений в xfval имеет 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')

Чтобы видеть эффект линейного ограничения на эту проблему, смотрите Многоцелевую проблему с Линейным Ограничением.

В этом примере показано, как найти переднюю сторону Парето для многоцелевой проблемы в присутствии линейного ограничения.

Существует две целевых функции и две переменные 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

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

Найдите переднюю сторону Парето для двух функций фитнеса 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')

Найдите и постройте переднюю сторону Парето для второй функции 2D объективного Шаффера. Эта функция имеет разъединенную переднюю сторону Парето.

Скопируйте этот код в файл функции на вашем пути 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;

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- 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] задавать эти суммы:

x 1 + 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] задавать эти суммы:

x 1 + 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] задавать эти суммы:

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

Например, дайте ограничениям   Aeq = [1,2,3;2,4,1] и   beq = [10;20] задавать эти суммы:

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

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

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

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

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

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

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

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

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

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

CreationFcn

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

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

CrossoverFcn

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

{'crossoverscattered'} для ga, {'crossoverintermediate'}* для gamultiobj | 'crossoverheuristic' | 'crossoversinglepoint' | 'crossovertwopoint' | 'crossoverarithmetic' | Пользовательская перекрестная функция

CrossoverFraction

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

Положительная скалярная величина | {0.8}

Display

Level of display.

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

DistanceMeasureFcn

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

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

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

EliteCount

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

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

FitnessLimit

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

Скаляр | {-Inf}

FitnessScalingFcn

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

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

FunctionTolerance

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

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

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

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

HybridFcn

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

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

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

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

Имя функции или указатель | 'fminsearch' | 'patternsearch' | 'fminunc' | 'fmincon' | {[]}

или

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

InitialPenalty

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

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

InitialPopulationMatrix

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

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

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

InitialPopulationRange

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

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

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

InitialScoresMatrix

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

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

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

MaxGenerations

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

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

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

MaxStallGenerations

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

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

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

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

MaxStallTime

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

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

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

MaxTime

Остановки алгоритма после выполняющийся после MaxTime секунды, как измерено tic и toc. Этот предел осуществляется после каждой итерации, таким образом, ga может превысить предел, когда итерация занимает время.

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

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

MigrationDirection

Направление миграции. См. Опции Миграции

'both' | {'forward'}

MigrationFraction

Скаляр от 0 до 1 определения части индивидуумов в каждом поднаселении, которое мигрирует на различное поднаселение. См. Опции Миграции

Скаляр | {0.2}

MigrationInterval

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

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

MutationFcn

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

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

NonlinearConstraintAlgorithm

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

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

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

OutputFcn

Функции, что ga вызывает на каждой итерации. Определите функцией указатель или cell-массив указателей на функцию. См. Опции Выходной функции.

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

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

ParetoFraction

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

Скаляр | {0.35}

PenaltyFactor

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

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

PlotFcn

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

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

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

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

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

PlotInterval

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

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

PopulationSize

Размер населения.

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

PopulationType

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

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

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

SelectionFcn

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

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

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

StallTest

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

'geometricWeighted' | {'averageChange'}

UseParallel

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

true | {false}

UseVectorized

Задает, векторизованы ли функции. Смотрите Векторизуют и Параллельные Опции (Оценка Функции пользователя) и Векторизуют Функцию Фитнеса.

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

true | {false}

Пример: optimoptions('gamultiobj','PlotFcn',@gaplotpareto)

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

fitnessfcn

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

nvars

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

Aineq

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

Bineq

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

Aeq

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

Beq

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

lb

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

ub

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

nonlcon

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

rngstate

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

solver

'gamultiobj'

options

Опции создали использование optimoptions или структура опций

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

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

свернуть все

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

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

Обоснуйте gamultiobj остановленный, возвращенный как целое число.

Значение exitflagОстановка условия
1

Среднее геометрическое относительного изменения в значении распространения по options.MaxStallGenerations поколения меньше options.FunctionTolerance, и итоговое распространение меньше среднего значения, распространенного по прошлому options.MaxStallGenerations поколения

0

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

-1

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

-2

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

-5

Ограничение по времени превышено

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

выход FieldЗначение
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.

Больше о

свернуть все

Передняя сторона Парето

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

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

Как в Локальном по сравнению с Глобальными оптимумами, для передней стороны Парето возможно быть локальным, но не глобальным. “Локальный” означает, что точки Парето могут быть ненижними по сравнению с соседними точками, но указывают дальше в пространстве параметров, мог иметь более низкие значения функции в каждом компоненте.

Алгоритмы

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

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

Приложение

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

Ссылки

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

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

Представленный в R2007b
Для просмотра документации необходимо авторизоваться на сайте