Main Content

Questa pagina è stata tradotta con la traduzione automatica. Fai clic qui per vedere l'ultima versione in inglese.

gamultiobj

Trova il fronte di Pareto di più funzioni di fitness utilizzando l'algoritmo genetico

Descrizione

x = gamultiobj(fun,nvars) trova x su Fronte di Pareto delle funzioni obiettivo definite in fun. nvars è la dimensione del problema di ottimizzazione (numero di variabili decisionali). La soluzione x è locale, il che significa che potrebbe non trovarsi sul fronte di Pareto globale.

Nota

Passing Extra Parameters spiega come passare parametri aggiuntivi alla funzione obiettivo e alle funzioni di vincolo non lineare, se necessario.

esempio

x = gamultiobj(fun,nvars,A,b) trova un insieme di Pareto locale x soggetto alle disuguaglianze lineari Axb . Vedere Linear Inequality Constraints. gamultiobj supporta vincoli lineari solo per l'opzione PopulationType predefinita ('doubleVector').

esempio

x = gamultiobj(fun,nvars,A,b,Aeq,beq) trova un insieme di Pareto locale x soggetto alle uguaglianze lineari Aeqx=beq e alle disequazioni lineari Axb, vedere Linear Equality Constraints. (Impostare A = [] e b = [] se non esistono disuguaglianze.) gamultiobj supporta vincoli lineari solo per l'opzione PopulationType predefinita ('doubleVector').

x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub) definisce un insieme di limiti inferiori e superiori sulle variabili di progettazione x in modo che un insieme di Pareto locale venga trovato nell'intervallo lb x ub, vedere Bound Constraints. Utilizzare matrici vuote per Aeq e beq se non esistono vincoli di uguaglianza lineare. gamultiobj supporta vincoli vincolati solo per l'opzione PopulationType predefinita ('doubleVector').

esempio

x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon) trova un insieme di Pareto soggetto ai vincoli definiti in nonlcon . La funzione nonlcon accetta x e restituisce i vettori c e ceq, che rappresentano rispettivamente le disuguaglianze e le uguaglianze non lineari. gamultiobj minimizza fun in modo che c(x) 0 e ceq(x) = 0 . (Impostare lb = [] e ub = [] se non esistono limiti.) gamultiobj supporta vincoli non lineari solo per l'opzione PopulationType predefinita ('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) trova un insieme di Pareto x con i parametri di ottimizzazione predefiniti sostituiti dai valori in options. Crea options utilizzando optimoptions (consigliato) o una struttura.

esempio

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) richiedono che le variabili elencate in intcon assumano valori interi.

Nota

In presenza di vincoli interi, gamultiobj non accetta vincoli di uguaglianza non lineare, ma solo vincoli di disuguaglianza non lineare.

esempio

x = gamultiobj(problem) trova l'insieme di Pareto per problem, dove problem è una struttura descritta in problem .

[x,fval] = gamultiobj(___), per qualsiasi variabile di input, restituisce una matrice fval, il valore di tutte le funzioni di fitness definite in fun per tutte le soluzioni in x. fval ha nf colonne, dove nf è il numero di obiettivi, e ha lo stesso numero di righe di x.

[x,fval,exitflag,output] = gamultiobj(___) restituisce exitflag, un numero intero che identifica il motivo per cui l'algoritmo si è interrotto, e output, una struttura che contiene informazioni sul processo di ottimizzazione.

[x,fval,exitflag,output,population,scores] = gamultiobj(___) restituisce population, le cui righe rappresentano la popolazione finale, e scores, i punteggi della popolazione finale.

esempio

Esempi

comprimi tutto

Trova il fronte di Pareto per un semplice problema multiobiettivo. Ci sono due obiettivi e due variabili decisionali x .

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

Trova il fronte di Pareto per questa funzione obiettivo.

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.

Rappresenta graficamente i punti della soluzione.

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

Per vedere l'effetto di un vincolo lineare su questo problema, vedere Problema multiobiettivo con vincolo lineare .

