Ir al contenido


Foto

algoritmo genético


  • Por favor identifícate para responder
22 respuestas en este tema

#1 ifrit

ifrit

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 105 mensajes
  • LocationLa Habana, Cuba

Escrito 11 agosto 2010 - 02:06

Hola foro, alguien tiene referencia sobre algún código de algoritmo genético en c++? O tiene idea de donde puedo encontrar esta información.
  • 0

#2 robert01

robert01

    Advanced Member

  • Miembros
  • PipPipPip
  • 162 mensajes
  • LocationArgentina

Escrito 11 agosto 2010 - 06:58

Hola, hay en muchos sitios, sólo se requiere buscar. Por ejemplo, este está en visual c++

http://www.mygnet.ne...ciones.1563.zip

No se que clase de código necesitás pero buscando en google: algoritmo + genetico + c++

Saludos
  • 0

#3 ifrit

ifrit

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 105 mensajes
  • LocationLa Habana, Cuba

Escrito 12 agosto 2010 - 05:00

rubert01 muchas gracias por responder al tema, se que pareceré un vago , pero sucede que no tengo Internet abierto, te preguntaras entonces como accedo al foro y es que mi Internet es por lista blanca, solo habilitan algunas paginas, un tema demasiado complicado y que me molesta mucho como para explicarte en detalle aquí.
Te muestro un printScreen de cuando intento acceder a la pagina que me recomiendas.
Muchas gracias de todos modos...Solo postee por si alguien del foro tenia algunos ejemplos propios o había incursionado en el tema.
Saludos
  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 12 agosto 2010 - 10:29

GAUL
GALIB

Saludos.
  • 0

#5 ifrit

ifrit

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 105 mensajes
  • LocationLa Habana, Cuba

Escrito 12 agosto 2010 - 03:45

enecumene , muchas gracias por las paginas te comento que la de GAUL si la tenia habilitada en mi lista blanca, te cuento que no se ni cual es la lista blanca por eso tampoco hice una búsqueda en ella. La otra pagina que es AGLIB no la tengo hablitada. Mil gracias....y no te cuento mas desgracias con la internet porque para que?
;)
  • 0

#6 ifrit

ifrit

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 105 mensajes
  • LocationLa Habana, Cuba

Escrito 07 septiembre 2010 - 04:49

hola amigos ya tengo en mi pc las librerias Galib, pero segun he leido se compilan con visual c++ y yo tengo c++ builder, existe forma de compilar para c++ o algo por el estilo? gracias
  • 0

#7 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 07 septiembre 2010 - 08:40

No conozco esas librerías, pero no veo impedimento en el uso con un compilador de C/C++ distinto a Visual C.

Saludos.
  • 0

#8 ifrit

ifrit

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 105 mensajes
  • LocationLa Habana, Cuba

Escrito 15 septiembre 2010 - 02:10

Hola amigos con las librerías estoy trabajando casi casi, solo que me da un error, aquí mando la librería que me da el error y el código de como lo estoy utilizado según un ejemplo.



cpp
  1. GA2DBinaryStringGenome genome(width, height, Objective);


el error:
[C++ Error] Unit1.cpp(37): E2285 Could not find a match for 'GA2DBinaryStringGenome::GA2DBinaryStringGenome(int,int,void)'
  • 0

#9 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 15 septiembre 2010 - 03:35

[C++ Error] Unit1.cpp(37): E2285 Could not find a match for 'GA2DBinaryStringGenome::GA2DBinaryStringGenome(int,int,void)'


?? Seguro?, No será:

[C++ Error] Unit1.cpp(37): E2285 Could not find a match for 'GA2DBinaryStringGenome::GA2DBinaryStringGenome(int,int,void*)'


El problema es un error de tipos. Prueba así:


cpp
  1. GA2DBinaryStringGenome genome(width, height, (void*)Objective);


Si Objective es un puntero y si no lo es, entonces:


cpp
  1. GA2DBinaryStringGenome genome(width, height, (void*)&Objective);



Saludos.

  • 0

#10 ifrit

ifrit

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 105 mensajes
  • LocationLa Habana, Cuba

Escrito 16 septiembre 2010 - 05:41

hola escafandra, gracias por responder.
Te diré que el error es tal y cual te dije sin cambios.
Probando el primer ejemplo que me mandas me da el siguiente error:

