Contenido principal

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

gamultiobj

Encuentre el frente de Pareto de múltiples funciones de aptitud utilizando un algoritmo genético

Descripción

x = gamultiobj(fun,nvars) encuentra x en la Frente de Pareto de las funciones objetivo definidas en fun. nvars es la dimensión del problema de optimización (número de variables de decisión). La solución x es local, lo que significa que podría no estar en el frente global de Pareto.

Nota

En Pasar parámetros adicionales se explica cómo pasar parámetros adicionales a la función objetivo y a las funciones de restricción no lineales, si fuera necesario.

ejemplo

x = gamultiobj(fun,nvars,A,b) encuentra un conjunto de Pareto local x sujeto a las desigualdades lineales Axb. Consulte Restricciones de desigualdad lineales. gamultiobj admite restricciones lineales solo para la opción PopulationType predeterminada ('doubleVector').

ejemplo

x = gamultiobj(fun,nvars,A,b,Aeq,beq) encuentra un conjunto de Pareto local x sujeto a las igualdades lineales Aeqx=beq y las desigualdades lineales Axb, ver Restricciones de igualdad lineales. (Establezca A = [] y b = [] si no existen desigualdades). gamultiobj admite restricciones lineales solo para la opción PopulationType predeterminada ('doubleVector').

x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub) define un conjunto de límites inferior y superior en las variables de diseño x de modo que se encuentre un conjunto de Pareto local en el rango lb x ub, consulte Límites de restricción. Utilice matrices vacías para Aeq y beq si no existen restricciones de igualdad lineales. gamultiobj admite restricciones de límites solo para la opción PopulationType predeterminada ('doubleVector').

ejemplo

x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon) encuentra un conjunto de Pareto sujeto a las restricciones definidas en nonlcon . La función nonlcon acepta x y devuelve los vectores c y ceq, que representan las desigualdades e igualdades no lineales respectivamente. gamultiobj minimiza fun de modo que c(x) 0 y ceq(x) = 0. (Establezca lb = [] y ub = [] si no existen límites). gamultiobj admite restricciones no lineales solo para la opción PopulationType predeterminada ('doubleVector').

x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,options) o x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,options) encuentra un conjunto de Pareto x con los parámetros de optimización predeterminados reemplazados por valores en options . Crea options utilizando optimoptions (recomendado) o una estructura.

ejemplo

x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,intcon) o x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,intcon,options) requiere que las variables enumeradas en intcon tomen valores enteros.

Nota

Cuando hay restricciones de números enteros, gamultiobj no acepta restricciones de igualdad no lineal, solo restricciones de desigualdad no lineal.

ejemplo

x = gamultiobj(problem) encuentra el conjunto de Pareto para problem, donde problem es una estructura descrita en problem.

[x,fval] = gamultiobj(___), para cualquier variable de entrada, devuelve una matriz fval, el valor de todas las funciones de aptitud definidas en fun para todas las soluciones en x. fval tiene nf columnas, donde nf es el número de objetivos, y tiene el mismo número de filas que x.

[x,fval,exitflag,output] = gamultiobj(___) devuelve exitflag, un entero que identifica el motivo por el que el algoritmo se detuvo, y output, una estructura que contiene información sobre el proceso de optimización.

[x,fval,exitflag,output,population,scores] = gamultiobj(___) devuelve population, cuyas filas son la población final, y scores, las puntuaciones de la población final.

ejemplo

Ejemplos

contraer todo

Encuentre el frente de Pareto para un problema multiobjetivo simple. Hay dos objetivos y dos variables de decisión x .

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

Encuentre el frente de Pareto para esta función objetivo.

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

Representar los puntos solución.

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

Figure contains an axes object. The axes object with title Pareto Points in Parameter Space, xlabel x(1), ylabel x(2) contains a line object which displays its values using only markers.

\\7\7Para ver el efecto de una restricción lineal en este problema, consulte Problema multiobjetivo con restricción lineal.

Este ejemplo muestra cómo encontrar el frente de Pareto para un problema multiobjetivo en presencia de una restricción lineal.

Hay dos funciones objetivo y dos variables de decisión x .

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

La restricción lineal es x(1)+x(2)1/2 .

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

Encuentra el frente de Pareto.

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

Grafique la solución restringida y la restricción lineal.

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 object. The axes object with title Pareto Points in Parameter Space, xlabel x(1), ylabel x(2) contains 2 objects of type line. One or more of the lines displays its values using only markers

Para ver el efecto de eliminar la restricción lineal de este problema, consulte Problema multiobjetivo simple.

Encuentre el frente de Pareto para las dos funciones de aptitud sin(x) y cos(x) en el intervalo 0x2π.

fitnessfcn = @(x)[sin(x),cos(x)];
nvars = 1;
lb = 0;
ub = 2*pi;
rng default % for reproducibility
x = gamultiobj(fitnessfcn,nvars,[],[],[],[],lb,ub)
gamultiobj stopped because the average change in the spread of Pareto solutions is 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
      ⋮

Grafica la solución. gamultiobj encuentra puntos a lo largo de todo el frente de Pareto.

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

Figure contains an axes object. The axes object with title Pareto Front, xlabel sin(x), ylabel cos(x) contains a line object which displays its values using only markers. This object represents Pareto front.

Encuentre y grafique el frente de Pareto para la segunda función de Schaffer de dos objetivos. Esta función tiene un frente de Pareto desconectado.

Copie este código en un archivo de función en su ruta 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;

Grafica los dos objetivos.

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

Las dos funciones objetivo compiten por x en los rangos [1,3] y [4,5]. Pero, el frente óptimo de Pareto consta de sólo dos regiones desconectadas, correspondientes a x en los rangos [1,2] y [4,5]. Hay regiones desconectadas porque la región [2,3] es inferior a [4,5]. En ese rango, el objetivo 1 tiene los mismos valores, pero el objetivo 2 es más pequeño.

Establezca límites para mantener a los miembros de la población dentro del rango $-5\le x\le 10$.

lb = -5;
ub = 10;

Establezca opciones para ver el frente de Pareto mientras se ejecuta gamultiobj.

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

Llame a gamultiobj.

rng default % For reproducibility
[x,fval,exitflag,output] = gamultiobj(@schaffer2,1,[],[],[],[],lb,ub,options);
gamultiobj stopped because it exceeded options.MaxGenerations.

Crear una función de dos objetivos en dos variables del problema.

rng default % For reproducibility
M = diag([-1 -1]) + randn(2)/4; % Two problem variables
fun = @(x)[(x').^2 / 30 + M*x']; % Two objectives

Especifica que la segunda variable debe ser un número entero.

intcon = 2;

Especifique los límites del problema, la función gráfica gaplotpareto y un tamaño de población de 100.

lb = [0 0];
ub = [100 50];
options = optimoptions("gamultiobj","PlotFcn","gaplotpareto",...
    "PopulationSize",100);

Encuentra el conjunto de Pareto para el problema.

nvars = 2;
A = [];
b = [];
Aeq = [];
beq = [];
nonlcon = [];
[x,fval] = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,intcon,options);
gamultiobj stopped because the average change in the spread of Pareto solutions is less than options.FunctionTolerance.

Figure Genetic Algorithm contains an axes object. The axes object with title Pareto Front, xlabel Objective 1, ylabel Objective 2 contains an object of type scatter.

Enumere diez de las soluciones y observe que la segunda variable tiene un valor entero.

x(1:10,:)
ans = 10×2

    8.3393   28.0000
   12.9927   49.0000
    7.1611   27.0000
    7.0210   18.0000
    0.0004   12.0000
    9.0989   44.0000
    9.3974   29.0000
    0.5537   17.0000
    6.4010   17.0000
    7.0531   31.0000

Ejecute un problema multiobjetivo simple y obtenga todas las salidas disponibles.

Configure el generador de números aleatorios para la reproducibilidad.

rng default

Establezca las funciones de aptitud en kur_multiobjective, una función que tiene tres variables de control y devuelve dos valores de función de aptitud.

fitnessfcn = @kur_multiobjective;
nvars = 3;

La función kur_multiobjective tiene el siguiente código.

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

Establecer límites inferior y superior para todas las variables.

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

Encuentre el frente de Pareto y todas las demás salidas para este problema.

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

Examine los tamaños de algunas de las variables devueltas.

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

    18     3


sizepopulation =

    50     3


sizescores =

    50     2

El frente de Pareto devuelto contiene 18 puntos. Hay 50 miembros de la población final. Cada fila population tiene tres dimensiones, correspondientes a las tres variables de decisión. Cada fila scores tiene dos dimensiones, correspondientes a las dos funciones de aptitud.

Argumentos de entrada

contraer todo

Funciones de aptitud para optimizar, especificadas como un identificador de función o un nombre de función.

fun es una función que acepta un vector de fila real de dobles x de longitud nvars y devuelve un vector real F(x) de valores de la función objetivo. Para obtener detalles sobre cómo escribir fun, consulte Compute Objective Functions.

Si establece la opción UseVectorized en true, entonces fun acepta una matriz de tamaño n por nvars, donde la matriz representa n individuos. fun devuelve una matriz de tamaño n por m, donde m es el número de funciones objetivo. Consulte Vectorize the Fitness Function.

Ejemplo: @(x)[sin(x),cos(x)]

Tipos de datos: char | function_handle | string

Número de variables, especificado como un entero positivo. El solucionador pasa vectores de fila de longitud nvars a fun.

Ejemplo: 4

Tipos de datos: double

Restricciones de desigualdad lineales, especificadas como una matriz real. A es una matriz M por nvars, donde M es el número de desigualdades.

A codifica las M desigualdades lineales

A*x <= b,

donde x es el vector columna de nvars variables x(:) y b es un vector columna con M elementos.

Por ejemplo, proporcione las restricciones A = [1,2;3,4;5,6] y b = [10;20;30] para especificar estas sumas:

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

Ejemplo: Para establecer la suma de los componentes x en 1 o menos, tome A = ones(1,N) y b = 1.

Tipos de datos: double

Restricciones de desigualdad lineales, especificadas como un vector real. b es un vector de M elementos relacionado con la matriz A. Si pasa b como un vector fila, los solvers convierten internamente b en el vector columna b(:).

b codifica las M desigualdades lineales

A*x <= b,

donde x es el vector columna de nvars variables x(:) y A es una matriz de tamaño M por nvars.

Por ejemplo, proporcione las restricciones A = [1,2;3,4;5,6] y b = [10;20;30] para especificar estas sumas:

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

Ejemplo: Para establecer la suma de los componentes x en 1 o menos, tome A = ones(1,N) y b = 1.

Tipos de datos: double

Restricciones de igualdad lineales, especificadas como una matriz real. Aeq es una matriz Me por nvars, donde Me es el número de igualdades.

Aeq codifica las Me igualdades lineales

Aeq*x = beq,

donde x es el vector columna de nvars variables x(:) y beq es un vector columna con Me elementos.

Por ejemplo, proporcione las restricciones Aeq = [1,2,3;2,4,1] y beq = [10;20] para especificar estas sumas:

x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20.

Ejemplo: Para establecer la suma de los componentes x en 1, tome Aeq = ones(1,N) y beq = 1.

Tipos de datos: double

Restricciones de igualdad lineales, especificadas como un vector real. beq es un vector de Me elementos relacionado con la matriz Aeq. Si pasa beq como un vector fila, los solvers convierten internamente beq en el vector columna beq(:).

beq codifica las Me igualdades lineales

Aeq*x = beq,

donde x es el vector columna de nvars variables x(:) y Aeq es una matriz de tamaño Meq por N.

Por ejemplo, proporcione las restricciones Aeq = [1,2,3;2,4,1] y beq = [10;20] para especificar estas sumas:

x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20.

Ejemplo: Para establecer la suma de los componentes x en 1, tome Aeq = ones(1,N) y beq = 1.

Tipos de datos: double

Límites inferiores, especificados como un vector real o un arreglo real. Si numel(lb) = nvars, entonces lb especifica que x(i) >= lb(i) para todos los i.

Si numel(lb) < nvars, entonces lb especifica que x(i) >= lb(i) para 1 <= i <= numel(lb).

En este caso, los solvers emiten una advertencia.

Ejemplo: Para especificar todos los componentes x como positivos, establezca lb = zeros(nvars,1) .

Tipos de datos: double

Límites superiores, especificados como un vector real o un arreglo real. Si numel(ub) = nvars, entonces ub especifica que x(i) <= ub(i) para todos los i.

Si numel(ub) < nvars, entonces ub especifica que x(i) <= ub(i) para 1 <= i <= numel(ub).

En este caso, los solvers emiten una advertencia.

Ejemplo: Para especificar todos los componentes x como menores que uno, establezca ub = ones(nvars,1).

Tipos de datos: double

Restricciones no lineales, especificadas como un identificador de función o un nombre de función. nonlcon es una función que acepta un vector de fila x y devuelve dos vectores de fila, c(x) y ceq(x).

  • c(x) es el vector de fila de las restricciones de desigualdad no lineal en x. La función gamultiobj intenta satisfacer c(x) <= 0 para todas las entradas de c.

  • ceq(x) son las restricciones de igualdad no lineal del vector de fila en x. La función gamultiobj intenta satisfacer ceq(x) = 0 para todas las entradas de ceq.

Si establece la opción UseVectorized en true, entonces nonlcon acepta una matriz de tamaño n por nvars, donde la matriz representa n individuos. nonlcon devuelve una matriz de tamaño n por mc en el primer argumento, donde mc es el número de restricciones de desigualdad no lineal. nonlcon devuelve una matriz de tamaño n por mceq en el segundo argumento, donde mceq es el número de restricciones de igualdad no lineal. Consulte Vectorize the Fitness Function.

Por ejemplo, x = gamultiobj(@myfun,nvars,A,b,Aeq,beq,lb,ub,@mycon), donde mycon es una función MATLAB® como la siguiente:

function [c,ceq] = mycon(x)
c = ...     % Compute nonlinear inequalities at x.
ceq = ...   % Compute nonlinear equalities at x.

Para obtener más información, consulte Restricciones no lineales.

Tipos de datos: char | function_handle | string

Opciones de optimización, especificadas como la salida de optimoptions o una estructura. Vea los detalles de la opción en Genetic Algorithm Options .

optimoptions oculta las opciones enumeradas en cursiva. Consulte Options that optimoptions Hides.

  • Los valores en {} denotan el valor predeterminado.

  • {}* representa el valor predeterminado cuando hay restricciones lineales y para MutationFcn también cuando hay límites.

  • I* indica que el solucionador maneja las opciones para restricciones de números enteros de manera diferente.

  • NM indica que la opción no se aplica a gamultiobj.

Opciones para ga y gamultiobj

OpciónDescripciónValores
ConstraintTolerance

Determina la viabilidad con respecto a restricciones no lineales. Además, max(sqrt(eps),ConstraintTolerance) determina la viabilidad con respecto a las restricciones lineales.

Para una estructura de opciones, utilice TolCon .

Escalar no negativo | {1e-3}

CreationFcn

Función que crea la población inicial. Especifique como nombre de una función de creación incorporada o un identificador de función. Consulte Population Options.

{'gacreationuniform'} | {'gacreationlinearfeasible'}* | 'gacreationnonlinearfeasible' | {'gacreationuniformint'}I* para ga | {'gacreationsobol'}I* para gamultiobj | Función de creación personalizada

CrossoverFcn

Función que utiliza el algoritmo para crear hijos cruzados. Especifique como nombre de una función de cruce incorporada o un identificador de función. Consulte Crossover Options.

{'crossoverscattered'} para ga, {'crossoverintermediate'}* para gamultiobj | {'crossoverlaplace'}I* | 'crossoverheuristic' | 'crossoversinglepoint' | 'crossovertwopoint' | 'crossoverarithmetic' | Función de cruce personalizada

