begin process at 2010 02 09 20:41:26
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > OPTIMISATION PAR GOLDEN SECTION SEARCH À UNE DIMENSION

OPTIMISATION PAR GOLDEN SECTION SEARCH À UNE DIMENSION


 Information sur la source

Note :
Aucune note
Catégorie :Maths & Algorithmes Classé sous :optimisation, nonderivatives, goldensearch Niveau :Débutant Date de création :06/02/2006 Date de mise à jour :09/05/2006 22:33:57 Vu :4 623

Auteur : hitcher

Ecrire un message privé
Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

 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

Source avec Zip ROMBERG INTEGRATION
DAUBCHIES D4 WAVELET : TRANSFORM ET INVERSE TRANSFORM
Source avec Zip ESTIMATION LOI STABLE (MC KULLOCH) POUR UN DLL POUR EXCEL

 Sources de la même categorie

Source avec Zip OPERATION SUR LES MATRICES CARREES AVEC CLASSE GENERIQUE par chouhad
Source avec une capture OPÉRATIONS SUR MATRICES C++ par Minilogus
[DEV-C++] CALCUL DE LA RACINE CARRÉE D'UN RÉEL par Jhep
PROGRAMME QUI CALCUL LE PPCM ET LE PGCD par AnoSantino
EVALUER UNE EXPRESSION MATHÉMATIQUE par begueradj

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture ALGORITHMES D'OPTIMISATION NON LINÉAIRE: DESCENTE DE GRADIEN... par Pistol_Pete
Source avec Zip ALGORITHME GÉNÉTIQUE RCPSP par pclover
Source avec Zip Source avec une capture TEST VITESSE SELON TYPE (WIN32, WIN64) par BruNews
Source avec Zip Source avec une capture IMPLÉMENTATION DE MINIMUM SPANNING TREE POUR UNE SOCIÉTÉ D'A... par elkasimi2007
Source avec Zip Source avec une capture OPTIMISATIONS DE WINDOWS XP PAR LE REGISTRE (XPERIENCE) par wald39

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


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 &#224; tous Je recherche la m&#233;thode la plus rapide pour copier un tableau 3D dans un tableau 1D, en &#233;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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,530 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales