Contenuto principale

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

simulannealbnd

Trova il minimo della funzione utilizzando l'algoritmo di ricottura simulata

Descrizione

x = simulannealbnd(fun,x0) trova un minimo locale, x, per la funzione handle fun che calcola i valori della funzione obiettivo. x0 è un punto iniziale per l'algoritmo di ricottura simulata, un vettore reale.

Nota

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

esempio

x = simulannealbnd(fun,x0,lb,ub) definisce un insieme di limiti inferiori e superiori sulle variabili di progettazione in x, in modo che la soluzione sia sempre compresa nell'intervallo lb x ub . Se x(i) non ha limiti inferiori, imposta lb(i) = -Inf, e se x(i) non ha limiti superiori, imposta ub(i) = Inf.

esempio

x = simulannealbnd(fun,x0,lb,ub,options) si riduce al minimo con le opzioni di ottimizzazione specificate in options . Crea options utilizzando optimoptions . Se non esistono limiti, impostare lb = [] e/o ub = [] .

esempio

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

[x,fval] = simulannealbnd(___), per qualsiasi sintassi, restituisce il valore della funzione obiettivo fun nella soluzione x .

[x,fval,exitflag,output] = simulannealbnd(___) restituisce inoltre un valore exitflag che descrive la condizione di uscita di simulannealbnd e una struttura output con informazioni sul processo di ottimizzazione.

esempio

Esempi

comprimi tutto

Minimizziamo la quinta funzione di De Jong, una funzione bidimensionale con molti minimi locali. Questa funzione è disponibile quando si esegue questo esempio.

Trama La quinta funzione di De Jong.

dejong5fcn

Riduci al minimo la quinta funzione di De Jong utilizzando simulannealbnd partendo dal punto [0,0].

fun = @dejong5fcn;
x0 = [0 0];
x = simulannealbnd(fun,x0)
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x = 1×2

  -32.0285   -0.1280

L'algoritmo simulannealbnd utilizza il flusso di numeri casuali MATLAB ®, quindi potresti ottenere un risultato diverso.

Minimizzare la quinta funzione di De Jong all'interno di una regione limitata. Questa funzione è disponibile quando si esegue questo esempio.

Trama La quinta funzione di De Jong.

dejong5fcn

Avvia simulannealbnd partendo dal punto [0,0] e imposta i limiti inferiore e superiore di -64 su ciascun componente.

fun = @dejong5fcn;
x0 = [0 0];
lb = [-64 -64];
ub = [64 64];
x = simulannealbnd(fun,x0,lb,ub)
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x = 1×2

  -15.9790  -31.9593

L'algoritmo simulannealbnd utilizza il flusso di numeri casuali MATLAB ®, quindi potresti ottenere un risultato diverso.

Osserva l'avanzamento di simulannealbnd impostando le opzioni per utilizzare alcune funzioni di grafico.

Impostare le opzioni di ricottura simulata per utilizzare diverse funzioni di grafico.

options = optimoptions('simulannealbnd','PlotFcns',...
          {@saplotbestx,@saplotbestf,@saplotx,@saplotf});

Avvia simulannealbnd partendo dal punto [0,0] e imposta i limiti inferiore e superiore di -64 su ciascun componente. Ridurre al minimo dejong5fcn, disponibile quando si esegue questo esempio.

rng default % For reproducibility
fun = @dejong5fcn;
x0 = [0,0];
lb = [-64,-64];
ub = [64,64];
x = simulannealbnd(fun,x0,lb,ub,options)

simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x = 1×2

  -15.9790  -31.9593

Ottieni tutti gli output di una minimizzazione della ricottura simulata.

Tracciare la quinta funzione di De Jong, disponibile quando si esegue questo esempio.

dejong5fcn

Avvia simulannealbnd partendo dal punto [0,0] e imposta i limiti inferiore e superiore a -64 per ciascun componente.

