Cheat Sheets

Problembasierte Optimierung mit der Optimization Toolbox

Verwenden Sie eine intuitive Syntax zum Definieren und Lösen von Optimierungsproblemen, Problemen der kleinsten Quadrate und Systemen nichtlinearer Gleichungen.

1. Problem definieren

Erstellen Sie gemäß dem problembasierten Workflow zunächst mit optimproblem ein Optimierungsproblem, das die Zielfunktion, die Randbedingungen und die zugehörigen Variablen enthält. Erstellen Sie ein eqnproblem, wenn Sie ein System nichtlinearer Gleichungen lösen.

Beispiele:

assignmentProb = optimproblem
responseProb = optimproblem
initialStateProb = eqnproblem
2. Variablen definieren

Erstellen Sie Optimierungsvariablen mit optimvar. Legen Sie den Anzeigenamen sowie optional Dimensionen, Grenzen und den Typ fest. Indizieren Sie mit Ganzzahlen oder Zeichenfolgen.

Beispiele:

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. Ausdrücke für Zielfunktion, Randbedingungen und Gleichungen definieren

Definieren Sie mit unterstützten Operationen direkt eine OptimizationExpression.

Beispiele:

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

Verwenden Sie beliebige MATLAB® Funktionen, indem Sie diese mit fcn2optimexpr in einen Optimierungsausdruck konvertieren.

Beispiele:

a = 4;
xyfcn = @(x,y,a)gamma(y)*a*x.^2;
xyexpr = fcn2optimexpr(xyfcn,x,y,a);
4. Zielfunktion definieren

Legen Sie die Richtung der Optimierung fest. Legen Sie die Zielfunktion mit einer skalaren OptimizationExpression fest.

Beispiele:

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

assignmentProb.ObjectiveSense = "minimize";
assignmentProb.Objective = totalCost;
5. Randbedingungen und Gleichungen definieren

Kombinieren Sie OptimizationExpression mit einem Vergleichsoperator, um eine OptimizationConstraint oder eine OptimizationEquality zu definieren. Weisen Sie diese einem Problem zu.

Beispiele:

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. Überprüfen

Zeigen Sie sie mit show und showbounds an. Schreiben Sie sie mit write und writebounds in eine Datei.

Zeigen Sie sie im Workspace-Browser an.

7. Lösen und analysieren

Lösen Sie das Problem und geben Sie für nichtlineare Probleme einen Startpunkt an. Die Funktion solve gibt die Lösungswerte, die Werte der Zielfunktion, den Grund für die Beendigung der Problemlösung und weitere Informationen zurück.

Beispiel:

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

Lösen Sie das Problem mit Optimierungsoptionen.​

Beispiel:

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

Weitere Möglichkeiten​