Questo esempio mostra come trovare il fronte di Pareto per un problema multiobiettivo in presenza di un vincolo lineare.

Ci sono due funzioni obiettivo e due variabili decisionali x .

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

Il vincolo lineare è x(1)+x(2)1/2 .

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

Trova il fronte di 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.

Rappresenta graficamente la soluzione vincolata e il vincolo lineare.

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

Per vedere l'effetto della rimozione del vincolo lineare da questo problema, vedere Problema multiobiettivo semplice .

Trova il fronte di Pareto per le due funzioni di fitness sin(x) e cos(x) sull'intervallo 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
      ⋮

Rappresenta graficamente la soluzione. gamultiobj trova i punti lungo l'intero fronte di Pareto.

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

Trova e traccia il fronte di Pareto per la seconda funzione di Schaffer a due obiettivi. Questa funzione ha un fronte di Pareto disconnesso.

Copia questo codice in un file di funzione nel percorso 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;

Traccia i due obiettivi.

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

Le due funzioni obiettivo competono per x negli intervalli [1,3] e [4,5] . Tuttavia, il fronte Pareto-ottimale è costituito solo da due regioni disconnesse, corrispondenti a x negli intervalli [1,2] e [4,5]. Ci sono regioni disconnesse perché la regione [2,3] è inferiore a [4,5]. In quell'intervallo, l'obiettivo 1 ha gli stessi valori, ma l'obiettivo 2 è più piccolo.

Imposta limiti per mantenere i membri della popolazione nell'intervallo $-5\le x\le 10$.

lb = -5;
ub = 10;

Imposta le opzioni per visualizzare il fronte di Pareto mentre viene eseguito gamultiobj.

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

Chiama gamultiobj .

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

Creare una funzione a due obiettivi in due variabili 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

Specificare che la seconda variabile deve essere un numero intero.

intcon = 2;

Specificare i limiti del problema, la funzione del grafico gaplotpareto e una dimensione della popolazione pari a 100.

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

Trova l'insieme di Pareto per il 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.

Elenca dieci delle soluzioni e nota che la seconda variabile ha valore intero.

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

Esegui un semplice problema multiobiettivo e ottieni tutti gli output disponibili.

Impostare il generatore di numeri casuali per la riproducibilità.

rng default

Impostare le funzioni di fitness su kur_multiobjective, una funzione che ha tre variabili di controllo e restituisce due valori di funzione di fitness.

fitnessfcn = @kur_multiobjective;
nvars = 3;

La funzione kur_multiobjective ha il seguente codice.

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

Imposta limiti inferiori e superiori per tutte le variabili.

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

Trova il fronte di Pareto e tutti gli altri output per questo 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.

Esaminare le dimensioni di alcune delle variabili restituite.

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

    18     3


sizepopulation =

    50     3


sizescores =

    50     2

Il fronte di Pareto restituito contiene 18 punti. La popolazione finale è composta da 50 membri. Ogni riga population ha tre dimensioni, corrispondenti alle tre variabili decisionali. Ogni riga scores ha due dimensioni, corrispondenti alle due funzioni di fitness.

Argomenti di input

comprimi tutto

Funzioni di idoneità da ottimizzare, specificate come funzione handle o nome di funzione.

fun è una funzione che accetta un vettore riga reale di valori double x di lunghezza nvars e restituisce un vettore reale F(x) di valori della funzione obiettivo. Per i dettagli sulla scrittura di fun, vedere Compute Objective Functions .

Se si imposta l'opzione UseVectorized su true, fun accetta una matrice di dimensione n per nvars, dove la matrice rappresenta n individui. fun restituisce una matrice di dimensione n per m, dove m è il numero di funzioni obiettivo. Vedi Vectorize the Fitness Function .

Esempio @(x)[sin(x),cos(x)]

Tipi di dati: char | function_handle | string

Numero di variabili, specificato come numero intero positivo. Il risolutore passa i vettori riga di lunghezza nvars a fun.

Esempio 4

Tipi di dati: double

Vincoli di disuguaglianza lineare, specificati come matrice reale. A è una matrice M per nvars, dove M è il numero di disuguaglianze.

A codifica le disuguaglianze lineari M

A*x <= b,

dove x è il vettore colonna delle variabili nvars x(:) e b è un vettore colonna con elementi M.

Ad esempio, forniamo i vincoli A = [1,2;3,4;5,6] e b = [10;20;30] per specificare queste somme:

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

Esempio Per impostare la somma delle componenti x su 1 o meno, prendi A = ones(1,N) e b = 1 .

Tipi di dati: double

Vincoli di disuguaglianza lineare, specificati come vettore reale. b è un vettore di elementi M correlato alla matrice A. Se si passa b come vettore riga, i risolutori convertono internamente b nel vettore colonna b(:).

b codifica le disuguaglianze lineari M

A*x <= b,

dove x è il vettore colonna delle variabili nvars x(:) e A è una matrice di dimensione M per nvars .

Ad esempio, forniamo i vincoli A = [1,2;3,4;5,6] e b = [10;20;30] per specificare queste somme:

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

Esempio Per impostare la somma delle componenti x su 1 o meno, prendi A = ones(1,N) e b = 1 .

Tipi di dati: double

Vincoli di uguaglianza lineare, specificati come matrice reale. Aeq è una matrice Me per nvars, dove Me è il numero di uguaglianze.

Aeq codifica le uguaglianze lineari Me

Aeq*x = beq,

dove x è il vettore colonna delle variabili nvars x(:) e beq è un vettore colonna con elementi Me.

Ad esempio, forniamo i vincoli Aeq = [1,2,3;2,4,1] e beq = [10;20] per specificare queste somme:

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

Esempio Per impostare la somma delle componenti x su 1, prendi Aeq = ones(1,N) e beq = 1 .

Tipi di dati: double

Vincoli di uguaglianza lineare, specificati come vettore reale. beq è un vettore di elementi Me correlato alla matrice Aeq. Se si passa beq come vettore riga, i risolutori convertono internamente beq nel vettore colonna beq(:).

beq codifica le uguaglianze lineari Me

Aeq*x = beq,

dove x è il vettore colonna delle variabili nvars x(:) e Aeq è una matrice di dimensione Meq per N .

Ad esempio, forniamo i vincoli Aeq = [1,2,3;2,4,1] e beq = [10;20] per specificare queste somme:

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

Esempio Per impostare la somma delle componenti x su 1, prendi Aeq = ones(1,N) e beq = 1 .

Tipi di dati: double

Limiti inferiori, specificati come array reale o array reale. Se numel(lb) = nvars, allora lb specifica che x(i) >= lb(i) per tutti gli i .

Se numel(lb) < nvars, allora lb specifica che x(i) >= lb(i) per 1 <= i <= numel(lb) .

In questo caso, i risolutori emettono un avviso.

Esempio Per specificare tutte le componenti x come positive, impostare lb = zeros(nvars,1) .

Tipi di dati: double

Limiti superiori, specificati come array reale o array reale. Se numel(ub) = nvars, allora ub specifica che x(i) <= ub(i) per tutti gli i .

Se numel(ub) < nvars, allora ub specifica che x(i) <= ub(i) per 1 <= i <= numel(ub) .

In questo caso, i risolutori emettono un avviso.

Esempio Per specificare che tutti i componenti x siano minori di uno, impostare ub = ones(nvars,1) .

Tipi di dati: double

Vincoli non lineari, specificati come funzione handle o nome di funzione. nonlcon è una funzione che accetta un vettore riga x e restituisce due vettori riga, c(x) e ceq(x).

  • c(x) è il vettore riga dei vincoli di disuguaglianza non lineare in x. La funzione gamultiobj tenta di soddisfare c(x) <= 0 per tutte le voci di c .

  • ceq(x) è il vincolo di uguaglianza non lineare del vettore riga in x. La funzione gamultiobj tenta di soddisfare ceq(x) = 0 per tutte le voci di ceq .

Se si imposta l'opzione UseVectorized su true, nonlcon accetta una matrice di dimensione n per nvars, dove la matrice rappresenta n individui. nonlcon restituisce una matrice di dimensione n per mc nel primo argomento, dove mc è il numero di vincoli di disuguaglianza non lineare. nonlcon restituisce una matrice di dimensione n per mceq nel secondo argomento, dove mceq è il numero di vincoli di uguaglianza non lineare. Vedi Vectorize the Fitness Function .

Ad esempio, x = gamultiobj(@myfun,nvars,A,b,Aeq,beq,lb,ub,@mycon), dove mycon è una funzione MATLAB® come la seguente:

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

Per ulteriori informazioni, vedere Nonlinear Constraints .

Tipi di dati: char | function_handle | string

Opzioni di ottimizzazione, specificate come output di optimoptions o come struttura. Vedi i dettagli dell'opzione in Genetic Algorithm Options .

optimoptions nasconde le opzioni elencate in corsivo. Vedi Options that optimoptions Hides .

  • I valori in {} indicano il valore predefinito.

  • {}* rappresenta l'impostazione predefinita quando ci sono vincoli lineari e per MutationFcn anche quando ci sono limiti.

  • I* indica che il risolutore gestisce le opzioni per i vincoli interi in modo diverso.

  • NM indica che l'opzione non si applica a gamultiobj .

Opzioni per ga e gamultiobj

OpzioneDescrizioneValori
ConstraintTolerance

Determina la fattibilità rispetto ai vincoli non lineari. Inoltre, max(sqrt(eps),ConstraintTolerance) determina la fattibilità rispetto ai vincoli lineari.

Per una struttura di opzioni, utilizzare TolCon .

Scalare non negativo | {1e-3}

CreationFcn

Funzione che crea la popolazione iniziale. Specificare come nome di una funzione di creazione incorporata o di una funzione handle. Vedi Population Options .

{'gacreationuniform'} | {'gacreationlinearfeasible'}* | 'gacreationnonlinearfeasible' | {'gacreationuniformint'}I* per ga | {'gacreationsobol'}I* per gamultiobj | Funzione di creazione personalizzata

CrossoverFcn

Funzione utilizzata dall'algoritmo per creare children crossover. Specificare come nome una funzione crossover incorporata o una funzione handle. Vedi Crossover Options .

{'crossoverscattered'} per ga, {'crossoverintermediate'}* per gamultiobj | {'crossoverlaplace'}I* | 'crossoverheuristic' | 'crossoversinglepoint' | 'crossovertwopoint' | 'crossoverarithmetic' | Funzione crossover personalizzata

CrossoverFraction

La frazione della popolazione nella generazione successiva, esclusi i children dell'élite, creata dalla funzione di crossover.

Scalare non negativo | {0.8}

Display

Livello di visualizzazione.

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

DistanceMeasureFcn

Funzione che calcola la misura della distanza degli individui. Specificare come nome una funzione di misura della distanza incorporata o una funzione handle. Il valore si applica alla variabile decisionale o allo spazio di progettazione (genotipo) o allo spazio funzionale (fenotipo). Il valore predefinito 'distancecrowding' si trova nello spazio funzionale (fenotipo). Solo per gamultiobj. Vedi Multiobjective Options .

Per una struttura di opzioni, utilizzare una funzione handle, non un nome.

{'distancecrowding'} significa lo stesso di {@distancecrowding,'phenotype'} | {@distancecrowding,'genotype'} | Funzione di distanza personalizzata

EliteCount

NM Numero intero positivo che specifica quanti individui della generazione attuale hanno la garanzia di sopravvivere alla generazione successiva. Non utilizzato in gamultiobj .

