Méthode du nombre d'or
La méthode du nombre d'or est un algorithme d'optimisation, c'est-à-dire de recherche de l'extremum d'une fonction, dans le cas d'une fonction unimodale, c'est-à-dire dans lequel l'extremum global recherché est le seul extremum local. S'il existe plusieurs extrema locaux, l'algorithme donne un extremum local, sans qu'il soit garanti que ce soit l'extremum absolu. Cet algorithme, ainsi que la méthode de Fibonacci, ont été mis au point par le statisticien Kiefer[1],[2].
Principe de base
Considérons une fonction réelle ƒ. On a calculé sa valeur en trois points, x1, x2 et x3, avec x1 < x2 < x3 ; ceci est représenté sur le dessin ci-contre, avec y = ƒ(x).
Supposons que l'on ait ƒ(x2) < ƒ(x1) et ƒ(x2) < ƒ(x3) ; comme la fonction est unimodale, on sait que le minimum est dans l'intervalle ]x1 ; x3[. On « sonde » la fonction en prenant un point x4 dans cet intervalle, afin de réduire l'intervalle de recherche.
On peut prendre x4 dans ]x1 ; x2[ ou bien dans ]x2 ; x3[ ; il est plus « rentable » de le prendre dans l'intervalle le plus grand, ici ]x2 ; x3[. Selon la valeur de ƒ(x4), alors :
- cas a : ƒ(x4a) > ƒ(x2), on sait que le minimum se trouve dans ]x1 ; x4[ ;
- cas b : ƒ(x4b) < ƒ(x2), on sait que le minimum se trouve dans ]x2 ; x3[.
On procède ensuite de manière récursive. L'algorithme n'est pas très différent d'une recherche dichotomique, mais le choix des points utilise le nombre d'or plutôt que le nombre 2.
La mise en œuvre de la méthode doit prévoir le cas où ƒ(x4) = ƒ(x2), et notamment le cas extrême où la fonction est uniforme sur ]x1 ; x3[ ; ce n'est pas un cas unimodal, donc hors des hypothèses de l'algorithme, mais la recherche est en général lancée sans connaître le nombre de modes de la fonction.
Choix de la sonde
La particularité de la méthode est de choisir la sonde x4 telle que les deux segments possibles, ]x1 ; x4[ ou ]x2 ; x3[, aient la même longueur. Sinon, on pourrait par « malchance » avoir une convergence lente. On choisit donc
- x4 - x1 = x3 - x2
soit
- x4 = x1 + (x3 - x2).
Si l'on désire toujours garder la même proportion entre la largeur du segment à l'étape i et celle à l'étape i + 1, alors dans le cas a, il faut
ou, avec les notations introduites sur la figure :
et dans le cas b :
En éliminant c dans ces équations, on obtient
ce qui donne le nombre d'or φ :
Si l'intervalle de départ est [x1 ; x3], alors la première sonde est prise en
- .
Algorithme
Il est possible de coder la méthode du nombre d'or de façon itérative ou récursive.
Voici un exemple de code écrit en python qui utilise la manière itérative
# Golden-section search
# Algorithme permettant de trouver le minimum d'une fonction continue sur un intervalle donné
import math
phi = (1 + math.sqrt(5)) / 2 # Nombre d'or
def f(x): # On met une fonction dont on cherche le minimum
return 0.2*x**3 - 6*x + 8
def methode_du_nombre_dor(a, b, epsilon): # a et b borne de l'intervalle dans le sens croissant, epsilon la précision de l'intervalle
if a >= b: # Verification de l'intervalle
return "L'intervalle doit être dans le sens croissant."
# Initialisation des points intérieurs
c = b + (a - b) / phi
d = a + (b - a) / phi
while abs(b - a) > epsilon: # Tant que la precision n'est pas atteinte :
if f(c) < f(d): # Si f(x) est plus petit que f(d), d devient le nouveau b
b = d
else: # Sinon c devient le nouveau a
a = c
# On met ensuite à jour les points c et d
c = b - (b - a) / phi
d = a + (b - a) / phi
return (a + b) / 2 # On retourne le millieu de l'intervalle final
# Test de la fonction
# Ps : Après étude, on sait que cette fonction n'admet qu'un minimum sur l'intervalle [0, 5]
print(methode_du_nombre_dor(0, 5, 0.001)) # On cherche le minimum de f(x) sur l'intervalle [0, 5] avec une précision de 0.001
# On obtient environ 3.16, ce qui effictivement le mininum de la fonction f sur cet intervalle
Notes et références
- (en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « Golden section search » (voir la liste des auteurs).
- ↑ (en) J. Kiefer, « Sequential Minimax Search for a Maximum », Proceedings of the American Mathematical Society, vol. 4, no 3, , pp. 502–506 (DOI 10.2307/2032161)
- ↑ (en) Mordecai Avriel et Douglass J. Wilde, « Optimal Search for a Maximum with Sequences of Simultaneous Function Evaluations », Management Science, vol. 12, no 9, , pp. 722–31 (JSTOR 2627949)
- Portail des mathématiques