begin process at 2012 02 12 04:40:00
  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 :5 989

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 UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture CRIBLE D'ERATOSTHÈNE OPTIMISÉ par pgl10
Source avec Zip Source avec une capture OPTIMISATION DE CALCULS (WIN64) par BruNews
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

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...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 3,120 sec (4)

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