Intero non negativo | {ceil(0.05*PopulationSize)} | {0.05*(default PopulationSize)} per problemi misti interi

FitnessLimit

NM Se la funzione di fitness raggiunge il valore di FitnessLimit, l'algoritmo si arresta.

Scalare | {-Inf}

FitnessScalingFcn

Funzione che scala i valori della funzione di fitness. Specificare come nome di una funzione di ridimensionamento integrata o di una funzione handle. Opzione non disponibile per gamultiobj .

{'fitscalingrank'} | 'fitscalingshiftlinear' | 'fitscalingprop' | 'fitscalingtop' | Funzione di ridimensionamento fitness personalizzata

FunctionTolerance

L'algoritmo si arresta se la variazione relativa media del valore della migliore funzione di fitness su MaxStallGenerations generazioni è minore o uguale a FunctionTolerance. Se StallTest è 'geometricWeighted', l'algoritmo si arresta se la variazione relativa media ponderata è minore o uguale a FunctionTolerance.

Per gamultiobj, l'algoritmo si arresta quando la media geometrica della variazione relativa del valore dello spread su options.MaxStallGenerations generazioni è inferiore a options.FunctionTolerance e lo spread finale è inferiore allo spread medio sulle ultime options.MaxStallGenerations generazioni. Vedi gamultiobj Algorithm .

Per una struttura di opzioni, utilizzare TolFun .

Scalare non negativo | {1e-6} per ga, {1e-4} per gamultiobj

HybridFcn

I* Funzione che continua l'ottimizzazione dopo la terminazione di ga. Specificare come nome o function handle.

In alternativa, un array di celle che specifica la funzione ibrida e le sue opzioni. Vedi ga Hybrid Function .

Per gamultiobj, l'unica funzione ibrida è @fgoalattain. Vedi gamultiobj Hybrid Function .

Quando il problema presenta vincoli interi, non è possibile utilizzare una funzione ibrida.

Vedi Quando utilizzare una funzione ibrida .

Nome funzione o handle | 'fminsearch' | 'patternsearch' | 'fminunc' | 'fmincon' | {[]}

O

Matrice di celle 1 per 2 | {@solver, hybridoptions}, dove solver = fminsearch, patternsearch, fminunc o fmincon {[]}

Penalità Iniziale

NM I* Valore iniziale del parametro di penalità

Scalare positivo | {10}

InitialPopulationMatrix

Popolazione iniziale utilizzata per generare l'algoritmo genetico. Ha fino a PopulationSize righe e N colonne, dove N è il numero di variabili. È possibile passare una popolazione parziale, ovvero una con meno di PopulationSize righe. In tal caso, l'algoritmo genetico utilizza CreationFcn per generare i membri rimanenti della popolazione. Vedi Population Options .

Per una struttura di opzioni, utilizzare InitialPopulation .

Matrice | {[]}

InitialPopulationRange

Matrice o vettore che specifica l'intervallo degli individui nella popolazione iniziale. Si applica alla funzione di creazione gacreationuniform. ga sposta e ridimensiona l'intervallo iniziale predefinito per adattarlo a eventuali limiti finiti.

Per una struttura di opzioni, utilizzare PopInitRange .

Matrice o vettore | {[-10;10]} per componenti illimitate, {[-1e4+1;1e4+1]} per componenti illimitate di problemi con vincoli interi, {[lb;ub]} per componenti limitate, con l'intervallo predefinito modificato per corrispondere ai limiti unilaterali

InitialScoresMatrix

Punteggi iniziali utilizzati per determinare l'idoneità. Ha fino a PopulationSize righe e Nf colonne, dove Nf è il numero di funzioni di fitness (1 per ga, maggiore di 1 per gamultiobj). È possibile passare una matrice di punteggi parziali, ovvero una con meno di PopulationSize righe. In tal caso, il risolutore inserisce i punteggi quando valuta le funzioni di idoneità.

Per una struttura di opzioni, utilizzare InitialScores .