CrossoverFraction

La fracción de la población en la siguiente generación, sin incluir a los niños de la élite, que crea la función de cruce.

Escalar no negativo | {0.8}

Display

Nivel de visualización.

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

DistanceMeasureFcn

Función que calcula la medida de la distancia de los individuos. Especifique como nombre una función de medición de distancia incorporada o un identificador de función. El valor se aplica a la variable de decisión o espacio de diseño (genotipo) o al espacio de función (fenotipo). El valor predeterminado 'distancecrowding' está en el espacio de funciones (fenotipo). Sólo para gamultiobj. Consulte Multiobjective Options.

Para una estructura de opciones, utilice un identificador de función, no un nombre.

{'distancecrowding'} significa lo mismo que {@distancecrowding,'phenotype'} | {@distancecrowding,'genotype'} | Función de distancia personalizada

EliteCount

NM Entero positivo que especifica cuántos individuos de la generación actual tienen garantizada la supervivencia hasta la siguiente generación. No se utiliza en gamultiobj .

Número entero no negativo | {ceil(0.05*PopulationSize)} | {0.05*(default PopulationSize)} para problemas de números enteros mixtos

FitnessLimit

NM Si la función de aptitud alcanza el valor de FitnessLimit, el algoritmo se detiene.

Escalar | {-Inf}

FitnessScalingFcn

Función que escala los valores de la función de aptitud. Especifique como nombre de una función de escala incorporada o un identificador de función. Opción no disponible para gamultiobj.

{'fitscalingrank'} | 'fitscalingshiftlinear' | 'fitscalingprop' | 'fitscalingtop' | Función de escala de aptitud personalizada

FunctionTolerance

El algoritmo se detiene si el cambio relativo promedio en el valor de la función de mejor aptitud a lo largo de MaxStallGenerations generaciones es menor o igual a FunctionTolerance. Si StallTest es 'geometricWeighted', entonces el algoritmo se detiene si el cambio relativo promedio ponderado es menor o igual a FunctionTolerance.

Para gamultiobj, el algoritmo se detiene cuando el promedio geométrico del cambio relativo en el valor de la dispersión a lo largo de options.MaxStallGenerations generaciones es menor que options.FunctionTolerance, y el spread final es menor que el spread medio a lo largo de las últimas options.MaxStallGenerations generaciones. Consulte gamultiobj Algorithm.

Para una estructura de opciones, utilice TolFun .

Escalar no negativo | {1e-6} para ga, {1e-4} para gamultiobj

HybridFcn

I* Función que continúa la optimización después de que ga termina. Especifique como un nombre o un identificador de función.

Alternativamente, un arreglo de celdas que especifica la función híbrida y sus opciones. Consulte ga Hybrid Function.

Para gamultiobj, la única función híbrida es @fgoalattain. Consulte gamultiobj Hybrid Function.

Cuando el problema tiene restricciones de números enteros, no se puede utilizar una función híbrida.

Consulte Cuándo utilizar una función híbrida.

Nombre o identificador de la función | 'fminsearch' | 'patternsearch' | 'fminunc' | 'fmincon' | {[]}

o

Arreglo de celdas de 1 por 2 | {@solver, hybridoptions}, donde solver = fminsearch, patternsearch, fminunc o fmincon {[]}.

InitialPenalty

NM I* Valor inicial del parámetro de penalización

Escalar positivo | {10}

InitialPopulationMatrix

Población inicial utilizada para sembrar el algoritmo genético. Tiene hasta PopulationSize filas y N columnas, donde N es el número de variables. Puede pasar una población parcial, es decir, una con menos de PopulationSize filas. En ese caso, el algoritmo genético utiliza CreationFcn para generar los miembros restantes de la población. Consulte Population Options.

Para una estructura de opciones, utilice InitialPopulation .

Matriz | {[]}

InitialPopulationRange

Matriz o vector que especifica el rango de los individuos de la población inicial. Se aplica a la función de creación gacreationuniform. ga cambia y escala el rango inicial predeterminado para que coincida con cualquier límite finito.

