Contenu principal

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la dernière version en anglais.

gamultiobj

Trouver le front de Pareto de plusieurs fonctions fitness à l'aide d'un algorithme génétique

Description

x = gamultiobj(fun,nvars) trouve x sur les Front de Pareto des fonctions objectif définies dans fun. nvars est la dimension du problème d'optimisation (nombre de variables de décision). La solution x est locale, ce qui signifie qu'elle pourrait ne pas être sur le front global de Pareto.

Remarque

Passing Extra Parameters explique comment passer des paramètres supplémentaires à la fonction objectif et aux fonctions de contrainte non linéaire, si nécessaire.

exemple

x = gamultiobj(fun,nvars,A,b) trouve un ensemble de Pareto local x soumis aux inégalités linéaires Axb. Voir Linear Inequality Constraints. gamultiobj prend en charge les contraintes linéaires uniquement pour l'option PopulationType par défaut ('doubleVector').

exemple

x = gamultiobj(fun,nvars,A,b,Aeq,beq) trouve un ensemble de Pareto local x soumis aux égalités linéaires Aeqx=beq et aux inégalités linéaires Axb, voir Linear Equality Constraints. (Définissez A = [] et b = [] si aucune inégalité n'existe.) gamultiobj supporte les contraintes linéaires uniquement pour l'option PopulationType par défaut ('doubleVector').

x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub) définit un ensemble de limites inférieures et supérieures sur les variables de conception x de sorte qu'un ensemble de Pareto local soit trouvé dans la plage lb x ub, voir Bound Constraints. Utilisez des matrices vides pour Aeq et beq si aucune contrainte d'égalité linéaire n'existe. gamultiobj supporte les contraintes bornées uniquement pour l'option PopulationType par défaut ('doubleVector').

exemple

x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon) trouve un ensemble de Pareto soumis aux contraintes définies dans nonlcon. La fonction nonlcon accepte x et renvoie les vecteurs c et ceq, représentant respectivement les inégalités et égalités non linéaires. gamultiobj minimise fun tel que c(x) 0 et ceq(x) = 0. (Définissez lb = [] et ub = [] si aucune limite n'existe.) gamultiobj supporte les contraintes non linéaires uniquement pour l'option PopulationType par défaut ('doubleVector').

x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,options) ou x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,options) trouve un ensemble de Pareto x avec les paramètres d'optimisation par défaut remplacés par des valeurs dans options. Créez options en utilisant optimoptions (recommandé) ou une structure.

exemple

x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,intcon) ou x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,intcon,options) nécessite que les variables répertoriées dans intcon prennent des valeurs entières.

Remarque

Lorsqu'il y a des contraintes d'entier, gamultiobj n'accepte pas les contraintes d'égalité non linéaires, uniquement les contraintes d'inégalité non linéaires.

exemple

x = gamultiobj(problem) trouve l'ensemble de Pareto pour problem, où problem est une structure décrite dans problem.

[x,fval] = gamultiobj(___), pour toutes les variables d'entrée, renvoie une matrice fval, la valeur de toutes les fonctions fitness définies dans fun pour toutes les solutions dans x. fval a nf colonnes, où nf est le nombre d'objectifs, et a le même nombre de lignes que x.

[x,fval,exitflag,output] = gamultiobj(___) renvoie exitflag, un entier identifiant la raison pour laquelle l'algorithme s'est arrêté, et output, une structure contenant des informations sur le processus d'optimisation.

[x,fval,exitflag,output,population,scores] = gamultiobj(___) renvoie population, dont les lignes sont la population finale, et scores, les scores de la population finale.

exemple

Exemples

réduire tout

Trouvez le front de Pareto pour un problème multiobjectif simple. Il y a deux objectifs et deux variables de décision x.

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

Trouvez le front de Pareto pour cette fonction objectif.

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.

Tracez les points de solution.

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.

Pour voir l’effet d’une contrainte linéaire sur ce problème, voir Problème multi-objectif avec contrainte linéaire.

Cet exemple montre comment trouver le front de Pareto pour un problème multiobjectif en présence d'une contrainte linéaire.

Il y a deux fonctions objectif et deux variables de décision x.

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

La contrainte linéaire est x(1)+x(2)1/2.

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

Trouvez le front 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.

Tracez la solution contrainte et la contrainte linéaire.

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

Pour voir l’effet de la suppression de la contrainte linéaire de ce problème, voir Problème à objectifs multiples simple.

