gamultiobj

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

Синтаксис

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

Описание

пример

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

Примечание

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

пример

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

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

пример

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

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

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

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

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

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

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

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

Для получения дополнительной информации смотрите Нелинейные Ограничения (Optimization Toolbox).

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

Опции оптимизации, заданные как вывод optimoptions или структуры. Смотрите детали опции в Опциях Генетического алгоритма.

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

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

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

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

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

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

Опции для ga, целое число ga и gamultiobj

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

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

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

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

CreationFcn

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

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

CrossoverFcn

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

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

CrossoverFraction

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

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

Display

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

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

DistanceMeasureFcn

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

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

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

EliteCount

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

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

FitnessLimit

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

Скаляр | {-Inf}

FitnessScalingFcn

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

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

FunctionTolerance

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

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

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

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

HybridFcn

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

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

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

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

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

или

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

InitialPenalty

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

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

InitialPopulationMatrix

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

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

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

InitialPopulationRange

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

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

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

InitialScoresMatrix

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

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

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

MaxGenerations

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

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

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

MaxStallGenerations

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

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

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

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

MaxStallTime

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

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

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

MaxTime

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

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

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

MigrationDirection

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

'both' | {'forward'}

MigrationFraction

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

Скаляр | {0.2}

MigrationInterval

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

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

MutationFcn

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

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

NonlinearConstraintAlgorithm

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

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

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

OutputFcn

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

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

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

ParetoFraction

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

Скаляр | {0.35}

PenaltyFactor

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

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

PlotFcn

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

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

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

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

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

PlotInterval

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

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

PopulationSize

Размер генеральной совокупности.

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

PopulationType

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

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

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

SelectionFcn

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

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

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

StallTest

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

'geometricWeighted' | {'averageChange'}

UseParallel

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

true | {false}

UseVectorized

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

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

true | {false}

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

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

fitnessfcn

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

nvars

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

Aineq

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

Bineq

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

Aeq

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

Beq

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

lb

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

ub

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

nonlcon

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

rngstate

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

solver

'gamultiobj'

options

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

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

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

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

свернуть все

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

Значения функции на передней стороне Парето, возвращенной как m-by-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Общее количество функциональных оценок.
messageВыходное сообщение gamultiobj.
averagedistanceСреднее “расстояние”, которое по умолчанию является стандартным отклонением нормы различия между передними участниками Парето и их средним значением.
spreadКомбинация “расстояния” и мера перемещения точек на передней стороне Парето между итоговыми двумя итерациями.
maxconstraintМаксимальное ограничительное нарушение в итоговом Множестве Парето.

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

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

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

Больше о

свернуть все

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

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

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

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

Алгоритмы

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

Ссылки

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

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

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