[C++ Error] Unit1.cpp(37): E2235 Member function must be called or its address taken

Probando el segundo me da el siguiente error:

[C++ Error] Unit1.cpp(37): E2031 Cannot cast from 'float (* (_closure )(GAGenome &))(GAGenome &)' to 'void *'

Aquí te mando el .cpp para que puedas ver que Objetive es una función y ver si me puedes ayudar
  • 0

#11 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 16 septiembre 2010 - 06:47

¿Puedes poner los prototipos, es decir las definiciones de:?

GA2DBinaryStringGenome::GA2DBinaryStringGenome
y
Objective

Saludos.
  • 0

#12 ifrit

ifrit

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 105 mensajes
  • LocationLa Habana, Cuba

Escrito 16 septiembre 2010 - 07:23

Hola scafndra, aquí te envió nuevamente las definiciones de:
GA2DBinaryStringGenome::GA2DBinaryStringGenome
y
Objective
por favor chequea el adjunto.
  • 0

#13 ifrit

ifrit

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 105 mensajes
  • LocationLa Habana, Cuba

Escrito 16 septiembre 2010 - 07:27

Aquí también te mando la librería GaLib por si te sirve de ayuda.
Para compilar tuve que utilizar el make.exe que esta en el directorio:
C:\...carpeta donde esta instalado c++builder...\Bin\make.exe
la linea que le pase fue:
make -f makefile.bcc
La explicación mas detallada esta en el README de la propia librería. y el ejemplo que intento compilar es el 1.
Sin mas la librería adjunta.

Archivos adjuntos


  • 0

#14 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 16 septiembre 2010 - 10:44

No tengo tiempo para instalar las librerías y probar, pero trata de hacer un casting así:



cpp
  1. GA2DBinaryStringGenome genome(width, height, (GAGenome::Evaluator)Objective);




Saludos.
  • 0

#15 ifrit

ifrit

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 105 mensajes
  • LocationLa Habana, Cuba

Escrito 16 septiembre 2010 - 11:17

Gracias de todas formas scafandra, igual me estas ayudando...
lo que aun me salen errores aquí te lo expongo:

[C++ Error] Unit1.cpp(37): E2235 Member function must be called or its address taken

Saludos y gracias
  • 0

#16 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 16 septiembre 2010 - 11:35

[C++ Error] Unit1.cpp(37): E2235 Member function must be called or its address taken


¿Ese error te lo da en la línea?


cpp
  1. GA2DBinaryStringGenome genome(width, height, (GAGenome::Evaluator)Objective);



¿O lo da en otro lado?
¿Objetive es la función que he visto en tu código?

Saludos.
  • 0

#17 ifrit

ifrit

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 105 mensajes
  • LocationLa Habana, Cuba

Escrito 16 septiembre 2010 - 12:11

efectivamente el error me lo da en esa misma linea. y si Objetive es la función que esta declarada en el .cpp
aqui te adjunto una imagen del erro y la linea que me señala el builder
  • 0

#18 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 16 septiembre 2010 - 12:59

efectivamente el error me lo da en esa misma linea. y si Objetive es la función que esta declarada en el .cpp
aqui te adjunto una imagen del erro y la linea que me señala el builder


Bien. ¿Objetive está declarada antes de ser utilizada en la línea del error?.

Saludos.
  • 0

#19 ifrit

ifrit

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 105 mensajes
  • LocationLa Habana, Cuba

Escrito 16 septiembre 2010 - 01:08

Objetive esta declarada en el . h y en el .cpp esta definida después de la linea de error acá te dejo los .cpp