Trouvez le front de Pareto pour les deux fonctions fitness sin(x) et cos(x) sur l'intervalle 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
      ⋮

Tracez la solution. gamultiobj trouve des points le long de l'ensemble du front 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.

Trouvez et tracez le front de Pareto pour la deuxième fonction de Schaffer à deux objectifs. Cette fonction a un front de Pareto déconnecté.

Copiez ce code dans un fichier de fonction sur votre chemin 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;

Tracez les deux objectifs.

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

Les deux fonctions objectif sont en compétition pour x dans les plages [1,3] et [4,5]. Mais le front Pareto-optimal ne se compose que de deux régions déconnectées, correspondant aux x dans les plages [1,2] et [4,5]. Il y a des régions déconnectées car la région [2,3] est inférieure à [4,5]. Dans cette plage, l'objectif 1 a les mêmes valeurs, mais l'objectif 2 est plus petit.

Définissez des limites pour maintenir les membres de la population dans la plage $-5\le x\le 10$.

lb = -5;
ub = 10;

Définissez les options pour afficher le front de Pareto pendant que gamultiobj s'exécute.

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

Appelez gamultiobj.

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

Créez une fonction à deux objectifs dans deux variables de problème.

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

Précisez que la deuxième variable doit être un entier.

intcon = 2;

Spécifiez les limites du problème, la fonction de tracé gaplotpareto et une taille de population de 100.

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

Trouvez l’ensemble de Pareto pour le problème.

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.

Énumérez dix solutions et remarquez que la deuxième variable a une valeur entière.

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

Exécutez un problème multiobjectif simple et obtenez toutes les sorties disponibles.

Régler le générateur de nombres aléatoires pour la reproductibilité.

rng default

Définissez les fonctions fitness sur kur_multiobjective, une fonction qui possède trois variables de contrôle et renvoie deux valeurs de fonction fitness.

fitnessfcn = @kur_multiobjective;
nvars = 3;

La fonction kur_multiobjective a le code suivant.

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

Définissez des limites inférieures et supérieures pour toutes les variables.

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

Trouvez le front de Pareto et toutes les autres sorties pour ce problème.

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

Examinez les tailles de certaines des variables renvoyées.

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

    18     3


sizepopulation =

    50     3


sizescores =

    50     2

Le front de Pareto renvoyé contient 18 points. La population finale compte 50 membres. Chaque ligne population comporte trois dimensions, correspondant aux trois variables de décision. Chaque ligne scores comporte deux dimensions, correspondant aux deux fonctions fitness.

Arguments d'entrée

réduire tout

Fonctions fitness à optimiser, spécifiées sous forme de handle de fonction ou de nom de fonction.

fun est une fonction qui accepte un vecteur de lignes réel de doubles x de longueur nvars et renvoie un vecteur réel F(x) de valeurs de fonction objectif. Pour plus de détails sur l'écriture de fun, voir Compute Objective Functions.

Si vous définissez l'option UseVectorized sur true, alors fun accepte une matrice de taille n par nvars, où la matrice représente n individus. fun renvoie une matrice de taille n par m, où m est le nombre de fonctions objectif. Voir Vectorize the Fitness Function.

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

Types de données : char | function_handle | string

Nombre de variables, spécifié sous la forme d'un entier positif. Le solveur passe des vecteurs de lignes de longueur nvars à fun.

Exemple : 4

Types de données : double

Contraintes d'inégalités linéaires, spécifiées sous forme de matrice réelle. A est une matrice M par nvars, où M est le nombre d'inégalités.

A encode les inégalités linéaires M

A*x <= b,

x est le vecteur colonne de nvars variables x(:), et b est un vecteur colonne avec M éléments.

Par exemple, donnez les contraintes A = [1,2;3,4;5,6] et b = [10;20;30] pour spécifier ces sommes :

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

Exemple : Pour définir la somme des composantes x à 1 ou moins, prenez A = ones(1,N) et b = 1.

Types de données : double

Contraintes d'inégalité linéaire, spécifiées comme un vecteur réel. b est un vecteur d'éléments M lié à la matrice A. Si vous passez b comme vecteur de ligne, les solveurs convertissent en interne b en vecteur de colonne b(:).

b encode les inégalités linéaires M

A*x <= b,

x est le vecteur colonne de nvars variables x(:), et A est une matrice de taille M-par-nvars.

