0% ont trouvé ce document utile (0 vote)
379 vues13 pages

Rapport Optimisation Sur Matlab

Le document présente trois exercices d'optimisation de fonctions et de systèmes sous contraintes. Le premier exercice résout un problème de minimisation d'une fonction de deux variables. Le deuxième exercice détermine les débits optimums de deux pompes sous une contrainte d'égalité. Le troisième exercice résout un problème standard d'optimisation linéaire.

Transféré par

Lino YETONGNON
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
379 vues13 pages

Rapport Optimisation Sur Matlab

Le document présente trois exercices d'optimisation de fonctions et de systèmes sous contraintes. Le premier exercice résout un problème de minimisation d'une fonction de deux variables. Le deuxième exercice détermine les débits optimums de deux pompes sous une contrainte d'égalité. Le troisième exercice résout un problème standard d'optimisation linéaire.

Transféré par

Lino YETONGNON
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

UNIVERSITE D’ABOMEY-CALAVI

*-*-*-*-*-*-*
ECOLE POLYTECHNIQUE D’ABOMEY-CALAVI
*-*-*-*-*-*-*
ECOLE DOCTORALE DES SCIENCES DE L’INGENIEUR
*-*-*-*-*

MASTER RECHERCHES EN GENIE ELECTRIQUE

METHODES D’OPTIMISATION DES SYSTEMES ET


PROCEDES

Devoir de maison

Réalisé par : Enseignant :


YETONGNON Lino Dr. Christian AKOWANOU

Année Universitaire: 2018 - 2019


Exercice 1
Soit le problème suivant :
𝑀𝑖𝑛 𝑦 = 3𝑥12 + 𝑥22
𝑥12 𝑥2 − 8 = 0
|∆𝑥2 | = 0.05
{ 𝑥2 = 1.6
Posons :
0 = 𝑥12 𝑥2 − 8 → 8 = 𝑥12 𝑥2
24
Pour 𝑦 = 3𝑥12 + 𝑥22 on a : 𝑥2 𝑦 = 3𝑥2 𝑥12 + 𝑥23 → 𝑥2 𝑦 = 24 + 𝑥23 → 𝑦 = 𝑥 + 𝑥22
2

24
Le problème revient à minimiser la fonction 𝑓(𝑥) = + 𝑥 2 étant donné le point de départ
𝑥

𝑥0 = 1,6 et un pas |∆| = 0,05


Le signe de |∆| est déterminé en comparant :
𝑓(𝑥0 ) = 𝑓(1,6) = 17,56
𝑓(𝑥0 + |∆|) = 𝑓(1,65) = 17,28
𝑓(𝑥0 − |∆|) = 𝑓(1,55) = 17,89
Alors
𝑓(𝑥0 − |∆|) ≥ 𝑓(𝑥0 ) ≥ 𝑓(𝑥0 + |∆|)
∆ doit donc être positif, et le point minimum x* doit être supérieur à 1,6.
En utilisant la relation de récurrence 𝑥𝑘+1 = 𝑥𝑘 + 2𝑘 ∆ on obtient le tableau suivant :
Nombre d’itération k 𝑥𝑘 𝑓(𝑥𝑘 )

0 1,6 17,56

1 1,65 17,25

2 1,75 16,78

3 1,95 16,11

4 2,35 15,74

5 3,15 17.54

Le point minimum est donc délimité par 1,6 ≤ 𝑥 ∗ ≤ 3,15 plus précisément 2,35
Exercice 2
1) Fonction objectif en fonction de F1 et F2
F1 : débit d’écoulement de la pompe 1
F2 : débit d’écoulement de la pompe 2
P1 : pression de la pompe 1
P2 : pression de la pompe 2
PT : pression totale développée par les deux pompes
η : rendement de chacune des pompes
On a les équations suivantes
𝜂 × 𝑃𝑇 = 𝐹1 × ∆𝑝1 + 𝐹2 × ∆𝑝2
𝜂 × 𝑃𝑇 = 𝐹1 × 2,1 × 1010 𝐹12 + 𝐹2 × 3,6 × 1010 𝐹22
Alors on a la fonction objectif :
𝑦 = 2,1 × 1010 𝐹13 + 3,6 × 1010 𝐹23
Avec :
𝐹1 + 𝐹2 = 0.01
𝐹1 ≥ 0 𝑒𝑡 𝐹2 ≥ 0
Le problème revient à minimiser la fonction objectif sous contrainte égalité

𝑦 = 2,1 × 1010 𝐹13 + 3,6 × 1010 𝐹23


{ 𝐹1 + 𝐹2 = 0.01
𝐹1 ≥ 0 𝑒𝑡 𝐹2 ≥ 0

2) Détermination des optimums en F1 et F2


