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
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Forum
ALGORITHMESALGORITHMES par whayoub
Cliquez pour lire la suite par whayoub
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|