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
[WF4] PASSAGE D'ARGUMENTS LITERAL, VISUALBASICVALUE OU LAMBDAVALUE?[WF4] PASSAGE D'ARGUMENTS LITERAL, VISUALBASICVALUE OU LAMBDAVALUE? par JeremyJeanson
Avec la sortie de la RC de Visual Studio 2010, Microsoft a mis un peu les points sur leS i en ce qui concernait le passage d'arguments. Mais nous somme un certain nombre à avoir pris ce changement comme un coup dur. Pour résumer la situation : à la sortie...
Cliquez pour lire la suite de l'article par JeremyJeanson [RIA SERVICES] INCLUDE ET DOMAINDATASOURCE[RIA SERVICES] INCLUDE ET DOMAINDATASOURCE par Audrey
Dans un de mes articles précédents , j'avais parlé des DomainDataSource avec RIA Services dans le cas d'une interface Maître - Détail. Dans le même principe, je vais parler d'une autre manière de mettre en forme ce cas d'interface avec RIA Services. Et po...
Cliquez pour lire la suite de l'article par Audrey ZUNE : VERSION ZUNE SOFTWARE V 4.2 ET LA SOCIALISATIONZUNE : VERSION ZUNE SOFTWARE V 4.2 ET LA SOCIALISATION par ROMELARD Fabrice
Une des nouveautés de la version V 3.0 était l'apparition de l'onglet Social qui ne fonctionnait que si le MarketPlace était activé sur son poste. Cela limitait donc son intérêt, car hors du cadre commercial USA-CANADA, peu de monde trouva...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice PRATIQUE DE SILVERLIGHT PAR ERIC AMBROSIPRATIQUE DE SILVERLIGHT PAR ERIC AMBROSI par MPOWARE
Je viens de finir la lecture du dernier livre d'
Eric Ambrosi
éditions PEARSON
Son livre donne une approche pratique de Silverlight qui sera aussi bien comprise par le développeur que par le designeur.
Tous les aspects du développement RIA sont abor...
Cliquez pour lire la suite de l'article par MPOWARE APPRENDRE à DéVELOPPER POUR LES MOBILES AVEC LA NOUVELLE GéNéRATION .NETAPPRENDRE à DéVELOPPER POUR LES MOBILES AVEC LA NOUVELLE GéNéRATION .NET par odewit
2 déclinaisons de Silverlight et 2 déclinaisons de Mono permettent dorénavant (ou permettront prochainement) de développer des applications .NET mobiles pour les principales plates-formes du marché :
Silverlight pour Symbian, basé sur Silverlight 2...
Cliquez pour lire la suite de l'article par odewit
Forum
A PROPOS DE L'HEUR A PROPOS DE L'HEUR par nadianana
Cliquez pour lire la suite par nadianana
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|