cpp
  1. //---------------------------------------------------------------------------
  2.  
  3. #include <vcl.h>
  4. #pragma hdrstop
  5.  
  6. #include <ga/GASimpleGA.h> // we're going to use the simple GA
  7. #include <ga/GA2DBinStrGenome.h> // and the 2D binary string genome
  8. #include <ga/std_stream.h>
  9.  
  10. #include "Unit1.h"
  11. //---------------------------------------------------------------------------
  12. #pragma package(smart_init)
  13. #pragma resource "*.dfm"
  14. TForm1 *Form1;
  15.  
  16.  
  17. //---------------------------------------------------------------------------
  18. __fastcall TForm1::TForm1(TComponent* Owner)
  19.     : TForm(Owner)
  20. {
  21. }
  22. //---------------------------------------------------------------------------
  23.  
  24. void __fastcall TForm1::Button1Click(TObject *Sender)
  25. {
  26. int width    = 10;
  27.   int height  = 5;
  28.   int popsize  = 30;
  29.   int ngen    = 400;
  30.   float pmut  = 0.001;
  31.   float pcross = 0.9;
  32.  
  33.  
  34.   GA2DBinaryStringGenome genome(width, height, (GAGenome::Evaluator)Objective);
  35.  
  36.   GASimpleGA ga(genome);
  37.   ga.populationSize(popsize);
  38.   ga.nGenerations(ngen);
  39.   ga.pMutation(pmut);
  40.   ga.pCrossover(pcross);
  41.   ga.evolve();
  42.  
  43.   cout << "The GA found:\n" << ga.statistics().bestIndividual() << "\n";
  44.  
  45. }
  46. //---------------------------------------------------------------------------
  47.   float
  48. Objective(GAGenome& g) {
  49.   GA2DBinaryStringGenome & genome = (GA2DBinaryStringGenome &)g;
  50.   float score=0.0;
  51.   int count=0;
  52.   for(int i=0; i<genome.width(); i++){
  53.     for(int j=0; j<genome.height(); j++){
  54.       if(genome.gene(i,j) == 0 && count%2 == 0)
  55. score += 1.0;
  56.       if(genome.gene(i,j) == 1 && count%2 != 0)
  57. score += 1.0;
  58.       count++;
  59.     }
  60.   }
  61.   return score;
  62. }



y el .h


cpp
  1. //---------------------------------------------------------------------------
  2.  
  3. #ifndef Unit1H
  4. #define Unit1H
  5. //---------------------------------------------------------------------------
  6. #include <Classes.hpp>
  7. #include <Controls.hpp>
  8. #include <StdCtrls.hpp>
  9. #include <Forms.hpp>
  10. //---------------------------------------------------------------------------
  11. class TForm1 : public TForm
  12. {
  13. __published: // IDE-managed Components
  14.     TButton *Button1;
  15.     void __fastcall Button1Click(TObject *Sender);
  16. private: // User declarations
  17. public: // User declarations
  18.     __fastcall TForm1(TComponent* Owner);
  19.       float Objective(GAGenome& g);
  20. };
  21. //---------------------------------------------------------------------------
  22. extern PACKAGE TForm1 *Form1;
  23. //---------------------------------------------------------------------------
  24. #endif


  • 0

#20 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 16 septiembre 2010 - 01:14

Veo un error.

Por un lado declaras Objetive como miembro de la clase TForm1, sin embargo, por otro lado la implamantas fuera de la clase:



cpp
  1. //---------------------------------------------------------------------------
  2.   float
  3. Objective(GAGenome& g) {
  4.   GA2DBinaryStringGenome & genome = (GA2DBinaryStringGenome &)g;
  5.   float score=0.0;
  6.   int count=0;
  7.   for(int i=0; i<genome.width(); i++){
  8.     for(int j=0; j<genome.height(); j++){
  9.       if(genome.gene(i,j) == 0 && count%2 == 0)
  10. score += 1.0;
  11.       if(genome.gene(i,j) == 1 && count%2 != 0)
  12. score += 1.0;
  13.       count++;
  14.     }
  15.   }
  16.   return score;
  17. }



Esto hace que esta función y la de la clase sean distintas. Es posible que no la tengas declarada al llamarla.

si quieres que objetive sea miembor de TForm1 debes hacerlo así:


cpp
  1. //---------------------------------------------------------------------------
  2.   float
  3. TForm1::Objective(GAGenome& g) {
  4.   GA2DBinaryStringGenome & genome = (GA2DBinaryStringGenome &)g;
  5.   float score=0.0;
  6.   int count=0;
  7.   for(int i=0; i<genome.width(); i++){
  8.     for(int j=0; j<genome.height(); j++){
  9.       if(genome.gene(i,j) == 0 && count%2 == 0)
  10. score += 1.0;
  11.       if(genome.gene(i,j) == 1 && count%2 != 0)
  12. score += 1.0;
  13.       count++;
  14.     }
  15.   }
  16.   return score;
  17. }



Saludos.
  • 0




IP.Board spam blocked by CleanTalk.