fun = @dejong5fcn;
x0 = [0,0];
lb = [-64,-64];
ub = [64,64];
[x,fval,exitflag,output] = simulannealbnd(fun,x0,lb,ub)
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x = 1×2

  -15.9790  -31.9593

fval = 1.9920
exitflag = 1
output = struct with fields:
     iterations: 1762
      funccount: 1779
        message: 'simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.'
       rngstate: [1x1 struct]
    problemtype: 'boundconstraints'
    temperature: [2x1 double]
      totaltime: 0.9858

L'algoritmo simulannealbnd utilizza il flusso di numeri casuali MATLAB ®, quindi potresti ottenere un risultato diverso.

Argomenti di input

comprimi tutto

Funzione da minimizzare, specificata come funzione handle o nome di funzione. fun è una funzione che accetta un vettore x e restituisce uno scalare reale f, con la funzione obiettivo valutata in x.

fun può essere specificato come funzione handle per un file:

x = simulannealbnd(@myfun,x0)

dove myfun è una funzione MATLAB® come

function f = myfun(x)
f = ...            % Compute function value at x

fun può anche essere una funzione handle per una funzione anonima:

x = simulannealbnd(@(x)norm(x)^2,x0,lb,ub);

Esempio fun = @(x)sin(x(1))*cos(x(2))

Tipi di dati: char | function_handle | string

Punto iniziale, specificato come vettore reale. simulannealbnd utilizza il numero di elementi in x0 per determinare il numero di variabili che fun accetta.

Esempio x0 = [1,2,3,4]

Tipi di dati: double

Limiti inferiori, specificati come array reale o array reale. Se il numero di elementi in x0 è uguale a quello di lb, allora lb specifica che

x(i) >= lb(i) per tutti i .

Se numel(lb) < numel(x0), allora lb specifica che

x(i) >= lb(i) per 1 <= i <= numel(lb) .

In questo caso, i risolutori emettono un avviso.

Esempio Per specificare che tutte le variabili di controllo sono positive, lb = zeros(size(x0))

Tipi di dati: double

Limiti superiori, specificati come array reale o array reale. Se il numero di elementi in x0 è uguale a quello di ub, allora ub specifica che

x(i) <= ub(i) per tutti i .

Se numel(ub) < numel(x0), 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 tutte le variabili di controllo sono minori di uno, ub = ones(size(x0))

Tipi di dati: double

Opzioni di ottimizzazione, specificate come un oggetto restituito da optimoptions o una struttura. Per i dettagli, vedere Simulated Annealing Options .

optimoptions nasconde le opzioni elencate in corsivo; vedere Options that optimoptions Hides .

{} indica il valore predefinito. Vedi i dettagli dell'opzione in Simulated Annealing Options .

OpzioneDescrizioneValori

AcceptanceFcn

Funzione utilizzata dall'algoritmo per determinare se un nuovo punto è accettato. Specificare come 'acceptancesa' o una funzione handle.

Funzione handle | {'acceptancesa'}

AnnealingFcn

Funzione utilizzata dall'algoritmo per generare nuovi punti. Specificare come nome una funzione di ricottura integrata o una funzione handle.

Gestore della funzione | Nome della funzione | 'annealingboltz' | {'annealingfast'}

DataType

Tipo di variabile decisionale

'custom' | {'double'}

Display

Livello di visualizzazione

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

Intervallo di visualizzazione

Intervallo per la visualizzazione iterativa

Numero intero positivo | {10}

FunctionTolerance

Tolleranza di terminazione sul valore della funzione

Per una struttura di opzioni, utilizzare TolFun .

Scalare non negativo | {1e-6}

HybridFcn

