Contenuto principale

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

particleswarm

Ottimizzazione dello sciame di particelle

Descrizione

x = particleswarm(fun,nvars) tenta di trovare un vettore x che raggiunga un minimo locale di fun . nvars è la dimensione (numero di variabili di progettazione) di fun .

Nota

Passing Extra Parameters spiega come passare parametri aggiuntivi alla funzione obiettivo, se necessario.

esempio

x = particleswarm(fun,nvars,lb,ub) definisce un insieme di limiti inferiori e superiori sulle variabili di progettazione, x, in modo che una soluzione venga trovata nell'intervallo lb x ub .

esempio

x = particleswarm(fun,nvars,lb,ub,options) si riduce al minimo con i parametri di ottimizzazione predefiniti sostituiti dai valori in options. Impostare lb = [] e ub = [] se non esistono limiti.

esempio

x = particleswarm(problem) trova il minimo per problem, una struttura descritta in problem .

[x,fval,exitflag,output,points] = particleswarm(___) restituisce anche quanto segue, utilizzando una qualsiasi delle combinazioni di argomenti di input nelle sintassi precedenti:

  • fval, uno scalare che è il valore della funzione obiettivo fun(x)

  • exitflag, un valore che descrive la condizione di uscita

  • output, una struttura che contiene informazioni sul processo di ottimizzazione

  • points, una struttura che contiene le posizioni finali dello sciame in points.X e i valori della funzione obiettivo associata in points.Fval

esempio

Esempi

comprimi tutto

Minimizzare una semplice funzione di due variabili.

Definire la funzione obiettivo.

fun = @(x)x(1)*exp(-norm(x)^2);

Chiamare particleswarm per minimizzare la funzione.

rng default  % For reproducibility
nvars = 2;
x = particleswarm(fun,nvars)
Optimization ended: relative change in the objective value 
over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.

x =

  629.4474  311.4814

Questa soluzione è ben lontana dal vero minimo, come si può osservare nel grafico di una funzione.

fsurf(@(x,y)x.*exp(-(x.^2+y.^2)))

Di solito è meglio stabilire dei limiti. Vedi Minimizzare una funzione semplice con limiti .

Minimizzare una semplice funzione di due variabili con vincoli vincolati.

Definire la funzione obiettivo.

fun = @(x)x(1)*exp(-norm(x)^2);

Imposta i limiti per le variabili.

lb = [-10,-15];
ub = [15,20];

Chiamare particleswarm per minimizzare la funzione.

rng default  % For reproducibility
nvars = 2;
x = particleswarm(fun,nvars,lb,ub)
Optimization ended: relative change in the objective value 
over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.
x = 1×2

   -0.7071   -0.0000

Utilizzare una popolazione più ampia e una funzione ibrida per provare a ottenere una soluzione migliore.

Specificare la funzione obiettivo e i limiti.

fun = @(x)x(1)*exp(-norm(x)^2);
lb = [-10,-15];
ub = [15,20];

Specificare le opzioni.

options = optimoptions('particleswarm','SwarmSize',100,'HybridFcn',@fmincon);

Chiamare particleswarm per minimizzare la funzione.

rng default  % For reproducibility
nvars = 2;
x = particleswarm(fun,nvars,lb,ub,options)
Optimization ended: relative change in the objective value 
over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.
x = 1×2

   -0.7071   -0.0000

Restituisci gli argomenti di output facoltativi per esaminare il processo di soluzione in modo più dettagliato.

Definisci il problema.

fun = @(x)x(1)*exp(-norm(x)^2);
lb = [-10,-15];
ub = [15,20];
options = optimoptions('particleswarm','SwarmSize',50,'HybridFcn',@fmincon);

Chiamare particleswarm con tutti gli output per minimizzare la funzione e ottenere informazioni sul processo di soluzione.

rng default  % For reproducibility
nvars = 2;
[x,fval,exitflag,output,points] = particleswarm(fun,nvars,lb,ub,options)
Optimization ended: relative change in the objective value 
over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.
x = 1×2

   -0.7071   -0.0000

fval = -0.4289
exitflag = 1
output = struct with fields:
      rngstate: [1x1 struct]
    iterations: 43
     funccount: 2203
       message: 'Optimization ended: relative change in the objective value ...'
    hybridflag: 1

points = struct with fields:
       X: [50x2 double]
    Fval: [50x1 double]

Argomenti di input

comprimi tutto

Funzione obiettivo, specificata come funzione handle o nome di funzione. Scrivere la funzione obiettivo in modo che accetti un vettore riga di lunghezza nvars e restituisca un valore scalare.

Quando l'opzione 'UseVectorized' è true, scrivere fun per accettare una matrice pop per nvars, dove pop è la dimensione attuale della popolazione. In questo caso, fun restituisce un vettore della stessa lunghezza di pop contenente i valori della funzione di fitness. Assicurarsi che fun non assuma alcuna dimensione particolare per pop, poiché particleswarm può superare un singolo membro di una popolazione anche in un calcolo vettorializzato.

Esempio fun = @(x)(x-[4,2]).^2

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

