Vous êtes sur la page 1sur 17

Méthodes d’optimisation

numérique
Utilisation d’Excel

GIE2-ED1

P103-193 CL215
S113 CL215

Rendu le vendredi 28 Octobre 2016

P103-193 – S113 – GIE2ED1 1


Introduction

Le but de cette méthode est de déterminer le minimum ou le maximum d’une fonction


unimodale d’une seule variable x, sans passer par un calcul de dérivée.
Ces méthodes ont pour avantage principal d’être toujours utilisables, mais peuvent
être assez lentes.

On se place dans l’hypothèse suivante :


- f unimodale sur l’intervalle [𝒂; 𝒃] d’étude

Le principe est simple : au cours d’optimisations successives, on réduit l’intervalle qui


encadre 𝒙∗ (l’abscisse telle que l’optimum est atteint).

P103-193 – S113 – GIE2ED1 2


Partie I – Préliminaires

● Introduction :

Dans cette partie, nous allons nous intéresser à la méthode de tracé employée pour la
représentation graphique de f sur l’intervalle [𝑎; 𝑏].
En effet, Excel ne disposant pas de fonctionnalité permettant le tracé direct d’une fonction
sur un intervalle donné, nous allons générer un tableau de valeurs de f afin de pouvoir la
tracer.

● Méthode employée :

Nous avons tout d’abord entré la fonction étudiée f dans un module de classe VBA. Nous lui
communiquons, par l’intermédiaire de la feuille de calcul, les bornes de l’intervalle ainsi que
le nombre de points voulus.
Ensuite, nous avons demandé au logiciel de générer un tableau de valeurs dans la feuille
« annexe » de notre fichier de la manière suivante :

● Notice d’utilisation d’Excel pour le tracé de f :

Pour tracer la fonction f, nous allons suivre les étapes suivantes :


1) Dans le module de classe VBA, entrer l’expression de la fonction f étudiée (ici par
2𝑥 2 −1
exemple la fonction . La nommer f (le programme suivant est fait pour
𝑥 2 +1
fonctionner uniquement avec la fonction f).

P103-193 – S113 – GIE2ED1 3


2) Ensuite, entrer les valeurs de a, b et le nombre de points souhaités dans les cases
prévues à cet effet :

3) Retourner dans VBA et exécuter le code (valider l’exécution du Sub tracé). Le


tableau de valeurs apparait donc dans la fenêtre « annexe ».

4) Ensuite, si le nombre de points sélectionnés vaut 100, alors l’étape est terminée, le
graphe s’affiche sur la page 1. Sinon, faire un clic droit sur le graphe partiel (seul les
100 premiers points sont tracés) en page 1 et cliquer sur « sélection des données ».
Sélectionner l’ensemble du tableau généré en page « annexe » et valider.

P103-193 – S113 – GIE2ED1 4


5) On obtient le tracé de la fonction f :

Cette notice est utilisable pour chacune des méthodes (section d’or et Fibonacci).

● Attention :

Note : Si l'on souhaite faire une étude de maximum, on prendra soin


d'entrer la fonction "-f" dans l'exécuteur VBA.
Le choix de l’optimisation est donc donné à titre indicatif.

P103-193 – S113 – GIE2ED1 5


Partie II – Méthode de la section d’or

● Principe de la méthode :

Le principe de cette méthode est le suivant :

- initialement, nous étudions la fonction f sur un intervalle [𝑎0 ; 𝑏0 ]. On sait que 𝑥 ∗ se


trouve dans cet intervalle car ∃𝑐 ∈ [𝑎0 ; 𝑏0 ] \ (𝑓(𝑐) ≤ 𝑓(𝑎0 ) et 𝑓(𝑐) ≤ 𝑓(𝑏0 )).

- A chaque itération, on va réduire l’intervalle d’un rapport constant 𝝎 tel que, si l’on
note 𝐿𝑛 la longueur de l’intervalle à l’itération 𝑛 ∈ 𝑁, on a :
√5 − 1 𝐿𝑛
𝜔= =
2 𝐿𝑛−1