Par exemple, donnez les contraintes A = [1,2;3,4;5,6] et b = [10;20;30] pour spécifier ces sommes :

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

Exemple : Pour définir la somme des composantes x à 1 ou moins, prenez A = ones(1,N) et b = 1.

Types de données : double

Contraintes d'égalité linéaire, spécifiées sous forme de matrice réelle. Aeq est une matrice Me par nvars, où Me est le nombre d'égalités.

Aeq encode les égalités linéaires Me

Aeq*x = beq,

x est le vecteur colonne de nvars variables x(:), et beq est un vecteur colonne avec Me éléments.

Par exemple, donnez les contraintes Aeq = [1,2,3;2,4,1] et beq = [10;20] pour spécifier ces sommes :

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

Exemple : Pour définir la somme des composantes x à 1, prenez Aeq = ones(1,N) et beq = 1.

Types de données : double

Contraintes d'égalité linéaire, spécifiées comme un vecteur réel. beq est un vecteur d'éléments Me lié à la matrice Aeq. Si vous passez beq comme vecteur de ligne, les solveurs convertissent en interne beq en vecteur de colonne beq(:).

beq encode les égalités linéaires Me

Aeq*x = beq,

x est le vecteur colonne de nvars variables x(:), et Aeq est une matrice de taille Meq-par-N.

Par exemple, donnez les contraintes Aeq = [1,2,3;2,4,1] et beq = [10;20] pour spécifier ces sommes :

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

Exemple : Pour définir la somme des composantes x à 1, prenez Aeq = ones(1,N) et beq = 1.

Types de données : double

Limites inférieures, spécifiées sous forme de vecteur réel ou de tableau réel. Si numel(lb) = nvars, alors lb spécifie que x(i) >= lb(i) pour tous les i.

Si numel(lb) < nvars, alors lb spécifie que x(i) >= lb(i) pour 1 <= i <= numel(lb).

Dans ce cas, les solveurs émettent un avertissement.

Exemple : Pour spécifier tous les composants x comme positifs, définissez lb = zeros(nvars,1).

Types de données : double

Limites supérieures, spécifiées sous forme de vecteur réel ou de tableau réel. Si numel(ub) = nvars, alors ub spécifie que x(i) <= ub(i) pour tous les i.

Si numel(ub) < nvars, alors ub spécifie que x(i) <= ub(i) pour 1 <= i <= numel(ub).

Dans ce cas, les solveurs émettent un avertissement.

Exemple : Pour spécifier tous les composants x comme étant inférieurs à un, définissez ub = ones(nvars,1).

Types de données : double

Contraintes non linéaires, spécifiées sous forme de handle de fonction ou de nom de fonction. nonlcon est une fonction qui accepte un vecteur de ligne x et renvoie deux vecteurs de ligne, c(x) et ceq(x).

  • c(x) est le vecteur ligne des contraintes d'inégalité non linéaire à x. La fonction gamultiobj tente de satisfaire c(x) <= 0 pour toutes les entrées de c.

  • ceq(x) est le vecteur de lignes des contraintes d'égalité non linéaires à x. La fonction gamultiobj tente de satisfaire ceq(x) = 0 pour toutes les entrées de ceq.

Si vous définissez l'option UseVectorized sur true, alors nonlcon accepte une matrice de taille n par nvars, où la matrice représente n individus. nonlcon renvoie une matrice de taille n par mc dans le premier argument, où mc est le nombre de contraintes d'inégalité non linéaire. nonlcon renvoie une matrice de taille n par mceq dans le deuxième argument, où mceq est le nombre de contraintes d'égalité non linéaire. Voir Vectorize the Fitness Function.

Par exemple, x = gamultiobj(@myfun,nvars,A,b,Aeq,beq,lb,ub,@mycon), où mycon est une fonction MATLAB® telle que la suivante :

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

Pour plus d'informations, voir Nonlinear Constraints.

Types de données : char | function_handle | string

Options d'optimisation, spécifiées comme sortie de optimoptions ou d'une structure. Voir les détails de l'option dans Genetic Algorithm Options.

optimoptions masque les options répertoriées en italique. Voir Options that optimoptions Hides.

  • Les valeurs dans {} indiquent la valeur par défaut.

  • {}* représente la valeur par défaut lorsqu'il y a des contraintes linéaires, et pour MutationFcn également lorsqu'il y a des limites.

  • I* indique que le solveur gère les options pour les contraintes entières différemment.

  • NM indique que l'option ne s'applique pas à gamultiobj.