Vettore colonna per obiettivo singolo | matrice per multiobiettivo | {[]}

MaxGenerations

Numero massimo di iterazioni prima che l'algoritmo si arresti.

Per una struttura di opzioni, utilizzare Generations .

Intero non negativo |{100*numberOfVariables} per ga, {200*numberOfVariables} per gamultiobj

MaxStallGenerations

L'algoritmo si arresta se la variazione relativa media del valore della migliore funzione di fitness su MaxStallGenerations generazioni è minore o uguale a FunctionTolerance. Se StallTest è 'geometricWeighted', l'algoritmo si arresta se la variazione relativa media ponderata è minore o uguale a FunctionTolerance.

Per gamultiobj, l'algoritmo si arresta quando la media geometrica della variazione relativa del valore dello spread su options.MaxStallGenerations generazioni è inferiore a options.FunctionTolerance e lo spread finale è inferiore allo spread medio sulle ultime options.MaxStallGenerations generazioni. Vedi gamultiobj Algorithm .

Per una struttura di opzioni, utilizzare StallGenLimit .

Intero non negativo | {50} per ga, {100} per gamultiobj

MaxStallTime

NM L'algoritmo si arresta se non si verifica alcun miglioramento nella funzione obiettivo per MaxStallTime secondi, come misurato da tic e toc.

Per una struttura di opzioni, utilizzare StallTimeLimit .

Scalare positivo | {Inf}

MaxTime

L'algoritmo si arresta dopo un'esecuzione di MaxTime secondi, come misurato da tic e toc. Questo limite viene applicato dopo ogni iterazione, quindi ga può superarlo quando un'iterazione richiede molto tempo.

Per una struttura di opzioni, utilizzare TimeLimit .

Scalare non negativo | {Inf}

Direzione della migrazione

Direzione della migrazione. Vedi Migration Options .

'both' | {'forward'}

Frazione di Migrazione

Scalare da 0 a 1 che specifica la frazione di individui in ciascuna sottopopolazione che migra verso una sottopopolazione diversa. Vedi Migration Options .

Scalare | {0.2}

Intervallo di migrazione

Numero intero positivo che specifica il numero di generazioni che hanno luogo tra le migrazioni di individui tra sottopopolazioni. Vedi Migration Options .

Numero intero positivo | {20}

MutationFcn

Funzione che produce mutation children. Specificare come nome una functionName di mutation incorporata o una unctionHandle funzione handle. Vedi Mutation Options .

{'mutationgaussian'} per ga senza vincoli | {'mutationadaptfeasible'}* per gamultiobj e per ga con vincoli | {'mutationpower'}I* | 'mutationpositivebasis' | 'mutationuniform' | Funzione di mutation personalizzata.

NonlinearConstraintAlgorithm

Algoritmo di vincolo non lineare. Vedi Nonlinear Constraint Solver Algorithms for Genetic Algorithm . Opzione non modificabile per gamultiobj .

Per una struttura di opzioni, utilizzare NonlinConAlgorithm .

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

OutputFcn

Funzioni che ga richiama a ogni iterazione. Specificare come funzione handle o come array di celle di funzione handle. Vedi Output Function Options .

Per una struttura di opzioni, utilizzare OutputFcns .

Funzione handle o array di celle di funzione handle | {[]}

ParetoFraction

Scalare da 0 a 1 che specifica la frazione di individui da mantenere sul primo fronte di Pareto mentre il risolutore seleziona gli individui dai fronti superiori, solo per gamultiobj. Vedi Multiobjective Options .

Scalare | {0.35}

Penalty Factor

NM I* Parametro di aggiornamento della penalità.

Scalare positivo | {100}

PlotFcn

Funzione che traccia i dati elaborati dall'algoritmo. Specificare come nome una funzione di grafico incorporata, una funzione handle o una matrice di celle di nomi incorporati o funzioni handle. Vedi Plot Options .

Per una struttura di opzioni, utilizzare PlotFcns .