- On pose alors :
𝒙 = 𝒂 + (𝟏 − 𝝎) × 𝑳𝟎
{ 𝟎
𝒚𝟎 = 𝒃 − (𝟏 − 𝝎) × 𝑳𝟎

- Si 𝑓(𝑥0 ) < 𝑓(𝑦𝑂 ), alors [𝑎1 ; 𝑏1 ] = [𝑎0 ; 𝑦0 ]


Sinon, si 𝑓(𝑥0 ) > 𝑓(𝑦𝑂 ), alors [𝑎1 ; 𝑏1 ] = [𝑥0 ; 𝑏0 ]

- On répète ensuite les calculs à partie de l’étape présentée au troisième tiret à chaque
itération et on s’arrête lorsque l’on a atteint la précision 𝜀 souhaitée, c’est-à-dire lorsque la
longueur de l’intervalle étudié 𝐿𝑛 est inférieure à 𝜀.

- On sait que, à chaque itération, 𝒙∗ ∈ [𝒂𝒏 ; 𝒃𝒏 ].

- Finalement, on obtient un encadrement de 𝑥 ∗ à la précision 𝜀 souhaitée.

● Algorithme de la méthode :

L’algorithme de la méthode est :

Lire(a, b, f(x), eps)


omega ← (sqr(5)-1)/2
L←b-a
x ← a + (1 – omega)*L
y ← b - (1 – omega)*L
Tant que L>eps
Calculer f(x), f(y)
Pour i = 0 jusqu’à N
Si f(x)<f(y)
Alors b ← y
L←b-a

P103-193 – S113 – GIE2ED1 6


y←x
x ← a + (1 – omega)*L
Calculer f(x)
Sinon a ← x
L←b-a
x←y
y ← b - (1 – omega)*L
Calculer f(y)
Fin tant que

Le code en VB inclus l’affichage des données à chaque itération dans un tableau sous Excel.
Ce tableau comporte 6 colonnes et N+1 lignes et est sous la forme :

a b x y f(x) f(y) L

Pour cela, nous utilisons la fonction tabeau(i,j).

En VBA, nous obtenons le code suivant :

P103-193 – S113 – GIE2ED1 7


● Notice d’utilisation de la feuille de calcul Excel :

1) Les valeurs des bornes de l’intervalle [𝑎; 𝑏] ont normalement déjà été rentrées pour le
tracé de la fonction f étudiée (voir partie I). On entre alors la précision souhaitée.

2) Nous sélectionnons l’ensemble des colonnes a, b, x, y, f(x), f(y) et L ainsi que les 100
lignes du tableau vide. Nous appuyons sur la touche F2 puis plaçons le curseur dans
la barre de formule. Nous cliquons ensuite sur CTRL+MAJ+Enter et la liste des
résultats de chaque itération s’affiche donc (ou se met à jour si d’autres calculs
avaient déjà été effectués auparavant).
Un code couleur permet de vérifier que l’on a bien atteint la précision souhaitée. En
effet, la mise en forme conditionnelle des cellules de la dernière colonne du tableau
permet d’afficher en rouge les valeurs de L supérieures à 𝜀 et en vert la valeur
inférieure à 𝜀.
Dans le cadre d’un fonctionnement normal, seule une valeur s’affiche en vert car
l’algorithme est programmé pour s’arrêter dès que 𝐿 > 𝜀.

P103-193 – S113 – GIE2ED1 8


3) On lit ensuite l’intervalle encadrant 𝑥 ∗ dans le cadre prévu à cet effet.
En effet, la fonction entrée dans ces cellules permet de récupérer la dernière valeur
des colonnes a et b, ce qui permet de récupérer toujours ces valeurs peu importe le
nombre d’itérations que fera l’algorithme VBA.

P103-193 – S113 – GIE2ED1 9


Partie III – Méthode de Fibonacci

● Principe de la méthode :

Le principe de cette méthode est le suivant :

