Articles connexes:
- Documentation pour EO
- Documentation Pour EO: Modifier La Fonction Fitness
- Documentation Pour EO: Création D’un Nouveau Génome
The Dan Bau is a Vietnamese monochord (http://goo.gl/W3kJt).
This music track is performed by Master Pham Duc Thanh (http://goo.gl/tIkAt).
Song name: Still loving the bitter herbs risen behind the house
Composer: Bac Son (http://goo.gl/T21V5)
In Vietnamese: Còn thương rau đắng mọc sau hè
Lyrics:
Nắng hạ đi mây trôi lang thang cho hạ buồn
trong cỏi đốt đồng, để ngậm ngùi chim nhớ lá rừng
Ai biết mẹ buồn vui khi mẹ kêu cậu tới gần
biểu cậu ngồi, mẹ nhổ tóc sâu, hai chị em tóc bạc như nhau
Đôi mắt cậu buồn thiu, phiêu lưu rong chơi những ngày đầu hè ba vá miếng dừa để mòn sương, dãi nắng dầm mưa
Ai cách xa cội nguồn, ngồi một mình
nhớ lũy tre xanh dạo quanh, khung trời kỷ niệm
chợt thèm rau đắng nấu canh
Xin được làm mây mà bay khắp nơi giang hồ
ghé chốn quê hương xa rời người cất bước ly hương
Xin được làm gió dập dìu đưa điệu ca dao
Trái bể phiến sau cũng ngọt ngào một lời cho nhau
Xin sống lại tình yêu đơn sơ,
rong chơi những ngày đầu hè, ba vá miếng dừa để mòn sương, dãi nắng dầm mưa
Xin nắng hạ cội nguồn một mình ngồi nhớ lũy tre xanh dạo quanh, khung trời kỷ niệm
Chợt thèm rau đắng nấu canh …
(C) didulich.net(Source: CVN)
C’est un petit résumé de lecture concernant le sujet de l’apprentissage de la structure de réseaux Bayésiens (RB) dans l’espace des classes d’équivalence de Markov. Il vise aux lecteurs qui sont familiers des méthodes basées sur le score et la recherche. Les trois mots clés envisagés sont (1) DAG (Directed Acycle Graph: graphe dirigé sans circuit), (2) PDAG (Partially Directed Acycle Graph: graphe partiellement dirigé sans circuit) et (3) CPDAG (Completed Partially Directed Acycle Graph: graphe complété partiellement dirigé sans circuit). Le but de ce résumé est de comprendre la différence entre ces termes. Le point important à retenir est le principe de la classe d’équivalence de Markov.
Comme leur nom déjà indiqué, il s’agit de la même famille de DAG. C’est un groupe de termes bien connus dans l’apprentissage de la structure de réseaux Bayésiens (RB). En général, la différence entre eux est la règle (la restriction) qui détermine l’orientation des arcs de chaque type de graphe:
1) DAG : seulement des arcs dirigés
2) PDAG: arcs non-dirigés et dirigés
3) CPDAG: arcs non-dirigés et dirigés respectant la V-structure X -> Y <- Z
Le dernier nous intéresse. C’est le concept qui représente la classe d’équivalence de Markov. Elle consiste à définir une graphe unique (aussi connu sous le nom: graphe essentiel) qui représente tous les graphes dit “équivalents“. Deux graphes sont équivalents si seulement s’ils ont même squelette et v-structure (arcs essentiels). Les arcs essentiels sont les arcs que leurs flèches ne pourront pas être inversés.
En effet, étant donné trois variables X, Y, Z. Supposons qu’on a quatre types de relations suivantes:
(a) X -> Y -> Z Pa(X,Y,Z) = P(X) * P(Y|X) * P(Z|Y)
(b) X <- Y -> Z Pb(X,Y,Z) = P(X|Y) * P(Y) * P(Z|Y)
(c) X <- Y <- Z Pc(X,Y,Z) = P(X|Y) * P(Y|Z) * P(Z)
(d) X -> Y <- Z Pd(X,Y,Z) = P(Y|X,Y) * P(X) * P(Y)
D’après la définition d’une probabilité conditionnelle, on a:
donc,
Pa(X,Y,Z) = P(X) * P(Y|X) * P(Z|Y)
= P(X|Y) * P(Y) * P(Z|Y) = Pb(X,Y,Z)
= P(X|Y) * P(Y|Z) * P(Z) = Pc(X,Y,Z)
alors (a), (b), (c) sont équivalents. Pourtant, avec Pd(X,Y,Z), c’est P(Y|X,Y) qui ne peut pas se simplifier. Donc, (d) n’est pas équivalent par rapport aux trois autres.
Voilà, quelques explications pour mieux comprendre la différence entre DAG, PDAG et CPDAG.
Pour conclure, la motivation de la définition de CPDAG et le principe de la classe d’équivalence de Markov est:
(1) la réduction de l’espace de structures possibles: En effet, il y a plusieurs structures qui représentent les mêmes relations d’indépendance conditionnelle. La classe d’équivalence permet d’optimiser la recherche en évitant des redondances de structure équivalentes. Par contre, puisque le taux de nombre de DAG et de nombre de CPDAG est 0.267, donc l’amélioration en terme d’efficacité de l’algorithme apprentissage de la structure est petite.
(2) la possibilité d’obtenir un optima global de la recherche de meilleures structures: En effet, il y a plusieurs structures qui ont même score. La classe d’équivalence de ces structures pourrait éventuellement permettre de trouver plus facilement la meilleure structure.
Pourtant, il y a également de désavantages de la classe d’équivalence de Markov :
(1) il faudrait plus d’opérations pour vérifier si la structure représente la classe d’équivalence.
(3) il est possible d’avoir besoin d’une mesure d’évaluation plus compliquée si on ne peut pas utiliser le score équivalent.
(2) l’espace de CPDAG pourrait produire un autre optima local qu’il n’y a pas dans l’espace de DAG.
Ce résumé s’arrête ici. Le prochain sera l’algorithme pour la recherche dans l’espace CPDAG.
Je vous souhaite bon vent pour la suite et à très bientôt!
Tutu
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:
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:
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:
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:
Et voici un exemple complet de cette MODIFICATION que je voudrais vous donner pour finir cette partie.
Bonne continuation!
Tutu
Catégories : EO Library | Lesson 5
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
Articles connexes:
- Documentation pour EO
- Documentation Pour EO: Modifier La Fonction Fitness
- Documentation Pour EO: Création D’un Nouveau Génome
Notes et réferences:
La fonction fitness se trouve a priori au moment de la création d’une instance d’évaluation (avec la class ‘eoEvalFuncPtr’). C’est là on évalue chaque individu de la population. Dans le premier exemple, la fonction ‘binary_value’ joue le rôle de calculer la fitness des individus. Donc, pour la modifier, il suffit d’ajuster l’entrée de la variable ‘sum’ dans cette fonction:
double binary_value(const Indi & _indi)
{
double sum = 0;
for (unsigned i = 0; i < _indi.size(); i++)
sum += _indi[i];
return sum;
}
Ce code sert à calculer le nombre de bits ’1′ de chaque individu (Indi). Donc, si par exemple on voudrait modifier cette fonction pour compter combien de bits ’0′ notre code pourra être comme suivant:
double binary_value(const Indi & _indi)
{
double sum = 0;
for (unsigned i = 0; i < _indi.size(); i++)
sum += _indi[i];sum=_indi.size()-sum ;
return sum;
}
Voilà on reste à une modif très simple pour le moment. On se retrouvera dans un autre post pour voir comment on applique cette fonction dans un problème réel.
Tutu
Catégories : EO Library | Lesson 1
Je commence à taper sur la porte d’EO il y a quelque temps. Je me sens un peu seul au départ à cause de faute de docs. Donc, c’est la raison pour laquelle on a ce petit tag “eo-library” pour la doc d’EO.
Premièrement, comme ceux qui veulent faire tourner une nouvelle bibliothèque d’un langage de programmation, c’est l’installation:
Télécharger préalablement la dernière ver. d’EO au site de son auteur:
http://www.lri.fr/~marc/EO/
(j’espère qu’il change pas de cet URL)
L’installation d’EO pour les “fidèles” de Linux:
1. ‘cd’ vers le répertoire d’EO puis tapez ‘.configure’ (ou ‘sh .configure’ pour l’ancienne version de ‘csh’.
2. Tapez ‘make’ pour compiler
3. Tapez ‘make install’ pour installer
4. Tapez ‘make clean’ pour ‘nettoyer’ les fichiers d’objets générer par l’installation:)
L’installation d’EO pour les “croyants” de Windows avec VC++ installé:
1. Allez vers “$eo/win”
2. Exécutez “eo.sln”
3. Convertissez la source de VC++ 7.0 vers 8.0 ou plus [...]
4. “Build”->”Rebuild Solution”
Et voilà les premiers pas qu’il nous faut pour faire tourner cette bibliothèque.
Deuxièmement, On passe à un exemple simple pour voir comment les codes fonctionnent. Le VC++ 8.0 m’accompagne par la suite pour travailler avec notre nouvelle amie EO.
Je prends un exemple proposé par les auteurs dans son tuto intitulé “Lesson1″.
1. Retournez VC++ avec le projet nomé ‘eo’ dans ‘$eo\win’.
2. Créez un nouveau projet qui fusionne avec ce projet ‘eo’: “File”-> “New”->”Project”. Dans “Visual C++”, choisissez “Win32″. Dans “Templates”, choisissez “Win32 Console Application”. Dans “Name”, tapez “Lesson1″. Dans “Solution”, choisissez “Add to solution”.
3. Cliquez “Application Settings”. Dans “Application type”, choisissez “Console application”. Dans “Additional options”, enlevez “Pre-compiled header”.
4. Cliquez “Finish”
5. Maintenant allez vers “$eo\Tutorial\Lesson1″ pour récupérer la source code de cette première leçon.
6. Ouvrez “FirstBitGA.cpp”, copez tous les codes dans ce fichier.
7. Collez dans le fichier source de notre exemple “Lesson1.cpp”
8. Paramétrez le projet “Lesson1″ pour qu’on puisse faire appelez la bibliothèque EO. Dans la zone “Solution Explorer”, cliquez-droit sur le projet “Lesson1″.
9. Dans “Common Properties”, cliquez “References”, puis “Add New References”. Choisissez tous les quatre projets référents l’un après l’autre: “eo”, ‘es’, ‘ga’, ‘utils’.
10. Dans “Configuration Properties”, “C/C++”, choisissez “Code generation”. Ajustez “Runtime Library” en “Multi-threaded Debug (/MTd)”.
11. Determinez le projet “Lesson1″ comme le projet de lancement en cliquant-droit sur le projet “Lesson1″. Choisissez “Set as StartUp Project”.
12. Lancez le Debugging en choisissant “Debug”->”Start Debugging” .
Voilà quelques lignes pour l’installation d’EO sous Linux et Windows, bonus un exemple simple d’utilisation avec VC++. Je me permets de m’arrêter pour aujourd’hui. Je sens une très bonne saveur juste derrière moi. C’est mon dîner! Allez!!! A très bientôt!
Tutu
Catégories : EO Library | Lesson 1