Options pour ga et gamultiobj

OptionDescriptionValeurs
ConstraintTolerance

Détermine la faisabilité par rapport aux contraintes non linéaires. De plus, max(sqrt(eps),ConstraintTolerance) détermine la faisabilité par rapport aux contraintes linéaires.

Pour une structure d'options, utilisez TolCon.

Scalaire non négatif | {1e-3}

CreationFcn

Fonction qui crée la population initiale. Spécifier comme nom d'une fonction de création intégrée ou d'un handle de fonction. Voir Population Options.

{'gacreationuniform'} | {'gacreationlinearfeasible'}* | 'gacreationnonlinearfeasible' | {'gacreationuniformint'}I* pour ga | {'gacreationsobol'}I* pour gamultiobj | Fonction de création personnalisée

CrossoverFcn

Fonction que l'algorithme utilise pour créer des enfants issus de croisement. Spécifiez comme nom d'une fonction de croisement intégrée ou d'un handle de fonction. Voir Crossover Options.

{'crossoverscattered'} pour ga, {'crossoverintermediate'}* pour gamultiobj | {'crossoverlaplace'}I* | 'crossoverheuristic' | 'crossoversinglepoint' | 'crossovertwopoint' | 'crossoverarithmetic' | Fonction de croisement personnalisée

CrossoverFraction

La fraction de la population de la génération suivante, sans compter les enfants élites, que crée la fonction de croisement.

Scalaire non négatif | {0.8}

Display

Niveau d'affichage.

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

DistanceMeasureFcn

Fonction qui calcule la mesure de distance des individus. Spécifier comme nom d'une fonction de mesure de distance intégrée ou d'un handle de fonction. La valeur s'applique à la variable de décision ou à l'espace de conception (génotype) ou à l'espace de fonction (phénotype). La valeur par défaut 'distancecrowding' se trouve dans l'espace fonctionnel (phénotype). Pour gamultiobj uniquement. Voir Multiobjective Options.

Pour une structure d'options, utilisez un handle de fonction, pas un nom.

{'distancecrowding'} signifie la même chose que {@distancecrowding,'phenotype'} | {@distancecrowding,'genotype'} | Fonction de distance personnalisée

EliteCount

NM Entier positif spécifiant combien d'individus de la génération actuelle sont assurés de survivre à la génération suivante. Non utilisé dans gamultiobj.

Entier non négatif | {ceil(0.05*PopulationSize)} | {0.05*(default PopulationSize)} pour les problèmes d'entiers mixtes

FitnessLimit

NM Si la fonction fitness atteint la valeur de FitnessLimit, l'algorithme s'arrête.

Scalaire | {-Inf}

FitnessScalingFcn

Fonction qui met à l'échelle les valeurs de la fonction fitness. Spécifiez comme nom d'une fonction de mise à l'échelle intégrée ou d'un handle de fonction. Option indisponible pour gamultiobj.

{'fitscalingrank'} | 'fitscalingshiftlinear' | 'fitscalingprop' | 'fitscalingtop' | Fonction de mise à l'échelle de la condition physique personnalisée

FunctionTolerance

L'algorithme s'arrête si la variation relative moyenne de la valeur de la meilleure fonction fitness sur MaxStallGenerations générations est inférieure ou égale à FunctionTolerance. Si StallTest est 'geometricWeighted', alors l'algorithme s'arrête si la variation relative moyenne pondérée est inférieure ou égale à FunctionTolerance.

Pour gamultiobj, l'algorithme s'arrête lorsque la moyenne géométrique de la variation relative de la valeur de l'écart sur options.MaxStallGenerations générations est inférieure à options.FunctionTolerance, et l'écart final est inférieur à l'écart moyen sur les options.MaxStallGenerations générations passées. Voir gamultiobj Algorithm.

Pour une structure d'options, utilisez TolFun.

Scalaire non négatif | {1e-6} pour ga, {1e-4} pour gamultiobj

HybridFcn

I* Fonction qui continue l'optimisation après la fin de ga. Spécifier comme un nom ou un handle de fonction.

Alternativement, un cell array spécifiant la fonction hybride et ses options. Voir ga Hybrid Function.

Pour gamultiobj, la seule fonction hybride est @fgoalattain. Voir gamultiobj Hybrid Function.

Lorsque le problème comporte des contraintes entières, vous ne pouvez pas utiliser de fonction hybride.

