Accueil > > > OPTIMISATION PAR GOLDEN SECTION SEARCH À UNE DIMENSION
OPTIMISATION PAR GOLDEN SECTION SEARCH À UNE DIMENSION
Information sur la source
Description
Cette méthode d'optimisation est relativement simple mais obtient de bon résultat sur des problêmes simple (sans minimum locaux). Son avantage principale avantage et qu'elle ne requiert pas la dérivé de la fonction étudiée comme dans la méthode du gradient (si elle est trop compliqué à calculé par exemple).
Source
- #include "iostream.h"
- #include "math.h"
- #include "Opti.h"
-
-
- int main()
- {
- double bas, haut, mid;
- double * Tab;
- Tab = new double[3];
- *Tab=1;
- *(Tab+1)=2;
- *(Tab+2)=-3;
-
- //l'optimisation nécessite 3 "first guess" , la fourchette moyenne est ici la moyenne des deux autres...
- bas=-4;
- haut=2;
- mid=(bas+haut)/2;
-
- Opti K(bas, haut, mid, Tab);
-
- cout << endl
- << K.Gsearch();
- cout << endl;
-
- delete [] Tab;
-
- return 0;
- }
-
- //voici le Opti.h
-
- #ifndef OPTI_H
- #define OPTI_H
-
- #include "math.h"
- #define Tol 0.000000001
- #define R 0.6180339 //golden section
- #define C (1-R)
- #define N 100 //max iter
-
- class Opti
- {
- public: double a;
- double b;
- double c; //valeur initiale d'optimisation
- double * para; //paramêtre additionnelle de la fonction à optimiser
-
- Opti(double A, double B, double M, double * Para)
- {
- a=A;
- b=B;
- c=M;
- para=Para;
- }
-
- //fonction à optimiser et à editer (ici f(x)=1/(x^k) + g
- //on intégre par rapport à x, k et g sont des paramêtres additionnelles
-
- double ff(double i){return (*para)*pow(i,2)+ *(para+1) * i + *(para+2);}
-
- //fin de la fonction
-
- double Gsearch()
- {
- double f1, f2, x0, x1, x2, x3;
- int n;
-
- n=0;
- x0=a;
- x3=c;
-
- if( fabs(c-b)>fabs(b-a) )
- {
- x1=b;
- x2 = b + C * (c - b);
- }
- else
- {
- x2 = b;
- x1 = b - C * (b - a);
- }
-
- f1 = ff(x1);
- f2 = ff(x2);
- while( fabs(x3-x0) > Tol*(fabs(x1)+fabs(x2)))
- {
- if(f2 < f1)
- {
- x0 = x1;
- x1 = x2;
- x2 = R * x1 + C * x3;
- f1 = f2;
- f2 = ff(x2);
- }
- else
- {
- x3 = x2;
- x2 = x1;
- x1 = R * x2 + C * x0;
- f2 = f1;
- f1 = ff(x1);
- }
- if(n>=N){x3=x0;}
- n++;
- }
-
- if(f1 < f2){return x1;}
- else{return x2;}
- }
- };
-
- #endif
#include "iostream.h"
#include "math.h"
#include "Opti.h"
int main()
{
double bas, haut, mid;
double * Tab;
Tab = new double[3];
*Tab=1;
*(Tab+1)=2;
*(Tab+2)=-3;
//l'optimisation nécessite 3 "first guess" , la fourchette moyenne est ici la moyenne des deux autres...
bas=-4;
haut=2;
mid=(bas+haut)/2;
Opti K(bas, haut, mid, Tab);
cout << endl
<< K.Gsearch();
cout << endl;
delete [] Tab;
return 0;
}
//voici le Opti.h
#ifndef OPTI_H
#define OPTI_H
#include "math.h"
#define Tol 0.000000001
#define R 0.6180339 //golden section
#define C (1-R)
#define N 100 //max iter
class Opti
{
public: double a;
double b;
double c; //valeur initiale d'optimisation
double * para; //paramêtre additionnelle de la fonction à optimiser
Opti(double A, double B, double M, double * Para)
{
a=A;
b=B;
c=M;
para=Para;
}
//fonction à optimiser et à editer (ici f(x)=1/(x^k) + g
//on intégre par rapport à x, k et g sont des paramêtres additionnelles
double ff(double i){return (*para)*pow(i,2)+ *(para+1) * i + *(para+2);}
//fin de la fonction
double Gsearch()
{
double f1, f2, x0, x1, x2, x3;
int n;
n=0;
x0=a;
x3=c;
if( fabs(c-b)>fabs(b-a) )
{
x1=b;
x2 = b + C * (c - b);
}
else
{
x2 = b;
x1 = b - C * (b - a);
}
f1 = ff(x1);
f2 = ff(x2);
while( fabs(x3-x0) > Tol*(fabs(x1)+fabs(x2)))
{
if(f2 < f1)
{
x0 = x1;
x1 = x2;
x2 = R * x1 + C * x3;
f1 = f2;
f2 = ff(x2);
}
else
{
x3 = x2;
x2 = x1;
x1 = R * x2 + C * x0;
f2 = f1;
f1 = ff(x1);
}
if(n>=N){x3=x0;}
n++;
}
if(f1 < f2){return x1;}
else{return x2;}
}
};
#endif
Historique
- 09 février 2006 22:10:05 :
- J'ai trouvé les erreurs qui empêchaient la compilation...
- 09 mai 2006 22:33:57 :
- La condition d'arrêt sur le nombre maximum d'itération a été déboggué.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Optimisation... :) [ par CodeNeo ]
Hello tout le monde !!Question ! Est ce que quelqu'un saurait comment raccourcir le code suivant ?bool __fastcall TForm1::InitBouton ( void ) { Spe
[C++] Optimisation de pile [ par guiguikun ]
optimisation [ par ifren ]
Comment est ce que je peux optimiser le temps d'execution de mon application, quel sont les differents type de pistesmerci soyant heureux faisant fort
optimisation affichage opengl [ par xian240482 ]
J'ai reussis a affiché un fichier .ASE , mais c'est lent! En cherchant un peu partout, j'ai trouvé plusieur voie :Les gll
optimisation de code [ par yakalelo ]
Salut J' aimerais optimiser un programme en langage C pour le faire tourner plus vite. Il est constitue principalement de conditions if-else. est ce
optimisation d un code asm [ par sajid_morad ]
salut tout le monde j aimerai bien savoir comment optimiser un code en assembleur ( le temps d execution des instruction le plus optimal ), et esqu il
systeme non lineaire+optimisation d'une fonction non lineaire [ par correcte ]
Bonjour,Je cherche un programme ecrit en c++ qui permet de resoudre un systeme d'equations non lineaire.Je cherche egalement un programme qui fait le
optimisation [ par arf63 ]
Salut j aimerai savoir s il y a moyen d optimiser ca avec un switch case je le maitrise moyenement si quelqu un pourait m aider if (iMat[iPosy][iPosx]
pb d'optimisation [ par pipow1 ]
Bonjour à tous Je recherche la méthode la plus rapide pour copier un tableau 3D dans un tableau 1D, en évitant bien sur de passer par u
optimisation de la memoire en c++ [ par ebooserge ]
salut a tous,voila j'ai une question un peu bete mais je me lance quand meme.lorsqu'on declare une variable a l'interieur d'une fonction qui appartien
|
Derniers Blogs
TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOURTECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOUR par ROMELARD Fabrice
Après un retour sur l'histoire des TechDays de Paris et le fait que ce soit le plus gros event MS au monde (du fait de sa gratuité), le président de MS France (Eric Boustoullier) a fait une présentation de la vision Microsoft pour les années à venir...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
WIN APIWIN API par omarino_007
Cliquez pour lire la suite par omarino_007
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|