Algorithmes d'optimisation non linéaire: descente de gradient, lm, bfgs, simplexe...

Description

Ce programme met en jeu plusieurs fonctions d'optimisation pour résoudre les problèmes de programmation non linéaire.
Le but est de trouver un minimum local dans la fonction à optimiser.

Différentes fonctions ont été implémentées. Toutes laissent le choix à l'utilisateur du nombre de paramètres à optimiser. Dans notre cas, nous nous situons en dimension 2 pour des problèmes de visualisation. On optimisera alors les coordonnées x et y de différentes fonctions:

Voici la déclaration mathématique de ce problème :

(x_Optimale,y_Optimale) = argmin f(x,y)

Puissance 2 : f(x,y) = x^2+y^2
Puissance 4 : f(x,y) = x^4+y^4
Rosenbrock : f(x,y) = (1-x^2)^2+100(y-x^2)^2
et d'autres fonctions...

Les fonctions d'optimisation utilisées sont les suivantes:
Descente de gradient, linéaire, suivant la méthode de Wolfe, BFGS, Levenberg-Marquadt (LM), Fletcher-Reeves avec relance périodique et Polack-Robiere

Ces fonctions utilisent toutes le gradient de la fonction f(x,y). Une dernière méthode a été implémenté pour la résolution de ce problème sans la connaissance du gradient de f: la méthode du simplexe (Nelder-Mead)

IHM : La navigation sur la carte a été facilité au maximum: (Manière Google Earth)

Click gauche/déplacé permet de se déplacer suivant x et y.
Mollette de la souris permet de zoomer/dé zoomer à l'endroit où se situe la souris.
Click droit, permet d'adapter l'échelle des couleurs à la fenêtre de visualisation.

Click gauche/déplacé sur le point initial permet de le déplacer et de lancer à nouveau la fonction d'optimisation sélectionnée.

Source / Exemple :


//********************************************************************************
//Vincent Morard 
//20 juin 2009
//http://ImAnalyse.free.fr
//Programme : Optimisation
//********************************************************************************

Conclusion :


L'exe est à renommer de Optimisation.ex en Optimisation.exe

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.