ga oppure gamultiobj: {[]} | 'gaplotdistance' | 'gaplotgenealogy' | 'gaplotselection' | 'gaplotscorediversity' |'gaplotscores' | 'gaplotstopping' | 'gaplotmaxconstr' | Funzione di tracciamento personalizzata

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

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

Intervallo di Trama

Numero intero positivo che specifica il numero di generazioni tra chiamate consecutive alle funzioni di tracciamento.

Numero intero positivo | {1}

PopulationSize

Dimensione della popolazione.

Intero positivo | {50} quando numberOfVariables <= 5, {200} altrimenti | {min(max(10*nvars,40),100)} per problemi misti interi

PopulationType

Tipo di dati della popolazione. Deve essere 'doubleVector' per i problemi misti interi.

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

ga ignora tutti i vincoli quando PopulationType è impostato su 'bitString' o 'custom'. Vedi Population Options .

SelectionFcn

Funzione che seleziona i genitori di crossover e mutation children. Specificare come nome di una funzione di selezione incorporata o di una funzione handle.

gamultiobj utilizza solo 'selectiontournament' .

{'selectionstochunif'} per ga, {'selectiontournament'} per gamultiobj | 'selectionremainder' | 'selectionuniform' | 'selectionroulette' | Funzione di selezione personalizzata

Test di Stallo

NM Interruzione del tipo di test.

'geometricWeighted' | {'averageChange'}

UseParallel

Calcolare in parallelo le funzioni di idoneità e di vincolo non lineare. Vedere Vectorize and Parallel Options (User Function Evaluation) e How to Use Parallel Processing in Global Optimization Toolbox .

true | {false}

UseVectorized

Specifica se le funzioni sono vettorializzate. Vedere Vectorize and Parallel Options (User Function Evaluation) e Vectorize the Fitness Function .

Per una struttura di opzioni, utilizzare Vectorized con i valori 'on' o 'off' .

true | {false}

Esempio optimoptions('gamultiobj','PlotFcn',@gaplotpareto)

Variabili intere, specificate come un vettore di numeri interi positivi che assumono valori da 1 a nvars. Ogni valore in intcon rappresenta un componente x che ha valore intero.

Nota

Se intcon non è vuoto, nonlcon deve restituire vuoto per ceq.

Esempio Per specificare che le voci pari in x hanno valore intero, impostare intcon su 2:2:nvars

Tipi di dati: double

Descrizione del problema, specificata come una struttura contenente questi campi.

fitnessfcn

Funzioni di fitness

nvars

Numero di variabili di progettazione

Aineq

Matrice A per vincoli di disuguaglianza lineare

Bineq

Vettore b per vincoli di disuguaglianza lineare

Aeq

Matrice Aeq per vincoli di uguaglianza lineare

Beq

Vettore beq per vincoli di uguaglianza lineare

lb

Limite inferiore su x

ub

Limite superiore su x

nonlcon

Funzioni di vincolo non lineare

intconIndici di variabili intere
rngstate

Campo per reimpostare lo stato del generatore di numeri casuali

solver

'gamultiobj'

options

Opzioni create utilizzando optimoptions o una struttura di opzioni

È necessario specificare i campi fitnessfcn, nvars e options. I restanti sono facoltativi per gamultiobj .

Tipi di dati: struct

Argomenti di output

comprimi tutto

Punti di Pareto, restituiti come array m-by-nvars, dove m è il numero di punti sul fronte di Pareto. Ogni riga di x rappresenta un punto sul fronte di Pareto.

Valori delle funzioni sul fronte di Pareto, restituiti come array m per nf. m è il numero di punti sul fronte di Pareto e nf è il numero di funzioni di fitness. Ogni riga di fval rappresenta i valori della funzione in un punto di Pareto in x.

Motivo per cui gamultiobj si è fermato, restituito come numero intero.

Valore di exitflagCondizione di arresto
1

