Guide de référence

Optimisation basée sur les problèmes avec Optimization Toolbox

Utiliser une syntaxe naturelle pour définir et résoudre des problèmes d'optimisation, des problèmes de moindres carrés et des systèmes d'équations non linéaires.

1. Définir le problème

Dans le cadre du workflow basé sur les problèmes, commencez par créer un problème d'optimisation avec optimproblem qui contiendra l'objectif, les contraintes et les variables associées. Créez un eqnproblem pour résoudre un système d'équations non linéaires.

Exemples :

assignmentProb = optimproblem
responseProb = optimproblem
initialStateProb = eqnproblem
2. Définir les variables

Créez des variables d'optimisation avec optimvar. Définissez leur nom d'affichage et, éventuellement, leurs dimensions, leurs bornes et leur type. Utilisez des entiers ou des chaînes de caractères pour l'indexation.

Exemples :

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. Définir les expressions à utiliser dans l'objectif, les contraintes et les équations

Spécifiez directement une OptimizationExpression grâce aux opérations supportées.

Exemples :

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

Utilisez n'importe quelle fonction MATLAB® en la convertissant en expression d'optimisation avec fcn2optimexpr.

Exemples :

a = 4;
xyfcn = @(x,y,a)gamma(y)*a*x.^2;
xyexpr = fcn2optimexpr(xyfcn,x,y,a);
4. Définir l'objectif

Définissez le sens de l’optimisation. Définissez la fonction objectif avec une OptimizationExpression scalaire.

Exemples :

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

assignmentProb.ObjectiveSense = "minimize";
assignmentProb.Objective = totalCost;
5. Définir les contraintes et les équations

Combinez des OptimizationExpressions en utilisant un opérateur relationnel pour spécifier une OptimizationConstraint ou une OptimizationEquality. Affectez-les à un problème.

Exemples :

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. Évaluer

Affichez les informations sur la variable d’optimisation avec show et showbounds. Enregistrer les informations sur la variable dans un fichier avec write et writebounds.

Visualisez les informations sur la variable dans le navigateur de l'espace de travail.

7. Résoudre et analyser

Résolvez le problème en indiquant un point initial pour les problèmes non linéaires. La fonction solve renvoie les valeurs des solutions, les valeurs des objectifs, la raison pour laquelle le problème s'est arrêté, etc.

Exemple :

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

Résolvez le problème avec des options d'optimisation.​

Exemple :

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

Aller plus loin​