Monthly Archives: January 2010

Documentation pour EO: Création d’un nouveau génome

Pour la création d’un nouveau génome utilisant EO, la plus simple  est de créer un nouveau projet à partir d’un template qui se trouve dans le dossier ‘$eo\tutorial\Template’. Ce tuto sert à expliquer comment le faire.

Sous Linux:

1. Choisissez un nom pour votre projet, par exemple ici je prends ‘MyGeno’.

2. ‘cd‘ vers ‘$eo\tutorial\Template’

3. Créez un dossier pour sauvegarder vos projets, nommé ‘MyProject’ par exemple: ‘mkdir   MyProject’

4.  Exécutez fichier ‘create.sh’ en prenant deux options: 1ère = nom de projet; 2ère = nom de dossier pour sauvegarder vos projets

./create.sh   OneMax   MyProject’

5. ‘cd’ vers ‘MyProject‘: ‘cd   ../MyProject’

6. ‘ls’ pour voir la structure du dossier:

  • MyGeno.cpp le fichier ‘main’
  • Makefile avec la direction par défaut eoMyGenoEA
  • eoMyGeno.h la classe du génome
  • eoMyGenoEvalFunc.h la classe de fitness
  • eoMyGenoInit.h la classe d’initialisation du génome
  • eoMyGenoMutation.h la classe de la mutation
  • eoMyGenoQuadCrossover.h la class du croisement
  • make_genotype_MyGeno.h la fonction aide à l’initialisation
  • make_op_MyGeno.h la fonction aide à la contrôle de paramètres des opérateurs
  • MyGenoLibEA.cpp l’autre fichier ‘main’ pour  séparer la représentation et la computation (comme  l’INTERFACE dans la POO).
  • make_MyGenoEA.cpp ici c’est la source pour les computations

7. Voilà tout est prêt. Tapez ‘make’ pour compliler votre projet ‘MyGeno’.

8. La seul chose à retenir c’est qu’il y a 4 fichiers suivants à modifier pour répondre à vos utilisations:

  • eoMyGeno.h pour définir votre génome
  • eoMyGenoxInit.h pour définir l’initialisation du génome
  • eoMyGenoMutation.h pour définir la mutation
  • eoMyGenoQuadCrossover.h pour définir le croisement

Allez-y! Faites démarrer votre console. Avant de passer à l’étape de MODIFICATION POUR UN NOUVEAU GENOME. Attendez un petit moment pour les utilisateurs Windows qui veulent également obtenir ces fichiers là.

Sous Windows:

C’est une question de renommer les fichier *.tmpl et/ou *.cpp –> *.cpp et/ou *.h

1. Créez un nouveau projet avec VC++, nommez ‘MyGeno’ et sauvegarder dans ‘$eo\tutorial\Template\MyProject’  (‘MyPorject’ est un nouveau dossier crée avant par vous même dans ‘$eo\tutorial\Template’).

2. Copiez/collez vers dossier ‘MyGeno’, puis  renommez tous les fichiers ci-dessus de manière indiquée:

  • MyStructSEA.cpp --> MyGenoEA.cpp le fichier ‘main’
  • eoMyStruct.tmpl --> eoMyGeno.h la classe du génome
  • evalFunc.tmpl --> eoMyGenoEvalFunc.h la classe de fitness
  • init.tmpl --> eoMyGenoInit.h la classe d’initialisation du génome
  • stat.tmpl --> eoMyGenoStat.h la classe de la statistique
  • mutation.tmpl --> eoMyGenoMutation.h la classe de la mutation
  • quadCrossover.tmpl --> eoMyGenoQuadCrossover.h la class du croisement
  • make_genotype_MyStruct.h --> make_genotype_MyGeno.h la fonction aide à l’initialisation
  • make_op_MyStruct.h --> make_op_MyGeno.h la fonction aide à la contrôle de paramètres des opérateurs
  • MyStructLibEA.cpp --> MyGenoLibEA.cpp l’autre fichier ‘main’ pour  séparer la représentation et la computation
  • make_MyStruct.cpp --> make_MyGenoEA.cpp ici c’est la source pour les computations