La media geometrica della variazione relativa del valore dello spread su options.MaxStallGenerations generazioni è inferiore a options.FunctionTolerance, e lo spread finale è inferiore allo spread medio sulle ultime options.MaxStallGenerations generazioni

0

Superato il numero massimo di generazioni

-1

Ottimizzazione terminata da una funzione di output o da una funzione di grafico

-2

Nessun punto fattibile trovato

-5

Limite di tempo superato

Informazioni sul processo di ottimizzazione, restituite come una struttura con questi campi.

Campo di outputSignificato
problemtype

Tipo di problema:

  • 'unconstrained' — Nessun vincolo

  • 'boundconstraints' — Solo vincoli vincolati

  • 'linearconstraints' — Vincoli lineari, con o senza vincoli di limite

  • 'nonlinearconstr' — Vincoli non lineari, con o senza altri tipi di vincoli

rngstate

Stato del generatore di numeri casuali MATLAB, appena prima dell'avvio dell'algoritmo. È possibile utilizzare i valori in rngstate per riprodurre l'output di gamultiobj . Vedi Reproduce Results .

generationsNumero totale di generazioni, escluse le iterazioni HybridFcn.
funccountNumero totale di valutazioni delle funzioni.
messageMessaggio di uscita gamultiobj.
averagedistance“Distanza” media, che per impostazione predefinita è la deviazione standard della norma della differenza tra i membri del fronte di Pareto e la loro media.
spreadCombinazione della “distanza” e di una misura dello spostamento dei punti sul fronte di Pareto tra le due iterazioni finali.
maxconstraintViolazione massima del vincolo nell'insieme di Pareto finale.

Popolazione finale, restituita come array n-by-nvars, dove n è il numero di membri della popolazione.

Punteggi della popolazione finale, restituiti come array n-by-nf. n è il numero di membri della popolazione e nf è il numero di funzioni di fitness.

In presenza di vincoli non lineari, gamultiobj imposta scores dei membri della popolazione non realizzabili su Inf.

Ulteriori informazioni

comprimi tutto

Fronte di Pareto

Un fronte di Pareto è un insieme di punti nello spazio dei parametri (lo spazio delle variabili decisionali) che hanno valori della funzione di idoneità non inferiori.

In altre parole, per ogni punto del fronte di Pareto è possibile migliorare una funzione di fitness solo peggiorandone un'altra. Per i dettagli, vedere What Is Multiobjective Optimization?

Come in Local vs. Global Optima, è possibile che un fronte di Pareto sia locale, ma non globale. "Locale" significa che i punti di Pareto possono essere non inferiori rispetto ai punti vicini, ma i punti più lontani nello spazio dei parametri potrebbero avere valori di funzione inferiori in ogni componente.

Algoritmi

gamultiobj utilizza un algoritmo genetico controllato ed elitario (una variante di NSGA-II [1]). Un GA elitario favorisce sempre gli individui con un migliore valore di fitness (rango). Un'AG elitaria controllata favorisce anche gli individui che possono contribuire ad aumentare la diversità della popolazione, anche se hanno un valore di fitness inferiore. È importante mantenere la diversità della popolazione per convergere verso un fronte di Pareto ottimale. La diversità viene mantenuta controllando i membri più elitari della popolazione man mano che l'algoritmo progredisce. Due opzioni, ParetoFraction e DistanceMeasureFcn, controllano l'elitarismo. ParetoFraction limita il numero di individui sul fronte di Pareto (membri dell'élite). La funzione distanza, selezionata da DistanceMeasureFcn, aiuta a mantenere la diversità su un fronte favorendo gli individui che sono relativamente lontani sul fronte. L'algoritmo si arresta se lo spread, una misura del movimento del fronte di Pareto, è piccolo. Per i dettagli, vedere gamultiobj Algorithm .

Funzionalità alternativa

Applicazione

L'attività Ottimizza Live Editor fornisce un'interfaccia visiva per gamultiobj .

Riferimenti

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

Funzionalità estese

Cronologia versioni

Introdotto in R2007b