Nguyen Hoai Tuong

Personal blog/notes

Online educational video resources

January 19, 2011 Posted by | English, Français, Research | Leave a Comment

Still loving the bitter herbs risen behind the house – Vietnamese monochord: “Dan Bau”

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 …

 

January 18, 2011 Posted by | English, Français, Music, Tiếng Việt | Leave a Comment

4 problèmes du tourisme du Vietnam

(C) didulich.net
  1. Primo, les infrastructures et les équipements scolaires en tourisme ne répondent pas aux critères d’un enseignement moderne.
  2. Secundo, il manque de formateurs en la matière.
  3. Tertio, les étudiants sont équipés peu de de documents professionnels et n’ont guère de stages pour accumuler de l’expérience.
  4. Quarto, les liens entre les établissements de formation et les entreprises sont faibles.

(Source: CVN)

December 27, 2010 Posted by | Français, Relax | Leave a Comment

Réseaux Bayésiens: DAG, PDAG et CPDAG

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:

 

P(X|Y) * P(Y) = P(Y|X) * P(X)
P(Z|Y) * P(Y) = P(Y|Z)  * P(Z)

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

 

 

 

June 2, 2010 Posted by | Bioinformatics, Dissertation, Français, Informatics | Leave a Comment

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

Catégories EO LibraryLesson 5

Articles connexes:

Notes et réferences:

January 14, 2010 Posted by | Français, Genetic algorithms | , | 3 Comments

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












January 13, 2010 Posted by | Français, Genetic algorithms | , | 2 Comments

Documentation pour EO: Modifier la fonction fitness

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 LibraryLesson 1

Articles connexes:

Notes et réferences:

January 12, 2010 Posted by | Français, Genetic algorithms | , | 3 Comments

Documentation pour EO

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 LibraryLesson 1

Articles connexes:

Notes et réferences:

January 11, 2010 Posted by | Français, Genetic algorithms | | 3 Comments

C’est quoi le Vietnam?

 

Vietnam

Vietnam

 

August 18, 2009 Posted by | Culture, Français | Leave a Comment

NetProf : la future référence de la formation vidéo en ligne

Le Savoir Gratuit En Vidéo

Le Savoir Gratuit En Vidéo

http://www.netprof.fr/

April 27, 2009 Posted by | Français, Top Site | Leave a Comment

Follow

Get every new post delivered to your Inbox.