Limiti inferiori, specificati come array reale o array di double. lb rappresenta i limiti inferiori elemento per elemento in lb x ub.

Internamente, particleswarm converte un array lb in un array lb(:).

Esempio lb = [0;-Inf;4] significa x(1) ≥ 0, x(3) ≥ 4 .

Tipi di dati: double

Limiti superiori, specificati come array reale o array di double. ub rappresenta i limiti superiori elemento per elemento in lb x ub.

Internamente, particleswarm converte un array ub nell'array ub(:).

Esempio ub = [Inf;4;10] significa x(2) ≤ 4, x(3) ≤ 10 .

Tipi di dati: double

Opzioni per particleswarm, specificate come output della funzione optimoptions.

Alcune opzioni sono assenti nella visualizzazione optimoptions. Queste opzioni sono elencate in corsivo. Per i dettagli, vedere View Optimization Options .

CreationFcn

Funzione che crea lo sciame iniziale. Specificare come 'pswcreationuniform' o una funzione handle. Il valore predefinito è 'pswcreationuniform' . Vedi Swarm Creation .

Display

Livello di visualizzazione restituito alla riga di comando.

  • 'off' o 'none' non visualizza alcun output.

  • 'final' visualizza solo l'output finale (predefinito).

  • 'iter' fornisce una visualizzazione iterativa.

Intervallo di visualizzazioneIntervallo per la visualizzazione iterativa. La visualizzazione iterativa stampa una riga ogni DisplayInterval iterazioni. Il valore predefinito è 1 .
FunctionToleranceScalare non negativo con valore predefinito 1e-6 . Le iterazioni terminano quando la variazione relativa del valore migliore della funzione obiettivo nelle ultime MaxStallIterations iterazioni è inferiore a options.FunctionTolerance.
ControlloFunVal

Controlla se i valori della funzione obiettivo e dei vincoli sono validi. 'on' visualizza un errore quando la funzione obiettivo o i vincoli restituiscono un valore complesso, Inf o NaN. L'impostazione predefinita, 'off', non visualizza alcun errore.

HybridFcn

Funzione che continua l'ottimizzazione dopo la terminazione di particleswarm. Specificare come nome o function handle. Valori possibili:

  • 'fmincon'

  • 'fminsearch'

  • 'fminunc'

  • 'patternsearch'

Può anche essere un array di celle che specifica la funzione ibrida e le sue opzioni, ad esempio {@fmincon,fminconopts} . Il valore predefinito è [] . Vedi Hybrid Function .

Vedi Quando utilizzare una funzione ibrida .

InertiaRangeVettore reale a due elementi con valori dello stesso segno in ordine crescente. Fornisce il limite inferiore e superiore dell'inerzia adattiva. Per ottenere un'inerzia costante (non adattiva), impostare entrambi gli elementi di InertiaRange sullo stesso valore. Il valore predefinito è [0.1,1.1] . Vedi Algoritmo di ottimizzazione dello sciame di particelle .
InitialPoints

Popolazione iniziale o popolazione parziale di particelle, specificata come matrice o struttura.

  • Una matrice ha dimensione M-by-nvars . Ogni riga rappresenta una particella. Se M < SwarmSize, allora particleswarm crea più particelle in modo che il numero totale sia SwarmSize. Se M > SwarmSize, allora particleswarm utilizza le prime SwarmSize righe.

  • Una struttura deve avere il campo X, che rappresenta la matrice dei punti iniziali.

  • Se la struttura ha più di un campo, deve includere il campo Fval, che contiene un vettore di valori della funzione obiettivo per i punti InitialPoints.X.

InitialSwarmSpan

Intervallo iniziale di posizioni delle particelle create da @pswcreationuniform. Può essere uno scalare positivo o un vettore con nvars elementi, dove nvars è il numero di variabili. L'intervallo per qualsiasi componente di particella è -InitialSwarmSpan/2,InitialSwarmSpan/2, spostato e ridimensionato se necessario per rispettare eventuali limiti. Il valore predefinito è 2000 .

InitialSwarmSpan influenza anche l'intervallo delle velocità iniziali delle particelle. Vedi Inizializzazione .