Para una estructura de opciones, utilice PopInitRange .

Matriz o vector | {[-10;10]} para componentes no acotados, {[-1e4+1;1e4+1]} para componentes no acotados de problemas con restricciones enteras, {[lb;ub]} para componentes acotados, con el rango predeterminado modificado para que coincida con los límites unilaterales

InitialScoresMatrix

Puntuaciones iniciales utilizadas para determinar la aptitud física. Tiene hasta PopulationSize filas y Nf columnas, donde Nf es el número de funciones de aptitud (1 para ga, mayor que 1 para gamultiobj). Puedes pasar una matriz de puntuaciones parciales, es decir, una con menos de PopulationSize filas. En ese caso, el solucionador completa las puntuaciones cuando evalúa las funciones de aptitud.

Para una estructura de opciones, utilice InitialScores .

Vector columna para objetivo único | matriz para multiobjetivo | {[]}

MaxGenerations

Número máximo de iteraciones antes de que el algoritmo se detenga.

Para una estructura de opciones, utilice Generations .

Entero no negativo |{100*numberOfVariables} para ga, {200*numberOfVariables} para gamultiobj

MaxStallGenerations

El algoritmo se detiene si el cambio relativo promedio en el valor de la función de mejor aptitud a lo largo de MaxStallGenerations generaciones es menor o igual a FunctionTolerance. Si StallTest es 'geometricWeighted', entonces el algoritmo se detiene si el cambio relativo promedio ponderado es menor o igual a FunctionTolerance.

Para gamultiobj, el algoritmo se detiene cuando el promedio geométrico del cambio relativo en el valor de la dispersión a lo largo de options.MaxStallGenerations generaciones es menor que options.FunctionTolerance, y el spread final es menor que el spread medio a lo largo de las últimas options.MaxStallGenerations generaciones. Consulte gamultiobj Algorithm.

Para una estructura de opciones, utilice StallGenLimit .

Entero no negativo | {50} para ga, {100} para gamultiobj

MaxStallTime

NM El algoritmo se detiene si no hay mejora en la función objetivo durante MaxStallTime segundos, medidos por tic y toc.

Para una estructura de opciones, utilice StallTimeLimit .

Escalar positivo | {Inf}

MaxTime

El algoritmo se detiene después de ejecutarse durante MaxTime segundos, según lo medido por tic y toc. Este límite se aplica después de cada iteración, por lo que ga puede superar el límite cuando una iteración lleva un tiempo considerable.

Para una estructura de opciones, utilice TimeLimit .

Escalar no negativo | {Inf}

MigrationDirection

Dirección de la migración. Consulte Migration Options.

'both' | {'forward'}

MigrationFraction

Escalar de 0 a 1 que especifica la fracción de individuos de cada subpoblación que migra a una subpoblación diferente. Consulte Migration Options.

Escalar | {0.2}

MigrationInterval

Entero positivo que especifica el número de generaciones que tienen lugar entre las migraciones de individuos entre subpoblaciones. Consulte Migration Options.

Entero positivo | {20}

MutationFcn

Función que produce hijos de mutación. Especifique como nombre de una función de mutación incorporada o un identificador de función. Consulte Mutation Options.

{'mutationgaussian'} para ga sin restricciones | {'mutationadaptfeasible'}* para gamultiobj y para ga con restricciones | {'mutationpower'}I* | 'mutationpositivebasis' | 'mutationuniform' | Función de mutación personalizada

NonlinearConstraintAlgorithm

Algoritmo de restricción no lineal. Consulte Algoritmos de resolución de restricciones no lineales para algoritmos genéticos. Opción inmutable para gamultiobj .

Para una estructura de opciones, utilice NonlinConAlgorithm .

{'auglag'} para ga, {'penalty'} para gamultiobj

OutputFcn

Funciones que ga llama en cada iteración. Especifique como un identificador de función o un arreglo de celdas de identificadores de función. Consulte Output Function Options.

Para una estructura de opciones, utilice OutputFcns .

Identificador de función o arreglo de celdas de identificadores de función | {[]}

