createOptimProblem
Creare una struttura di problema di ottimizzazione
Descrizione
crea una struttura di problema di ottimizzazione vuota per il risolutore problem
= createOptimProblem(solverName
)solverName
.
specifica opzioni aggiuntive utilizzando uno o più argomenti nome-valore.problem
= createOptimProblem(solverName
,Name,Value
)
Esempi
Creare una struttura del problema con le seguenti specifiche:
Risolutore
fmincon
Algoritmo
"interior-point"
Punto iniziale 2D casuale
x0
La funzione di Rosenbrock come obiettivo
Limiti inferiori di –2
Limiti superiori di 2
La funzione di Rosenbrock per una variabile 2-D è (per i dettagli, vedere Constrained Nonlinear Problem Using Optimize Live Editor Task or Solver). Per specificare l'algoritmo "interior-point"
", creare opzioni utilizzando optimoptions
.
anonrosen = @(x)(100*(x(2) - x(1)^2)^2 + (1-x(1))^2); opts = optimoptions(@fmincon,Algorithm="interior-point"); rng default % For reproducibility problem = createOptimProblem("fmincon",... x0=randn(2,1),... objective=anonrosen,... lb=[-2;-2],... ub=[2;2],... options=opts);
Risolvi il problema partendo da problem.x0
chiamando fmincon
.
[x,fval] = fmincon(problem)
Local minimum possible. Constraints satisfied. fmincon stopped because the size of the current step is less than the value of the step size tolerance and constraints are satisfied to within the value of the constraint tolerance.
x = 2×1
1.0000
1.0000
fval = 2.0603e-11
Cerca una soluzione migliore chiamando GlobalSearch
.
gs = GlobalSearch; [x2,fval2] = run(gs,problem)
GlobalSearch stopped because it analyzed all the trial points. All 16 local solver runs converged with a positive local solver exit flag.
x2 = 2×1
1.0000
1.0000
fval2 = 2.1093e-11
In questo caso, sia fmincon
che GlobalSearch
giungono alla stessa soluzione.
Argomenti di input
Risolutore di ottimizzazione, specificato come uno dei seguenti.
Per
GlobalSearch
, specificare"fmincon"
o@fmincon
.Per
MultiStart
, specificare"fmincon"
o@fmincon
,"fminunc"
o@fminunc
,"lsqnonlin"
o@lsqnonlin
, oppure"lsqcurvefit"
o@lsqcurvefit
.
Esempio "fmincon"
Tipi di dati: char
| string
| function_handle
Argomenti nome-valore
Specificare coppie facoltative di argomenti come Name1=Value1,...,NameN=ValueN
, dove Name
è il nome dell'argomento e Value
è il valore corrispondente. Gli argomenti nome-valore devono comparire dopo gli altri argomenti, ma l'ordine delle coppie non ha importanza.
Prima di R2021a, utilizzare le virgole per separare ogni nome e valore e racchiudere Name
tra virgolette.
Esempio createOptimProblem("fmincon","x0",x0,"objective",fun,"lb",zeros(size(x0)))
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 N
x(:)
e beq
è un vettore colonna con elementi Me
.
Ad esempio, per specificare
x1 + 2 x2 + 3 x3 = 10
2 x1 + 4 x2 + x3 = 20,
dare questi vincoli:
Aeq = [1,2,3;2,4,1]; beq = [10;20];
Esempio Per specificare che la somma delle variabili di controllo sia 1, specificare i vincoli Aeq = ones(1,N)
e beq = 1
.
Tipi di dati: double
Vincoli di disuguaglianza lineare, specificati come matrice reale. Aineq
è una matrice M
per nvars
, dove M
è il numero di disuguaglianze.
Aineq
codifica le disuguaglianze lineari M
Aineq*x <= bineq
,
dove x
è il vettore colonna delle variabili nvars
x(:)
e bineq
è un vettore colonna con elementi M
.
Ad esempio, per specificare
x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,
dare questi vincoli:
Aineq = [1,2;3,4;5,6]; bineq = [10;20;30];
Esempio Per specificare che la somma delle variabili di controllo sia pari o inferiore a 1, specificare i vincoli Aineq = ones(1,N)
e bineq = 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 N
x(:)
e Aeq
è una matrice di dimensione Meq
per N
.
Ad esempio, per specificare
x1 + 2 x2 + 3 x3 = 10
2 x1 + 4 x2 + x3 = 20,
dare questi vincoli:
Aeq = [1,2,3;2,4,1]; beq = [10;20];
Esempio Per specificare che la somma delle variabili di controllo sia 1, specificare i vincoli Aeq = ones(1,N)
e beq = 1
.
Tipi di dati: double
Vincoli di disuguaglianza lineare, specificati come vettore reale. bineq
è un vettore di elementi M
correlato alla matrice Aineq
. Se si passa bineq
come vettore riga, i risolutori convertono internamente bineq
nel vettore colonna bineq(:)
.
bineq
codifica le disuguaglianze lineari M
Aineq*x <= bineq
,
dove x
è il vettore colonna delle variabili N
x(:)
e Aineq
è una matrice di dimensione M
per N
.
Ad esempio, per specificare
x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,
dare questi vincoli:
Aineq = [1,2;3,4;5,6]; bineq = [10;20;30];
Esempio Per specificare che la somma delle variabili di controllo sia pari o inferiore a 1, specificare i vincoli Aineq = ones(1,N)
e bineq = 1
.
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, createOptimProblem
converte un array lb
nell'array lb(:)
.
Esempio lb = [0;-Inf;4]
significa x(1) ≥ 0
, x(3) ≥ 4
.
Tipi di dati: double
Vincoli non lineari, specificati come funzione handle o nome di funzione. nonlcon
è una funzione che accetta un array x
e restituisce due array, c(x)
e ceq(x)
.
c(x)
è l'array di vincoli di disuguaglianza non lineare inx
. Il risolutore tenta di soddisfarec(x) <= 0
per tutte le voci dic
.ceq(x)
è l'array di vincoli di uguaglianza non lineari inx
. Il risolutore tenta di soddisfareceq(x) = 0
per tutte le voci diceq
.
Ad esempio, nonlcon
è una funzione MATLAB® come la seguente:
function [c,ceq] = nonlcon(x) c = ... % Compute nonlinear inequalities at x. ceq = ... % Compute nonlinear equalities at x.
Per ulteriori informazioni, vedere Nonlinear Constraints .
Tipi di dati: char
| string
| function_handle
Funzione obiettivo, specificata come funzione handle o nome di funzione.
Per tutti i risolutori, eccetto
lsqnonlin
elsqcurvefit
, la funzione obiettivo deve accettare un arrayx
e restituire uno scalare. Se l'opzioneSpecifyObjectiveGradient
ètrue
, la funzione obiettivo deve restituire un secondo output, un vettore che rappresenta il gradiente dell'obiettivo. Per i dettagli, vederefun
.Per
lsqnonlin
, la funzione obiettivo deve accettare un vettorex
e restituire un vettore. Se l'opzioneSpecifyObjectiveGradient
ètrue
, la funzione obiettivo deve restituire un secondo output, una matrice che rappresenta lo Jacobiano dell'obiettivo. Per i dettagli, vederefun
.Per
lsqcurvefit
, la funzione obiettivo deve accettare due input,x
exdata
, e restituire un vettore. Se l'opzioneSpecifyObjectiveGradient
ètrue
, la funzione obiettivo deve restituire un secondo output, una matrice che rappresenta lo jacobiano dell'obiettivo. Per i dettagli, vederefun
.
Esempio @sin
Esempio "sin"
Tipi di dati: char
| string
| function_handle
Opzioni di ottimizzazione, specificate come output di optimoptions
.
Esempio optimoptions("fmincon","SpecifyObjectiveGradient",true)
Limiti superiori, specificati come array reale o array di double. ub
rappresenta i limiti superiori elemento per elemento in lb
≤ x
≤ ub
.
Internamente, createOptimProblem
converte un array ub
nell'array ub(:)
.
Esempio ub = [Inf;4;10]
significa x(2) ≤ 4
, x(3) ≤ 10
.
Tipi di dati: double
Punto iniziale, specificato come array reale o vettore reale. I risolutori utilizzano il numero di elementi in x0
e la dimensione di x0
per determinare il numero e la dimensione delle variabili accettate da fun
.
Esempio x0 = [1,2,3,4]
Tipi di dati: double
Dati di input per il modello, specificati come array reale o array reale. Il modello è
ydata = fun(x,xdata)
,
dove xdata
e ydata
sono array fissi e x
è l'array di parametri che lsqcurvefit
modifica per cercare una somma minima dei quadrati.
Esempio xdata = [1,2,3,4]
Tipi di dati: double
Dati di risposta per il modello, specificati come array reale o array reale. Il modello è
ydata = fun(x,xdata)
,
dove xdata
e ydata
sono array fissi e x
è l'array di parametri che lsqcurvefit
modifica per cercare una somma minima dei quadrati.
L'array ydata
deve avere le stesse dimensioni e forma dell'array fun(x0,xdata)
.
Esempio ydata = [1,2,3,4]
Tipi di dati: double
Argomenti di output
Problema di ottimizzazione, restituito come struttura. Utilizzare problem
come secondo argomento di input di run
, come negli esempi seguenti:
x = run(gs,problem) x = run(ms,problem,k)
È anche possibile risolvere il problema richiamando il risolutore denominato relativo al problema. Ad esempio, se problem
viene creato per fmincon
, immettere
x = fmincon(problem)
Cronologia versioni
Introdotto in R2010a
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleziona un sito web
Seleziona un sito web per visualizzare contenuto tradotto dove disponibile e vedere eventi e offerte locali. In base alla tua area geografica, ti consigliamo di selezionare: .
Puoi anche selezionare un sito web dal seguente elenco:
Come ottenere le migliori prestazioni del sito
Per ottenere le migliori prestazioni del sito, seleziona il sito cinese (in cinese o in inglese). I siti MathWorks per gli altri paesi non sono ottimizzati per essere visitati dalla tua area geografica.
Americhe
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)