Méthode du multiplicateur de Lagrange :
Posons :
𝐿(𝐹1 , 𝐹2 , 𝜆) = 𝑦(𝐹1 , 𝐹2 ) − 𝜆(𝐹1 + 𝐹2 − 0.01)
Recherchons les points critiques de la fonction L :
𝜕𝐿
0= = 6,3 × 1010 𝐹12 − 𝜆 (1)
𝜕𝐹1
𝜕𝐿
0= = 10,8 × 1010 𝐹22 − 𝜆 (2)
𝜕𝐹2
𝜕𝐿
{ 0 = 𝜕𝜆 = 𝐹1 + 𝐹2 − 0.01 (3)

(1)-(2) et (3) donnent :

6,3 × 1010 𝐹12 − 10,8 × 1010 𝐹22 = 0 (𝑎)


{
𝐹2 = 0,01 − 𝐹1 (3)

(3) dans (a) donne :


6,3 × 1010 𝐹12 − 10,8 × 1010 (0,01 − 𝐹1 )2 = 0
4,5𝐹12 − 0,216 𝐹1 + 0,00108 = 0
1701
∆= 0,027216 = >0
62500
9√21
√∆=
250
On déduit 𝐹1 tel que :
9√21
0,216 −
𝐹1 = 250 ⟹ 𝐹 = 6 − √21 = 0,00567
1
2 × 4,5 250
Ou
9√21
0,216 +
𝐹1 = 250 ⟹ 𝐹 = 6 + √21 = 0,04233
1
2 × 4,5 250
Or
𝐹1 < 0,01 𝑐𝑎𝑟 𝐹1 + 𝐹2 = 0,01
Donc
6 − √21
𝐹1 ∗ = = 0,00567 ⟹ 𝑭𝟏 ∗ = 𝟓, 𝟔𝟕 × 𝟏𝟎−𝟑 𝒎𝟑 /𝒔
250
2√21 − 7
𝐹2 ∗ = 0,01 − 𝐹1 ∗ = = 0,00433 ⟹ 𝑭𝟐 ∗ = 𝟒, 𝟑𝟑 × 𝟏𝟎−𝟑 𝒎𝟑 /𝒔
500
Par suite :
𝑃∗ = 2,1 × 1010 𝐹 ∗13 + 3,6 × 1010 𝐹 ∗ 32
𝑷∗ = 𝟔𝟕𝟓𝟎, 𝟓𝟓 𝑷𝒂
Exercice 3
Le sujet sous la forme standard devient :
3𝑥1 + 4𝑥2 + 5𝑥3 + 𝑒1 = 40
{ 𝑥1 + 𝑥2 + 𝑥3 + 𝑎1 = 9
7𝑥1 + 4𝑥2 + 4𝑥3 − 𝑒2 + 𝑎2 ≥ 42
Z = 3x1 + 2x2 + 4x3 − Pa1 − Pa2 avec
a1 =9-x1 − x2 − x3
a2 =42-7x1 − 4x2 − 4x3 + e2 Alors Z devient
Z = 3x1 + 2x2 + 4x3 − P(9 − x1 − x2 − x3 ) − P(42-7x1 − 4x2 − 4x3 + e2 )
Z = 3x1 + 2x2 + 4x3 − 9P + Px1 + Px2 + 𝑃𝑥3 − 42𝑃+7𝑃𝑥1 − 4𝑃𝑥2 − 4𝑃𝑥3 − 𝑃𝑒2
Z= (3+P+7P)𝑥1 +(2+P+4P)𝑥2 +(4+P+4P)𝑥3 -9P-42P-P𝑒2
Z= (3+8P)𝑥1 +(2+5P)𝑥2 +(4+5P)𝑥3 -51P-P𝑒2
Tableau 0

𝑥1 𝑥2 𝑥3 ° 𝑒2 ° 𝑎1 c R
𝑒1 3 4 5 1 0 0 0 40 40
= 13,33
3
𝑎1 1 1 1 0 0 1 0 9 9
=9
1
𝑎1 7 4 4 0 1 0 1 42 42
=6
7
∆ 3+8P 2+5P 4+5P 0 -P 0 0 -51P
Tableau 1
𝑥1 𝑥2 𝑥3 ° 𝑒2 ° ° c R

𝑒1 0 16 23 1 3 0 22 40
= 13,33
7 7 7 3
𝑎1 0 3 3 0 1 1 3 9
=9
7 7 7 1
𝑥1 1 4 4 0 1 0 42 42
=6 =6
7 7 7 7 7
∆ 0 (2+5P)/7 (16+5P)/7 0 -P 0 -18P/3P
Tableau 2
𝑥1 𝑥2 𝑥3 ° 𝑒2 ° ° c R

𝑒1 0 0 1 1 −1 6 6
=1
3 1
𝑥2 0 1 1 0 1 7 7
=7
3 1
𝑥1 1 0 0 0 −1 2 2
=∞
3 0
∆ 0 0 2 0 1 -20
3

Tableau 3
° ° ° 𝑒1 𝑒2 c R

𝑥3 0 0 1 1 −1 6 -18
3
𝑥2 0 1 0 -1 2 1 3
3 2
𝑥1 1 0 0 0 −1 2 -6
3
∆ 0 0 0 -2 1 -32

Tableau 1’
𝑥1 𝑥2 𝑥3 ° 𝑒2 ° c R

𝑒1 0 16 23 1 3 0 22 40
7 7 7 16/7
= 13,33
𝑎1 0 3 3 0 1 1 3 3
=7
7 7 7 3/7
𝑥1 1 4 4 0 1 0 42 21
− =6
7 7 7 7 2
∆ 0 (2+5P)/7 (16+5P)/7 0 (3+P)/3 0 -18P/3P

Tableau 2’
° 𝑥2 ° ° ° R

𝑥3 0 1 1 1 0 0 13
2 2 2
𝑥2 0 3 0 −3 1 1 3
2 2 2
𝑥1 1 1 0 −1 0 0 5
2 2 2
∆ 0 −3 0 −1 0 0
2 2

L’optimun est atteint et l’itération est terminée d’où


5 13
X1*=2 ; X2*=0 ; X3*= 2

Et y*=33,5
Code MATLAB
Script
A=[3,4,5,1,0; 1,1,1,0,0; 7,4,4,0,-1];
b=[40,9,42];
c=-[3,2,4,0,0];

nma_simplex(A,b,c,true);

function tab = nma_simplex(A,b,c,debug)


% DESCRIPTION
% Dans ce programme, nous créons la fonction nommée :
% function [A,b,c]=nma_simplex(A,b,c)
% cette fonction implémente les matrices de l'algorithme de simplex.
% elle accepte les matrices A, b et c comme définit dans notre
% document et génère tous les tableaux de simplex et retourne le tableau
% final dans lequel l'utilisateur peut lire la valeur maximale ou minimale
% de la fonction objective et les valeurs optimales des vecteurs x
% directement

% Elle exécute les phases 1 et phase 2 du tableau automatiquement


%
% FONCTIONNEMENT
% l'utilisateur doit dabord convertir toutes les inéquation en équation en
% introduisant les variables d’écart correspondants. il obtient une
% équation de la forme Ax=b avec :
% A : la matrice d'entré
% b: le vecteur de sortie
% on introduit enfin le vecteur c qui représente les coefficients de la
% fonctin objective.
% c : matrice d'optimisation
% NB : s'il s'agit d'une maximisation on multiplie c par moins (-)et s'il
% s'agit d'ume minimisation on écrit simplement c sans multiplier par (-)

validate_input(A,b,c);

[A,b] = make_phase_one(A,b,debug);
tab = simplex(A,b,c,debug,'phase 2');
end
%==========================
function [A,b] = make_phase_one(A,b,debug)
[m,n] = size(A);
tab = zeros(m+1,n+m+1);
tab(1:m,1:n) = A;
tab(end,n+1:end-1) = 1;
tab(1:m,end) = b(:);
tab(1:m,n+1:n+m) = eye(m);

if debug
fprintf('>>>>Tableau de Simplexe [phase 1]\n');
disp(tab);
end

for i = 1:m % met tous les variables à l'intérieur de la ligne zero


tab(end,:) = tab(end,:)-tab(i,:);
end

tab = simplex(tab(1:m,1:n+m),tab(1:m,end),tab(end,1:n+m),...
debug,'phase 1');

A = tab(1:m,1:n);
b = tab(1:m,end);

end
%=================================
function tab = simplex(A,b,c,debug,phase_name)
[m,n] = size(A);
tab = zeros(m+1,n+1);
tab(1:m,1:n) = A;
tab(m+1,1:n) = c(:);
tab(1:m,end) = b(:);

keep_running = true;
while keep_running
if debug

fprintf('*****************************************************************\n')
;
fprintf('Tableau de Simplexe [%s] \n',phase_name);
disp(tab);
end

if any(tab(end,1:n)<0)% Vérifier s'il y a un coefficient de coût négatif.


[~,J] = min(tab(end,1:n)); % trouver le coefficient le plus négatif
% véfier si la colonne correspondante est non bornée
if all(tab(1:m,J)<=0)
error('probleme non bornée. tous les entrées doivent être <= 0 dans
la colonne %d',J);
%faire les opérations de ligne et mettre tous les éléments de la
%colonne à du pivot à 0, sauf le pivot

else
pivot_row = 0;
min_found = inf;
for i = 1:m
if tab(i,J)>0
tmp = tab(i,end)/tab(i,J);
if tmp < min_found
min_found = tmp;
pivot_row = i;
end
end
end
if debug
fprintf('la ligne du pivaut est %d\n',pivot_row);
end
%normaliser
tab(pivot_row,:) = tab(pivot_row,:)/tab(pivot_row,J);
%mettre tous les entrées de la colonne J à 0 .
for i=1:m+1
if i ~= pivot_row
tab(i,:)=tab(i,:)-sign(tab(i,J))*...
abs(tab(i,J))*tab(pivot_row,:);
end
end
end
else
keep_running=false;
end
end
% fonction interne qui trouve les vecteurs de base actuel
function current_x = get_current_x()
current_x = zeros(n,1);
for j=1:n
if length(find(tab(:,j)==0))==m
idx= tab(:,j)==1;
current_x(j)=tab(idx,end);
end
end
end
end
%==========================
function validate_input(A,b,c)
if ~ismatrix(A)
error('A doit être une matrice');
end

if ~isvector(b)
error('b doit être un vecteur');
end
if ~isvector(c)
error('c doit être un vecteur');
end

[m,n]=size(A);
if rank(A) <m
error('le rang de A doit être égale au nombre de ligne de A');
end

if length(b) ~= m
error('b doit avoir la même taille que le nombre de ligne de A');
end
if length(c) ~= n
error('c oit avoir la même taille que le nombre de colonne de A');
end
end
Résultat obtenu

>> AgorithmSsimplexe

>>>>Tableau de Simplexe [phase 1]

3 4 5 1 0 1 0 0 40

1 1 1 0 0 0 1 0 9

7 4 4 0 -1 0 0 1 42

0 0 0 0 0 1 1 1 0

*****************************************************************

Tableau de Simplexe [phase 1]

3 4 5 1 0 1 0 0 40

1 1 1 0 0 0 1 0 9

7 4 4 0 -1 0 0 1 42

-11 -9 -10 -1 1 0 0 0 0

la ligne du pivaut est 3

*****************************************************************

Tableau de Simplexe [phase 1]

0 2.2857 3.2857 1.0000 0.4286 1.0000 0 -0.4286 22.0000

0 0.4286 0.4286 0 0.1429 0 1.0000 -0.1429 3.0000

1.0000 0.5714 0.5714 0 -0.1429 0 0 0.1429 6.0000

0 -2.7143 -3.7143 -1.0000 -0.5714 0 0 1.5714 66.0000

la ligne du pivaut est 1

*****************************************************************

Tableau de Simplexe [phase 1]

0 0.6957 1.0000 0.3043 0.1304 0.3043 0 -0.1304 6.6957

0 0.1304 0 -0.1304 0.0870 -0.1304 1.0000 -0.0870 0.1304

1.0000 0.1739 0 -0.1739 -0.2174 -0.1739 0 0.2174 2.1739


0 -0.1304 0 0.1304 -0.0870 1.1304 0 1.0870 90.8696

la ligne du pivaut est 2

*****************************************************************

Tableau de Simplexe [phase 1]

0 0 1.0000 1.0000 -0.3333 1.0000 -5.3333 0.3333 6.0000

0 1.0000 0 -1.0000 0.6667 -1.0000 7.6667 -0.6667 1.0000

1.0000 0 0 0 -0.3333 0 -1.3333 0.3333 2.0000

0 0 0 0 0.0000 1.0000 1.0000 1.0000 91.0000

*****************************************************************

Tableau de Simplexe [phase 2]

0 0 1.0000 1.0000 -0.3333 6.0000

0 1.0000 0 -1.0000 0.6667 1.0000

1.0000 0 0 0 -0.3333 2.0000

-3.0000 -2.0000 -4.0000 0 0 0

la ligne du pivaut est 1

*****************************************************************

Tableau de Simplexe [phase 2]

0 0 1.0000 1.0000 -0.3333 6.0000

0 1.0000 0 -1.0000 0.6667 1.0000

1.0000 0 0 0 -0.3333 2.0000

-3.0000 -2.0000 0 4.0000 -1.3333 24.0000

la ligne du pivaut est 3

*****************************************************************

Tableau de Simplexe [phase 2]

0 0 1.0000 1.0000 -0.3333 6.0000


0 1.0000 0 -1.0000 0.6667 1.0000

1.0000 0 0 0 -0.3333 2.0000

0 -2.0000 0 4.0000 -2.3333 30.0000

la ligne du pivaut est 2

*****************************************************************

Tableau de Simplexe [phase 2]

0 0.5000 1.0000 0.5000 0 6.5000

0 1.5000 0 -1.5000 1.0000 1.5000

1.0000 0.5000 0 -0.5000 0 2.5000

0 1.5000 0 0.5000 0 33.5000

Vous aimerez peut-être aussi