MaxIterationsNumero massimo di iterazioni eseguite da particleswarm. Il valore predefinito è 200*nvars, dove nvars è il numero di variabili.
MaxStallIterationsIntero positivo con valore predefinito 20 . Le iterazioni terminano quando la variazione relativa del valore migliore della funzione obiettivo nelle ultime MaxStallIterations iterazioni è inferiore a options.FunctionTolerance.
MaxStallTimeNumero massimo di secondi senza un miglioramento del valore più noto della funzione obiettivo. Scalare positivo con valore predefinito Inf .
MaxTimeTempo massimo in secondi di esecuzione di particleswarm. Il valore predefinito è Inf .
MinNeighborsFractionDimensione minima adattiva del vicinato, uno scalare da 0 a 1. Il valore predefinito è 0.25 . Vedi Algoritmo di ottimizzazione dello sciame di particelle .
ObjectiveLimitValore oggettivo minimo, criterio di arresto. Scalare, con valore predefinito -Inf .
OutputFcnGestore di funzione o matrice di celle di gestori di funzione. Le funzioni di output possono leggere dati iterativi e arrestare il risolutore. Il valore predefinito è [] . Vedi Output Function and Plot Function .
PlotFcnNome della funzione, handle della funzione o matrice di celle degli handle della funzione. Per funzioni di grafico personalizzate, passare i gestori di funzione. Le funzioni di grafico possono leggere dati iterativi, tracciare ogni iterazione e arrestare il risolutore. Il valore predefinito è [] . Funzione di tracciamento integrata disponibile: 'pswplotbestf' . Vedi Output Function and Plot Function .
SelfAdjustmentWeightPonderazione della posizione migliore di ogni particella durante la regolazione della velocità. Scalare finito con valore predefinito 1.49 . Vedi Algoritmo di ottimizzazione dello sciame di particelle .
SocialAdjustmentWeightPonderazione della posizione migliore del quartiere durante la regolazione della velocità. Scalare finito con valore predefinito 1.49 . Vedi Algoritmo di ottimizzazione dello sciame di particelle .
SwarmSizeNumero di particelle nello sciame, un numero intero maggiore di 1 . Il valore predefinito è min(100,10*nvars), dove nvars è il numero di variabili.
UseParallelCalcola la funzione obiettivo in parallelo quando true . Il valore predefinito è false . Vedi Parallel or Vectorized Function Evaluation .
UseVectorizedCalcola la funzione obiettivo in modo vettorializzato quando true . Il valore predefinito è false . Vedi Parallel or Vectorized Function Evaluation .

Problema di ottimizzazione, specificato come una struttura con i seguenti campi.

solver'particleswarm'
objectiveHandle della funzione obiettivo o nome della funzione obiettivo.
nvarsNumero di variabili nel problema.
lbVettore o matrice di limiti inferiori.
ubVettore o matrice di limiti superiori.
optionsOpzioni create da optimoptions .
rngstateStato facoltativo del generatore di numeri casuali all'inizio del processo di soluzione.

Tipi di dati: struct

Argomenti di output

comprimi tutto

Soluzione, restituita come un vettore reale che minimizza la funzione obiettivo soggetta a eventuali vincoli.

Valore oggettivo, restituito come scalare reale fun(x) .

Condizione di arresto dell'algoritmo, restituita come un numero intero che identifica il motivo per cui l'algoritmo si è arrestato. Di seguito sono elencati i valori di exitflag e i motivi corrispondenti per cui particleswarm si è arrestato.

1

La variazione relativa del valore obiettivo nelle ultime options.MaxStallIterations iterazioni è inferiore a options.FunctionTolerance.

0

Numero di iterazioni superato options.MaxIterations .

-1

Iterazioni interrotte dalla funzione di output o dalla funzione di grafico.

-2

I limiti sono incoerenti: per alcuni i, lb(i) > ub(i) .

-3

Il valore migliore della funzione obiettivo è inferiore a options.ObjectiveLimit.

-4

Il valore della funzione obiettivo migliore non è cambiato entro options.MaxStallTime secondi.

-5

Il tempo di esecuzione ha superato options.MaxTime secondi.

Riepilogo del processo di soluzione, restituito come una struttura contenente informazioni sul processo di ottimizzazione.

iterations

Numero di iterazioni del risolutore

funccount

Numero di valutazioni della funzione obiettivo.

message

Motivo per cui l'algoritmo si è fermato.

hybridflag

Flag di uscita dalla funzione ibrida. Si riferisce a HybridFcn options .

rngstate

Stato del generatore di numeri casuali predefinito appena prima dell'avvio dell'algoritmo.

Posizioni finali dello sciame e valori della funzione obiettivo, restituiti come una struttura con questi campi:

  • X — Posizioni dello sciame finale, restituite come matrice. Ogni riga della matrice rappresenta un punto.

  • Fval — Valori della funzione obiettivo dello sciame finale. Per ogni i, un indice di un membro dello sciame finale, points.Fval(i) = fun(points.X(i)).

Per continuare un'ottimizzazione, puoi passare points come opzione InitialPoints. Tuttavia, questo approccio non equivale a eseguire un'ottimizzazione per un periodo di tempo più lungo dall'inizio, perché molti aspetti dell'algoritmo non sono identici quando l'ottimizzazione riparte da una popolazione finale. Vedi Algoritmo di ottimizzazione dello sciame di particelle .

Tipi di dati: struct

Limitazioni

  • Attualmente, l'attività Ottimizza Live Editor basata sui problemi non supporta la specificazione di più punti iniziali o valori iniziali della funzione obiettivo. Per specificare i punti iniziali, utilizzare l'attività basata sul risolutore oppure utilizzare la riga di comando.

Algoritmi

Per una descrizione dell'algoritmo di ottimizzazione dello sciame di particelle, vedere Algoritmo di ottimizzazione dello sciame di particelle .

Funzionalità alternativa

Applicazione

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

Funzionalità estese

espandi tutto

Cronologia versioni

Introdotto in R2014b

espandi tutto