Voir Quand utiliser une fonction hybride.

Nom de la fonction ou handle | 'fminsearch' | 'patternsearch' | 'fminunc' | 'fmincon' | {[]}

ou

cell array 1 par 2 | {@solver, hybridoptions}, où solver = fminsearch, patternsearch, fminunc ou fmincon {[]}

InitialPenalty

NM I* Valeur initiale du paramètre de pénalité

Scalaire positif | {10}

InitialPopulationMatrix

Population initiale utilisée pour amorcer l'algorithme génétique. Contient jusqu'à PopulationSize lignes et N colonnes, où N est le nombre de variables. Vous pouvez transmettre une population partielle, c'est-à-dire une population contenant moins de PopulationSize lignes. Dans ce cas, l’algorithme génétique utilise CreationFcn pour générer les membres restants de la population. Voir Population Options.

Pour une structure d'options, utilisez InitialPopulation.

Matrice | {[]}

InitialPopulationRange

Matrice ou vecteur spécifiant l'étendue des individus de la population initiale. S'applique à la fonction de création gacreationuniform. ga décale et met à l'échelle la plage initiale par défaut pour correspondre à toutes les limites finies.

Pour une structure d'options, utilisez PopInitRange.

Matrice ou vecteur | {[-10;10]} pour les composants non bornés, {[-1e4+1;1e4+1]} pour les composants non bornés des problèmes à contraintes entières, {[lb;ub]} pour les composants bornés, avec la plage par défaut modifiée pour correspondre aux limites unilatérales

InitialScoresMatrix

Les scores initiaux sont utilisés pour déterminer la condition physique. Contient jusqu'à PopulationSize lignes et Nf colonnes, où Nf est le nombre de fonctions fitness (1 pour ga, supérieur à 1 pour gamultiobj). Vous pouvez transmettre une matrice de scores partiels, c'est-à-dire une matrice contenant moins de PopulationSize lignes. Dans ce cas, le solveur renseigne les scores lorsqu'il évalue les fonctions fitness.

Pour une structure d'options, utilisez InitialScores.

Vecteur colonne pour objectif unique | matrice pour multi-objectifs | {[]}

MaxGenerations

Nombre maximal d'itérations avant l'arrêt de l'algorithme.

Pour une structure d'options, utilisez Generations.

Entier non négatif |{100*numberOfVariables} pour ga, {200*numberOfVariables} pour gamultiobj

MaxStallGenerations

L'algorithme s'arrête si la variation relative moyenne de la valeur de la meilleure fonction fitness sur MaxStallGenerations générations est inférieure ou égale à FunctionTolerance. Si StallTest est 'geometricWeighted', alors l'algorithme s'arrête si la variation relative moyenne pondérée est inférieure ou égale à FunctionTolerance.

Pour gamultiobj, l'algorithme s'arrête lorsque la moyenne géométrique de la variation relative de la valeur de l'écart sur options.MaxStallGenerations générations est inférieure à options.FunctionTolerance, et l'écart final est inférieur à l'écart moyen sur les options.MaxStallGenerations générations passées. Voir gamultiobj Algorithm.

Pour une structure d'options, utilisez StallGenLimit.

Entier non négatif | {50} pour ga, {100} pour gamultiobj

MaxStallTime

NM L'algorithme s'arrête s'il n'y a pas d'amélioration de la fonction objectif pendant MaxStallTime secondes, comme mesuré par tic et toc.

Pour une structure d'options, utilisez StallTimeLimit.

Scalaire positif | {Inf}

MaxTime

L'algorithme s'arrête après avoir fonctionné pendant MaxTime secondes, comme mesuré par tic et toc. Cette limite est appliquée après chaque itération, donc ga peut dépasser la limite lorsqu'une itération prend beaucoup de temps.

Pour une structure d'options, utilisez TimeLimit.

Scalaire non négatif | {Inf}

MigrationDirection

Direction de la migration. Voir Migration Options.

'both' | {'forward'}

MigrationFraction

Scalaire de 0 à 1 spécifiant la fraction d'individus dans chaque sous-population qui migre vers une sous-population différente. Voir Migration Options.

Scalaire | {0.2}

MigrationInterval

Entier positif spécifiant le nombre de générations qui ont lieu entre les migrations d'individus entre sous-populations. Voir Migration Options.

Entier positif | {20}

MutationFcn