ParetoFraction

Escalar de 0 a 1 que especifica la fracción de individuos que se deben mantener en el primer frente de Pareto mientras el solucionador selecciona individuos de frentes superiores, solo para gamultiobj. Consulte Multiobjective Options.

Escalar | {0.35}

PenaltyFactor

NM I* Parámetro de actualización de penalización.

Escalar positivo | {100}

PlotFcn

Función que grafica los datos calculados por el algoritmo. Especifique como nombre de una función de gráfico incorporada, un identificador de función o un arreglo de celdas de nombres incorporados o identificadores de función. Consulte Plot Options.

Para una estructura de opciones, utilice PlotFcns .

ga o gamultiobj: {[]} | 'gaplotdistance' | 'gaplotgenealogy' | 'gaplotselection' | 'gaplotscorediversity' |'gaplotscores' | 'gaplotstopping' | 'gaplotmaxconstr' | Función de gráfico personalizada

ga solamente: 'gaplotbestf' | 'gaplotbestindiv' | 'gaplotexpectation' | 'gaplotrange'

gamultiobj solamente: 'gaplotpareto' | 'gaplotparetodistance' | 'gaplotrankhist' | 'gaplotspread'

PlotInterval

Entero positivo que especifica el número de generaciones entre llamadas consecutivas a las funciones de gráfico.

Entero positivo | {1}

PopulationSize

Tamaño de la población.

Entero positivo | {50} cuando numberOfVariables <= 5, {200} en caso contrario | {min(max(10*nvars,40),100)} para problemas con números enteros mixtos

PopulationType

Tipo de datos de la población. Debe ser 'doubleVector' para problemas de números enteros mixtos.

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

ga ignora todas las restricciones cuando PopulationType se establece en 'bitString' o 'custom'. Consulte Population Options.

SelectionFcn

Función que selecciona a los padres de los hijos del cruce y de la mutación. Especifique como nombre de una función de selección incorporada o de un identificador de función.

gamultiobj utiliza sólo 'selectiontournament'.

{'selectionstochunif'} para ga, {'selectiontournament'} para gamultiobj | 'selectionremainder' | 'selectionuniform' | 'selectionroulette' | Función de selección personalizada

StallTest

NM Tipo de prueba de detención.

'geometricWeighted' | {'averageChange'}

UseParallel

Calcular funciones de aptitud y restricción no lineal en paralelo. Consulte Vectorize and Parallel Options (User Function Evaluation) y Cómo utilizar el procesamiento paralelo en Global Optimization Toolbox.

true | {false}

UseVectorized

Especifica si las funciones están vectorizadas. Consulte Vectorize and Parallel Options (User Function Evaluation) y Vectorize the Fitness Function.

Para una estructura de opciones, utilice Vectorized con los valores 'on' o 'off'.

true | {false}

Ejemplo: optimoptions('gamultiobj','PlotFcn',@gaplotpareto)

Variables enteras, especificadas como un vector de números enteros positivos que toman valores de 1 a nvars. Cada valor en intcon representa un componente x que tiene un valor entero.

Nota

Cuando intcon no está vacío, nonlcon debe devolver vacío para ceq.

Ejemplo: Para especificar que las entradas pares en x tienen valores enteros, establezca intcon en 2:2:nvars

Tipos de datos: double

Descripción del problema, especificada como una estructura que contiene estos campos.

fitnessfcn

Funciones de aptitud

nvars

Número de variables de diseño

Aineq

Matriz A para restricciones de desigualdad lineales

Bineq

Vector b para restricciones de desigualdad lineales

Aeq

Matriz Aeq para restricciones de igualdad lineales

Beq

Vector beq para restricciones de igualdad lineales

lb

Límite inferior en x

ub

Límite superior en x

nonlcon

Funciones de restricción no lineales

intconÍndices de variables enteras
rngstate

Campo para reiniciar el estado del generador de números aleatorios

solver

'gamultiobj'

options

Opciones creadas usando optimoptions o una estructura de opciones

Debe especificar los campos fitnessfcn, nvars y options. El resto es opcional para gamultiobj.

Tipos de datos: struct

Argumentos de salida

contraer todo

Puntos de Pareto, devueltos como un arreglo m por nvars, donde m es el número de puntos en el frente de Pareto. Cada fila de x representa un punto en el frente de Pareto.

Valores de función en el frente de Pareto, devueltos como un arreglo m por nf. m es el número de puntos en el frente de Pareto y nf es el número de funciones de aptitud. Cada fila de fval representa los valores de la función en un punto de Pareto en x.

Razón por la que gamultiobj se ha detenido, devuelta como un entero.

Valor de exitflagCondición de detención
1

El promedio geométrico del cambio relativo en el valor del spread a lo largo de options.MaxStallGenerations generaciones es menor que options.FunctionTolerance, y el spread final es menor que la dispersión media a lo largo de las últimas options.MaxStallGenerations generaciones

0

Número máximo de generaciones excedidas

-1

Optimización finalizada por una función de salida o una función gráfica

-2

No se encontró ningún punto factible

-5

Límite de tiempo excedido

Información sobre el proceso de optimización, devuelta como estructura con estos campos.

Campo de salidaSignificado
problemtype

Tipo de problema:

  • 'unconstrained' — Sin restricciones

  • 'boundconstraints' — Solo restricciones limitadas

  • 'linearconstraints' — Restricciones lineales, con o sin restricciones de límites

  • 'nonlinearconstr' — Restricciones no lineales, con o sin otros tipos de restricciones

rngstate

Estado del generador de números aleatorios MATLAB, justo antes de que comenzara el algoritmo. Puede utilizar los valores en rngstate para reproducir la salida de gamultiobj. Consulte Reproduce Results.

generationsNúmero total de generaciones, excluidas las iteraciones HybridFcn.
funccountNúmero total de evaluaciones de funciones.
messageMensaje de salida gamultiobj.
averagedistance“Distancia” promedio, que por defecto es la desviación estándar de la norma de la diferencia entre los miembros del frente de Pareto y su media.
spreadCombinación de la “distancia” y una medida del movimiento de los puntos en el frente de Pareto entre las dos iteraciones finales.
maxconstraintMáxima infracción de la restricción en el conjunto final de Pareto.

Población final, devuelta como un arreglo de n por nvars, donde n es el número de miembros de la población.

Puntuaciones de la población final, devueltas como un arreglo n por nf. n es el número de miembros de la población y nf es el número de funciones de aptitud.

Cuando hay restricciones no lineales, gamultiobj establece el scores de miembros de población inviables en Inf.

Más acerca de

contraer todo

Algoritmos

gamultiobj utiliza un algoritmo genético controlado y elitista (una variante de NSGA-II [1]). Un AG elitista siempre favorece a los individuos con mejor valor de aptitud (rango). Un AG elitista controlado también favorece a los individuos que pueden ayudar a aumentar la diversidad de la población incluso si tienen un valor de aptitud más bajo. Es importante mantener la diversidad de la población para la convergencia hacia un frente de Pareto óptimo. La diversidad se mantiene controlando a los miembros de élite de la población a medida que avanza el algoritmo. Dos opciones, ParetoFraction y DistanceMeasureFcn, controlan el elitismo. ParetoFraction limita el número de individuos en el frente de Pareto (miembros de la élite). La función de distancia, seleccionada por DistanceMeasureFcn, ayuda a mantener la diversidad en un frente al favorecer a los individuos que están relativamente lejos en el frente. El algoritmo se detiene si la dispersión, una medida del movimiento del frente de Pareto, es pequeño. Para obtener más detalles, consulte gamultiobj Algorithm.

Funcionalidad alternativa

App

La tarea Optimize de Live Editor proporciona una interfaz visual para gamultiobj.

Referencias

[1] Deb, Kalyanmoy. Multi-Objective Optimization Using Evolutionary Algorithms. Chichester, England: John Wiley & Sons, 2001.

Capacidades ampliadas

expandir todo

Historial de versiones

Introducido en R2007b