Esegue automaticamente HybridFcn (un'altra funzione di ottimizzazione) durante o alla fine delle iterazioni del risolutore. Specificare come nome o function handle.

Vedi Quando utilizzare una funzione ibrida .

'fminsearch' | 'patternsearch' | 'fminunc' | 'fmincon' | {[]}

O

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

Intervallo ibrido

Intervallo (se non 'end' o 'never') in cui viene chiamato HybridFcn

Intero positivo | 'never' | {'end'}

InitialTemperature

Valore iniziale della temperatura

Scalare non negativo | vettore positivo | {100}

MaxFunctionEvaluations

Numero massimo di valutazioni della funzione obiettivo consentite

Per una struttura di opzioni, utilizzare MaxFunEvals .

Intero non negativo | {3000*numberOfVariables}

MaxIterations

Numero massimo di iterazioni consentite

Per una struttura di opzioni, utilizzare MaxIter .

Intero non negativo | {Inf}

MaxStallIterations

Numero di iterazioni in cui la variazione media del valore della funzione di fitness nel punto corrente è inferiore a options.FunctionTolerance

Per una struttura di opzioni, utilizzare StallIterLimit .

Intero non negativo | {500*numberOfVariables}

MaxTime

L'algoritmo si arresta dopo l'esecuzione per MaxTime secondi

Per una struttura di opzioni, utilizzare TimeLimit .

Scalare non negativo | {Inf}

ObjectiveLimit

Valore minimo desiderato della funzione obiettivo

Scalare | {-Inf}

OutputFcn

Le funzioni ottengono dati iterativi e possono modificare le opzioni in fase di esecuzione

Per una struttura di opzioni, utilizzare OutputFcns .

Gestore di funzione | matrice di celle di gestori di funzione | {[]}

PlotFcn

Funzione/i di tracciamento chiamate durante le iterazioni

Per una struttura di opzioni, utilizzare PlotFcns .

Gestore della funzione | Nome della funzione di grafico incorporata | Matrice di celle di gestori di funzione | Matrice di celle di nomi di funzioni di grafico incorporate | 'saplotbestf' | 'saplotbestx' | 'saplotf' | 'saplotstopping' | 'saplottemperature' | {[]}

Intervallo di Trama

Le funzioni di plot vengono chiamate a ogni intervallo

Numero intero positivo | {1}

ReannealInterval

Intervallo di ricottura

Intero non negativo | {100}

TemperatureFcn

Funzione utilizzata per aggiornare la programmazione della temperatura

Funzione handle | nome funzione temperatura incorporata | 'temperatureboltz' | 'temperaturefast' | {'temperatureexp'}

Esempio options = optimoptions(@simulannealbnd,'MaxIterations',150)

Tipi di dati: struct

Struttura del problema, specificata come una struttura con i seguenti campi:

  • objective — Funzione obiettivo

  • x0 — Punto di partenza

  • lb — Limite inferiore per x

  • ub — Limite superiore per x

  • solver'simulannealbnd'

  • options — Opzioni create con optimoptions o una struttura di opzioni

  • rngstate — Campo facoltativo per reimpostare lo stato del generatore di numeri casuali

Nota

problem deve avere tutti i campi specificati sopra.

Tipi di dati: struct

Argomenti di output

comprimi tutto

Soluzione, restituita come vettore reale. La dimensione di x è la stessa di x0 . In genere, x è una soluzione locale al problema quando exitflag è positivo.

Valore della funzione obiettivo nella soluzione, restituito come numero reale. In genere, fval = fun(x) .

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

Bandiera di uscitaSignificato
1

La variazione media del valore della funzione obiettivo su options.MaxStallIterations iterazioni è inferiore a options.FunctionTolerance.

5

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

0

Raggiunto il numero massimo di valutazioni o iterazioni della funzione.

-1

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

-2

Non è stato trovato alcun punto fattibile.

-5

Limite di tempo superato.

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

  • problemtype — Tipo di problema: non vincolato o vincolato.

  • iterations — Numero di iterazioni calcolate.

  • funccount — Numero di valutazioni della funzione obiettivo.

  • message — Il motivo per cui l'algoritmo è terminato.

  • temperature — Temperatura al momento della terminazione del risolutore.

  • totaltime — Tempo totale di esecuzione del risolutore.

  • 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 simulannealbnd . Vedi Reproduce Your Results .

Funzionalità alternativa

Applicazione

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

Cronologia versioni

Introdotto in R2007a