Fonction qui produit des enfants issus de mutation. Spécifier comme nom d'une fonction de mutation intégrée ou d'un handle de fonction. Voir Mutation Options.

{'mutationgaussian'} pour ga sans contraintes | {'mutationadaptfeasible'}* pour gamultiobj et pour ga avec contraintes | {'mutationpower'}I* | 'mutationpositivebasis' | 'mutationuniform' | Fonction de mutation personnalisée

NonlinearConstraintAlgorithm

Algorithme de contrainte non linéaire. Voir Algorithmes de résolution de contraintes non linéaires pour algorithmes génétiques. Option inchangeable pour gamultiobj.

Pour une structure d'options, utilisez NonlinConAlgorithm.

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

OutputFcn

Fonctions que ga appelle à chaque itération. Spécifiez comme un handle de fonction ou un cell array de handles de fonction. Voir Output Function Options.

Pour une structure d'options, utilisez OutputFcns.

Handle de fonction ou cell array de handles de fonction | {[]}

ParetoFraction

Scalaire de 0 à 1 spécifiant la fraction d'individus à conserver sur le premier front de Pareto tandis que le solveur sélectionne les individus des fronts supérieurs, pour gamultiobj uniquement. Voir Multiobjective Options.

Scalaire | {0.35}

PenaltyFactor

NM I* Paramètre de mise à jour de pénalité.

Scalaire positif | {100}

PlotFcn

Fonction qui trace les données calculées par l'algorithme. Spécifiez comme nom d'une fonction de tracé intégrée, d'un handle de fonction ou d'un cell array de noms prédéfinis ou de handles de fonction. Voir Plot Options.

Pour une structure d'options, utilisez PlotFcns.

ga ou gamultiobj : {[]} | 'gaplotdistance' | 'gaplotgenealogy' | 'gaplotselection' | 'gaplotscorediversity' |'gaplotscores' | 'gaplotstopping' | 'gaplotmaxconstr' | Fonction de tracé personnalisée

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

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

PlotInterval

Entier positif spécifiant le nombre de générations entre les appels consécutifs aux fonctions de tracé.

Entier positif | {1}

PopulationSize

Taille de la population.

Entier positif | {50} lorsque numberOfVariables <= 5, {200} sinon | {min(max(10*nvars,40),100)} pour les problèmes d'entiers mixtes

PopulationType

Type de données de la population. Doit être 'doubleVector' pour les problèmes d'entiers mixtes.

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

ga ignore toutes les contraintes lorsque PopulationType est défini sur 'bitString' ou 'custom'. Voir Population Options.

SelectionFcn

Fonction qui sélectionne les parents des enfants issus de croisement et issus de mutation. Spécifier comme nom d'une fonction de sélection intégrée ou d'un handle de fonction.

gamultiobj utilise uniquement 'selectiontournament'.

{'selectionstochunif'} pour ga, {'selectiontournament'} pour gamultiobj | 'selectionremainder' | 'selectionuniform' | 'selectionroulette' | Fonction de sélection personnalisée

StallTest

Type de test d'arrêt NM.

'geometricWeighted' | {'averageChange'}

UseParallel

Calculez les fonctions fitness et de contraintes non linéaires en parallèle. Voir Vectorize and Parallel Options (User Function Evaluation) et How to Use Parallel Processing in Global Optimization Toolbox.

true | {false}

UseVectorized

Spécifie si les fonctions sont vectorisées. Voir Vectorize and Parallel Options (User Function Evaluation) et Vectorize the Fitness Function.

Pour une structure d'options, utilisez Vectorized avec les valeurs 'on' ou 'off'.

true | {false}

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

Variables entières, spécifiées comme un vecteur d'entiers positifs prenant des valeurs de 1 à nvars. Chaque valeur dans intcon représente un composant x qui a une valeur entière.

Remarque

Lorsque intcon n'est pas vide, nonlcon doit renvoyer vide pour ceq.

Exemple : Pour spécifier que les entrées paires dans x ont des valeurs entières, définissez intcon sur 2:2:nvars

Types de données : double

Description du problème, spécifiée sous la forme d'une structure contenant ces champs.

fitnessfcn

Fonctions fitness

nvars

Nombre de variables du design

Aineq

Matrice A pour les contraintes d'inégalités linéaires

Bineq

Vecteur b pour les contraintes d'inégalité linéaire

Aeq

Matrice Aeq pour les contraintes d'égalité linéaire

Beq

Vecteur beq pour les contraintes d'égalité linéaire

