Guida rapida

Ottimizzazione basata su problemi con Optimization Toolbox

Utilizza una sintassi naturale per definire e risolvere problemi di ottimizzazione, problemi di minimi quadrati e sistemi di equazioni non lineari.

1. Definizione del problema

Seguendo il workflow basato su problemi, crea innanzitutto un problema di ottimizzazione con optimproblem per contenere la funzione obiettivo, i vincoli e le variabili associate. Crea un problema eqnproblem per risolvere un sistema di equazioni non lineari.

Esempi:

assignmentProb = optimproblem
responseProb = optimproblem
initialStateProb = eqnproblem
2. Definizione delle variabili

Crea variabili di ottimizzazione con optimvar. Imposta il nome visualizzato e, facoltativamente, le dimensioni, i limiti e il tipo. Indicizza utilizzando numeri interi o stringhe di caratteri.

Esempi:

x = optimvar("x");
y = optimvar("y");

employees = ["a","b","c"];
tasks = ["t1","t2","t3"];
assign = optimvar("assign",employees,tasks,"LowerBound",0,"UpperBound",1,"Type","integer")
3. Definizione delle espressioni da utilizzare nella funzione obiettivo, nei vincoli e nelle equazioni

Specifica direttamente una OptimizationExpression utilizzando le operazioni supportate.

Esempi:

response = -3*(y - x.^3 - x).^2 - (x - 4/3).^2;
totalCost = sum(sum(cost.*assign));
sumByEmployee = sum(assign,2);
sumByTask = sum(assign,1);

Utilizza qualsiasi funzione MATLAB® convertendola in un’espressione di ottimizzazione con fcn2optimexpr.

Esempi:

a = 4;
xyfcn = @(x,y,a)gamma(y)*a*x.^2;
xyexpr = fcn2optimexpr(xyfcn,x,y,a);
4. Definizione della funzione obiettivo

Imposta il criterio dell’ottimizzazione. Imposta la funzione obiettivo con una OptimizationExpression scalare.

Esempi:

responseProb.ObjectiveSense = "maximize";
responseProb.Objective = response;

assignmentProb.ObjectiveSense = "minimize";
assignmentProb.Objective = totalCost;
5. Definizione di vincoli ed equazioni

Combina le OptimizationExpression con un operatore relazionale per specificare un OptimizationConstraint o un OptimizationEquality. Assegna un problema.

Esempi:

responseProb.Constraints.ellipse = x.^2/2 + y.^2/4 <= 1;
responseProb.Constraints.xyconstr = xyexpr >= 1;

assignmentProb.Constraints.oneTaskPerEmployee = sumByTask <= 1;
assignmentProb.Constraints.oneEmployeePerTask = sumByEmployee == 1;

initialStateProb.Equations.eq1 = x*cos(y) + y*sin(x) == 1/2;
initialStateProb.Equations.eq2 = exp(-exp(-(x + y))) == y*(1 + x^2);
6. Verifica

Visualizza con show e showbounds. Scrivi su un file con write e writebounds.

Visualizza con il browser dell’area di lavoro.

7. Risoluzione e analisi

Risolvi il problema, specificando un punto iniziale per i problemi non lineari. La funzione solve restituisce i valori della soluzione, i valori delle funzioni obiettivo, il motivo per cui l’esecuzione del problema è terminata e altre informazioni.

Esempio:

x0.x = 0;
x0.y = 0;
[sol,fval,exitflag] = solve(responseProb,x0)

Risolvi con le opzioni di ottimizzazione.​

Esempio:

o = optimoptions(assignmentProb,"MaxTime",10);
sol = solve(assignmentProb,"Options",o)

Altre azioni​