3. Ouvrez le fichier ‘MyGenoEA.cpp’, copiez/collez vers ‘MyGeno.cpp’ dans votre projet VC++.

4. Paramétrez votre projet pour qu’il puisse faire appeler la EO. Allez voir ce tuto pour savoir comment le faire.

5. Une fois que tous les paramètres nécessaires sont établis. Dans VC++ ‘Build\Build Solution’ pour compiler votre projet.

Eh bien…Bravo! Vous venez de créer avec succès un nouveau projet d’EO !!!

Et maintenant passons à la MODIFICATION d’UN NOUVEAU GENOME.

Prenons un exemple disponible dans la Leçon 5 du tutoriel proposé par l’auteur (‘$eo\tutorial\Template’). Ouvrez le fichier eoOneMax.h Il y aura deux points importants à voir attentivement afin de les ajuster:

  • La donnée pour construire un génome (un objet d’EO): La définition de donnée est à la fin de chaque classe et elle devrait être établi en privé (private).
  • Le constructeur défaut : Pour coder un objet d’EO, il faudrait forcement fournir un constructeur défaut et puis après il n’aura aucun constructeur d’autre qui seront appelés dans votre source code programme. Ils sont programmés à fonctionner systématiquement au moment vous déclarez une instance pour l’utilisation. Si vous souhaitez d’avoir quelques constructeurs pour l’initialiser une donnée spéifique, il vous faut coder pour vous même dans une autre classe tel que eoInit, eoEvalFunc…

Et voici un exemple complet de cette MODIFICATION que je voudrais vous donner pour finir cette partie.

Bonne continuation!

Tutu

Documentation Pour EO: Programmation par Template

InconvénientsLe Template est un mécanisme important que l’on pourrait retrouver dans plusieurs langages de programmation. Donc, C++ n’est pas un cas exceptionnel. On verra dans la suite ses intérêts et ses inconvénients, les problèmes rencontrés et les solutions proposées pour répondre la question: “Pourquoi EO applique dans presque tous ces codes ce mécanisme?”

Il s’agit d’une méthode de faire des fonctions (classes) travaillant sur de nombreux types de variables.

Intérêts

Les avantages de Template réside dans la généralité. C’est à dire, quand le type du paramètre fournit dans le Template, quel que soit les types de variables on a besoin de coder qu’un Template.

Inconvénients

La compilation est plus longue au point de vue du temps.

Quand utiliser des templates ?

Pour définir des containers. Mais c’est quoi des containers? Très imaginé! Comme des grands containers qu’on voit sur les routes nationales. Ce sont des composants qui contiennent d’ une collection d’objets (comme une liste, un vecteur, un graphe…).

Comment code-je un template?

Voici par la suite un exemple de template “classe”, une des méthodes de coding utilisé dans EO:

// class templates
#include <iostream>
using namespace std;

template <class T>
class mycontainer {
    T a, b;
  public:
    mycontainer(){};
    ~mycontainer(){};
    mycontainer (T first, T second)
      {a=first; b=second;};
    T getmax ();    

};

template <class T>
T mycontainer<T>::getmax ()
{
  T retval;
  retval = a>b? a : b;
  return retval;
}

int main () {
  mycontainer <int> myobject (100, 75);
  cout << myobject.getmax()<<endl;
  return 0;
}
Résultat: 100


Comment EO a appliqué "Template"?

Prenons un exemple dans EO.h qui a pour but de définir un type de donnée de base dans EO "fitness":
En comparant EO.h et les code au dessus, on peut trouver facilement le rôle de la classe "EO" et "mycontainer" est le même. Donc le reste a été codé de même manière. Pour voir comment utiliser ce template 'EO', allez voir le fichier 't-eo.cpp' qui pourrait être trouvé dans le répertoire '$eo\test' de la source code d'EO.

J'espère ce petit tuto pourrait vous aider.
Bon vent et A++!
Tutu

Catégories : EO Library | EO Programming Guide