lb

Borne inférieure sur x

ub

Borne supérieure sur x

nonlcon

Fonctions de contrainte non linéaires

intconIndices des variables de type entier
rngstate

Champ pour réinitialiser l'état du générateur de nombres aléatoires

solver

'gamultiobj'

options

Options créées à l'aide de optimoptions ou d'une structure d'options

Vous devez spécifier les champs fitnessfcn, nvars et options. Le reste est facultatif pour gamultiobj.

Types de données : struct

Arguments de sortie

réduire tout

Points de Pareto, renvoyés sous forme de tableau m-par-nvars, où m est le nombre de points sur le front de Pareto. Chaque ligne de x représente un point sur le front de Pareto.

Valeurs de fonction sur le front de Pareto, renvoyées sous forme de tableau m par nf. m est le nombre de points sur le front de Pareto et nf est le nombre de fonctions fitness. Chaque ligne de fval représente les valeurs de fonction à un point de Pareto dans x.

Raison de l'arrêt gamultiobj, renvoyée sous forme d'entier.

Valeur de exitflagCondition d'arrêt
1

La moyenne géométrique de la variation relative de la valeur de l'écart sur options.MaxStallGenerations générations est inférieure à options.FunctionTolerance, et l'écart final est inférieur à l'écart moyen sur les options.MaxStallGenerations dernières générations

0

Nombre maximal de générations dépassé

-1

Optimisation terminée par une fonction de sortie ou une fonction de tracé

-2

Aucun point possible n'a été trouvé

-5

Délai en temps dépassé

Informations sur le processus d'optimisation, renvoyées sous forme de structure avec ces champs.

Champ de sortieSignification
problemtype

Type de problème :

  • 'unconstrained' — Aucune contrainte

  • 'boundconstraints' — Seulement les contraintes bornées

  • 'linearconstraints' — Contraintes linéaires, avec ou sans contraintes bornées

  • 'nonlinearconstr' — Contraintes non linéaires, avec ou sans autres types de contraintes

rngstate

État du générateur de nombres aléatoires MATLAB, juste avant le démarrage de l'algorithme. Vous pouvez utiliser les valeurs de rngstate pour reproduire la sortie de gamultiobj. Voir Reproduce Results.

generationsNombre total de générations, hors itérations HybridFcn.
funccountNombre total d'évaluations de fonctions.
messageMessage de sortie gamultiobj.
averagedistance« Distance » moyenne, qui par défaut est l’écart type de la norme de la différence entre les membres du front de Pareto et leur moyenne.
spreadCombinaison de la « distance » et d’une mesure du mouvement des points sur le front de Pareto entre les deux itérations finales.
maxconstraintViolation de contrainte maximale à l'ensemble de Pareto final.

Population finale, renvoyée sous forme de tableau n-par-nvars, où n est le nombre de membres de la population.

Scores de la population finale, renvoyés sous forme de tableau n par nf. n est le nombre de membres de la population et nf est le nombre de fonctions fitness.

Lorsqu'il existe des contraintes non linéaires, gamultiobj définit le scores des membres de la population non réalisables à Inf.

En savoir plus

réduire tout

Algorithmes

gamultiobj utilise un algorithme génétique contrôlé et élitiste (une variante de NSGA-II [1]). Une GA élitiste favorise toujours les individus ayant une meilleure valeur de fitness (rang). Une AG élitiste contrôlée favorise également les individus qui peuvent contribuer à accroître la diversité de la population même s’ils ont une valeur de fitness plus faible. Il est important de maintenir la diversité de la population pour converger vers un front de Pareto optimal. La diversité est maintenue en contrôlant les membres de l’élite de la population à mesure que l’algorithme progresse. Deux options, ParetoFraction et DistanceMeasureFcn, contrôlent l'élitisme. ParetoFraction limite le nombre d'individus sur le front de Pareto (membres de l'élite). La fonction distance, sélectionnée par DistanceMeasureFcn, permet de maintenir la diversité sur un front en favorisant les individus qui sont relativement éloignés sur le front. L'algorithme s'arrête si le spread, une mesure du mouvement du front de Pareto, est faible. Pour plus de détails, voir gamultiobj Algorithm.

Fonctionnalités alternatives

Application

La tâche Optimize du Live Editor fournit une interface visuelle pour gamultiobj.

Références

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

Capacités étendues

développer tout

Historique des versions

Introduit dans R2007b