- Initialement, nous étudions la fonction f sur un intervalle [𝑎0 ; 𝑏0 ]. On sait que 𝑥 ∗ se


trouve dans cet intervalle car ∃𝑐 ∈ [𝑎0 ; 𝑏0 ] \ (𝑓(𝑐) ≤ 𝑓(𝑎0 ) et 𝑓(𝑐) ≤ 𝑓(𝑏0 )).

- Avant de commencer les calculs, nous fixons un nombre d’itérations N que l’on
connait à partir de la relation :
𝑳𝟎
𝑭𝑵 ≥
𝜺
Avec 𝐿0 la longueur de l’intervalle [𝑎0 ; 𝑏0 ], 𝜀 la précision souhaitée et 𝐹𝑁 le Nième terme de la
suite de Fibonacci.

- A chaque itération, on va réduire l’intervalle [𝒂, 𝒃] d’un rapport variable 𝝉 tel que,
si l’on note 𝐿𝑛 la longueur de l’intervalle à l’itération 𝑛 ∈ 𝑁, on a :
𝑳𝒏 𝑭𝑵−𝒏
𝝉= =
𝑳𝒏−𝟏 𝑭𝑵−𝒏+𝟏
Avec (𝐹𝑛 ) la suite de Fibonacci.

- On posera alors :
𝒙 = 𝒂𝒏 + (𝑳𝒏 − 𝑳𝒏+𝟏 )
{ 𝒏
𝒚𝒏 = 𝒃𝒏 − (𝑳𝒏 − 𝑳𝒏+𝟏 )

- Si 𝒇(𝒙𝒏 ) < 𝒇(𝒚𝒏 ), alors [𝒂𝒏+𝟏 ; 𝒃𝒏+𝟏 ] = [𝒂𝒏 ; 𝒚𝒏 ]


Sinon, si 𝒇(𝒙𝒏 ) > 𝒇(𝒚𝒏 ), alors [𝒂𝒏+𝟏 ; 𝒃𝒏+𝟏 ] = [𝒙𝒏 ; 𝒃𝒏 ]

- On sait que, à chaque itération, 𝒙∗ ∈ [𝒂𝒏 ; 𝒃𝒏 ].

- On répète ensuite les calculs à partie de l’étape présentée au quatrième tiret à


chaque itération et on s’arrête à la Nième itération.

Finalement, on obtient un encadrement de 𝑥 ∗ à la précision 𝜀 souhaitée.

● Remarques :

1. Il faudra au préalable avoir défini une fonction permettant de calculer tous les termes
de la suite de Fibonacci.

2. Il faudra également avoir mis au point une fonction calculant le nombre d’itérations
nécessaires pour atteindre la précision 𝜀 souhaitée.

3. On simplifiera au préalable l’expression (𝐿𝑛 − 𝐿𝑛+1 ).

1
P103-193 – S113 – GIE2ED1
0
● Calculs et algorithmes préliminaires :

Calcul des termes de la suite de Fibonacci

La suite de Fibonacci est définie de la manière suivante :


𝐹0 = 𝐹1 = 1
{
∀𝑛 ≥ 2, 𝐹𝑛 = 𝐹𝑛−1 + 𝐹𝑛−2

L’algorithme utilisé sera le suivant :


fibonacci(n)
Si n=0
Alors renvoyer 1
Si n=1
Alors renvoyer 1
Sinon
Renvoyer fibonacci(n-1)+fibonacci(n-2)
Fin si

En VBA, on obtient le code suivant (voir fichier Excel joint) :

Calcul du nombre d’itérations nécessaire

Le nombre d’itérations nécessaire est défini tel que :


𝑳𝟎
𝑭𝑵 ≥
𝜺

L’algorithme utilisé sera :


nbrit(a,b,eps)
i=0
Tant que fibonacci(i)<=(b-a)/eps
I ← ii+1
Fin tant que

En VBA, on obtient le code suivant (voir fichier Excel joint) :

1
P103-193 – S113 – GIE2ED1
1
Simplification de 𝑳𝒏 − 𝑳𝒏+𝟏

Afin de simplifier l’algorithme utiliser, nous allons simplifier cette expression de la manière
suivante :
𝐹𝑁−𝑛
𝐿𝑛 = 𝐿
𝐹𝑁−𝑛+1 𝑛−1
(d’après le taux de réduction 𝜏 donné dans le cours)
On effectue le changement d’indice 𝑖 + 1 = 𝑛 :
𝐹𝑁−𝑖−1
𝐿𝑖+1 = 𝐿
𝐹𝑁−𝑖 𝑖
Alors :
𝑭𝑵−𝒏−𝟏
𝑳𝒏 − 𝑳𝒏+𝟏 = 𝑳𝒏 − 𝑳
𝑭𝑵−𝒏 𝒏

● Méthode de Fibonacci :

Algorithme de la méthode

L’algorithme de la méthode est :

Lire(a, b, fibonacci(n), f(x), N)


L←b-a
x ← a + (L - fibonacci(N - 1) / fibonacci(N) * L)
y ← b - (L - fibonacci(N - 1) / fibonacci(N) * L)
Calculer f(x), f(y)
Pour i = 0 jusqu’à N
Si f(x)<f(y)
Alors b ← y
y←x
Sinon a ← x
x←y
Fin si
Calculer f(x)
Calculer f(y)
L←b-a
x ← a + (L - fibonacci(N - i - 1) / fibonacci(N - i) * L)
y ← b - (L - fibonacci(N - i - 1) / fibonacci(N - i) * L)
Fin pour

1
P103-193 – S113 – GIE2ED1
2
Le code en VB inclus l’affichage des données à chaque itération dans un tableau sous Excel.
Ce tableau comporte 7 colonnes et N+1 lignes et est sous la forme :

a b x y f(x) f(y) taux réduc

Pour cela, nous utilisons la fonction tabeau(i,j).

Code de la méthode

1
P103-193 – S113 – GIE2ED1
3
Autre codage testé

Nous avons également essayé de coder cette méthode en utilisant un remplissage


automatique des colonnes du tableau sur une feuille annexe nommée « essai ». Cependant,
cette méthode fait appel à un trop grand nombre de calculs et engendre une erreur 28 (plus
d’espace de stockage) : nous n’avons donc pas retenu cette solution car nous n’avons pas
réussi à régler le problème de stockage.

1
P103-193 – S113 – GIE2ED1
4
1
P103-193 – S113 – GIE2ED1
5
● Notice d’utilisation de la feuille de calcul :

1) Les valeurs des bornes de l’intervalle [𝑎; 𝑏] ont normalement déjà été rentrées pour le
tracé de la fonction f étudiée (voir partie I). On entre alors la précision souhaitée. Le
nombre d’itérations nécessaire est alors automatiquement calculé à l’aide de la
fonction Nbrit créée dans VBA.

2) Nous sélectionnons l’ensemble des colonnes a, b, x, y, f(x), f(y) et taux réduc ainsi
que les 100 lignes du tableau vide. Nous appuyons sur la touche F2 puis plaçons le
curseur dans la barre de formule. Nous cliquons ensuite sur CTRL+MAJ+Enter et le
tableau de toutes les itérations s’affiche.

1) On lit ensuite l’intervalle encadrant 𝑥 ∗ dans le cadre prévu à cet effet.


En effet, la fonction entrée dans ces cellules permet de récupérer la dernière valeur
des colonnes a et b, ce qui permet de récupérer toujours ces valeurs peu importe le
nombre d’itérations que fera l’algorithme VBA.
De plus, nous pouvons vérifier que cet encadrement vérifie bien la condition de
précision. Une mise en forme conditionnelle de la cellule « vérification précision »
1
P103-193 – S113 – GIE2ED1
6
permet d’afficher la longueur de l’intervalle solution : si celle-ci est plus petite que la
précision, alors le résultat s’affiche en vert. Sinon, il s’affiche en rouge.

1
P103-193 – S113 – GIE2ED1
7

Vous aimerez peut-être aussi