---
header-includes:
  - \usepackage[T1]{fontenc}
  - \usepackage[french]{babel}
  - \usepackage{datetime}
  - \usepackage{hyperref}
---
# Semaine 8: Algorithmes génétiques et systèmes à base de connaissances

## Lecture d'introduction

Article de blog: [Introduction to Genetic Algorithm & their application in data science](https://www.analyticsvidhya.com/blog/2017/07/introduction-to-genetic-algorithm/)

Darwin: La survie des espèces est due à leur capacité d'adaptation au changement.

Les chromosomes, formés d'ADN, peuvent être représentés par une séquence binaire d'allèles. Les traits sont encodés dans les gènes par des blocs d'allèles. L'ensemble des gènes d'un individu forme son génôme.

### Algorithme génétique

- Modéliser et reproduire l'évolution humaine
- Technique d'optimisation qui essaie de trouver les meilleures valeurs en entrée pour obtenir la meilleure valeur de sortie

### Étapes

- Initialisation
    - Nous avons une population formée de chromosomes, qui sont des séquences de gènes
- Évaluation
    - Fonction objectif
    - Une fonction de score que l'on veut maximiser
- Sélection
    - Les couples sont choisis aléatoirement selon une distribution de probabilités uniforme pondérée par le score de la fonction objectif
    - Une autre méthode est celle de l'[échantillonnage universel stochastique](https://en.wikipedia.org/wiki/Stochastic_universal_sampling)
    - Une seule valeur aléatoire nécessaire
    - Intervalle constant entre les solutions choisies
- Croisement
    - En un point: on sectionne les deux chromosomes au même endroit et on prend la première section du premier et la seconde section du second chromosome
    - Multi-point: Même principe, mais on sectionne à plusieurs endroits
- Mutation
    - Certains gènes sont différents de ceux des deux parents.
    - On change quelques encodages de gènes aléatoirement

Algorithme utilisé en exemple: [Tree-Based Pipeline Optimization](https://pypi.python.org/pypi/TPOT/0.4.1)

### Applications

- Design d'ingénierie: optimiser et offrir une solution robuste
- Circulation et logistique (Problème du commis voyageur)
- Robotique: répliquer des tâches quotidiennes banales par apprentissage essai et erreur.

## Tree-Based Pipeline Optimization

Source: [Evaluation of a Tree-based Pipeline Optimization Tool
for Automating Data Science](https://arxiv.org/pdf/1603.06212v1.pdf)

## 2e lecture: An Introduction to Genetic Algorithms (textbook)

Référence: [An Introduction to Genetic Algorithms, Melanie Mitchell](https://mitpress.mit.edu/books/introduction-genetic-algorithms)

### Historique

- Rechenberg (1965, 1973), Schwefel(1975, 1977): Stratégies d'évolution, optimisation de fonctions réelles.
- Fogel, Owens and Walsh(1966): Programmation évolutionnaire, automate avec un nombre fini d'états.
- Les deux domaines ont évolué séparément jusqu'au début des années 1990.
- John Holland (1975): Algorithmes génétiques, étude formelle des phénomènes d'adaptation dans la nature, pas nécessairement la résolution de problèmes (Adaptation in Natural and Artificial Systems).
- Approche de la théorie des schémas (blocs) qui construisent les séquences de gènes, formés de valeurs fixes et de cartes vierges.
- Opérateurs: croisement, mutation, inversion

### L'intérêt pour l'évolution

- Opérer dans un environnement changeant
- Gérer le parallélisme et décider des meilleures pistes de solutions à explorer
- Solutions complexes à programmer: les concepteurs de systèmes experts témoignent d'un optimisme selon l'auteur (top-down).
- On programme seulement des règles simples et on lance une multitude d'instance de calcul en souhaitant qu'une d'entre elles parvienne à la solution recherchée (bottom-up)
- L'évolution, c'est la recherche de la meilleure solution pour la survie et la reproduction

### Espace de recherche

- Espace des solutions candidates (génotypes) pour un problème donné
- L'algorithme génétique peut éviter les solutions locales via le croisement de celles-ci. Il n'est donc pas dépendant d'une fonction de distance entre les solutions candidates.
- [Paysage adaptatif](https://en.wikipedia.org/wiki/Fitness_landscape)
    - représentation des relations entre des solutions candidates et la valeur sélective (fitness).
    - ![](images/semaine08/fitness_landscape.png)
- Distance de Hamming: nombre de bits différents
- La valeur sélective est relative à la population à un instant précis

### Éléments d'un algorithme génétique

Quatre éléments:

1. Population de chromosomes
1. Fonction de valeur sélective (fitness)
1. Croisements pour produire une descendance
1. Présence de mutations

### Pseudocode

1. Générer aléatoirement une population de $n$ chromosomes de $l$-bit. Solutions candidates
1. Calculer la valeur sélective $f(x)$ de chaque chromosome $x$ de la population
1. Répérer les étapes suivantes $\lceil{\frac{n}{2}}\rceil$ fois
    1. Sélectionner une paire de chromosomes parents de la population, la probabilité de sélection étant une fonction croissante de la valeur sélective. La sélection se fait avec remplacement.
    1. Avec une probabilité $p_c$, croiser la paire à un point choisi uniformément et produire deux chromosomes descendants. Si aucun croisement n'a lieu, cloner les deux parents.
    1. Muter les deux descendants à chaque locus avec une probabilité $p_m$. 
1. Si $n$ est impair, éliminer la dernière valeur obtenue
1. Remplacer la population actuelle par la nouvelle population
1. Retourner à l'étape 2 pour produire une nouvelle génération

### Algorithmes de recherche traditionnelle

L'algorithme génétique est un algorithme de recherche de solutions et non de recherche de chemins vers une solution. C'est une grande différence avec un système expert où nous voulons souvent obtenir une explication de la solution.

Mécaniquement, on a un comportement similaire à un algorithme de simplexe pour l'optimisation de fonctions réelles. Par contre, dans ce cas, on a un vecteur de paramètres réels auquel on applique des opérateurs multiplicatifs ainsi que des mutations, dans le cas d'algorithmes d'optimisation stochastiques.

## 3e lecture: Amélioration d'images

Source: M Paulinas, A Ušinskas - Information Technology and control, 2007
[A survey of genetic algorithms applications for image enhancement and segmentation](http://itc.ktu.lt/index.php/ITC/article/view/11886/6561)

![flowchart_genetic.png](images/semaine08/flowchart_genetic.png)

Amélioration des images acquises par la vision artificielle:

- Suppression du bruit
- Amplification des contrastes de l'image
- Amplification du niveau de détails
- Détection de bord

Utilisations:

- Construction de nouveaux filtres
- Optimisation des paramètres de filtres existants
- Séquence optimale de filtres

Weighted vector directional filters:

- Ne peuvent converger vers un optimum global
- On optimise alors avec un algorithme génétique

## 4e lecture: Flappy Bird

Source: [Machine Learning for Flappy Bird using Neural Network & Genetic Algorithm](http://www.askforgametask.com/tutorial/machine-learning-algorithm-flappy-bird/)

[Vidéo](https://www.youtube.com/watch?v=aeWmdojEJf0)

### Réseau de neurones artificiels

3 couches:

- Couche d'entrée avec deux neurones:
    - Distance horizontale vers l'espacement le plus près
    - Différence de hauteur avec l'espacement le plus près
- Couche cachée de 6 neurones
- Sortie avec un neurone
    - Si la sortie est supérieure à 0,5 alors **flap**

![flappy_06.png](images/semaine08/flappy_06.png)

### Algorithme génétique

Objectif: entraîner et améliorer le réseau de neurones

Étapes:

- Générer une population de 10 oiseaux avec des réseaux de neurones aléatoires associés
- Faire jouer les 10 unités simultanément au jeu avec leur propre réseau de neurones
- Calculer la fonction de valeur sélective pour chaque oiseau
    - (distance totale voyagée) - (distance du prochain écart)
- Quand tous les oiseaux sont morts, appliquer la stratégie de remplacement
    - Trier les oiseaux par leur valeur sélective
    - Prendre les 4 meilleurs et les passer à la génération suivante sans possibilité de mutation (élitisme)
    - Créer 1 descendant avec les 2 meilleurs
    - Créer 3 descendants avec 2 gagnants sur les 4 meilleurs
    - Créer 2 copies de 2 gagnants sur les 4 meilleurs
    - Appliquer des mutations aléatoires sur tous les descendants
- Recommencer à l'étape 2

La fonction de croisement représente un neurone comme un trait et coupe à un point aléatoire le vecteur de neurones. On choisis ensuite aléatoirement un des deux descendants avec une fonction de masse de probabilité de 0.5 chacun.

### Exemple de code

Le projet est sur GitHub: [ssusnic/Machine-Learning-Flappy-Bird](https://github.com/ssusnic/Machine-Learning-Flappy-Bird)

Utilise les bibliothèques de fonctions [`synaptic`](https://github.com/NeuroJS/synaptic) et [`phaser`](http://phaser.io)

```javascript
  //MIT License
  //Copyright (c) 2017 Srdjan Susnic

    // performs a single point crossover between two parents
    crossOver : function(parentA, parentB) {
        // get a cross over cutting point
        var cutPoint = this.random(0, parentA.neurons.length-1);

        // swap 'bias' information between both parents:
        // 1. left side to the crossover point is copied from one parent
        // 2. right side after the crossover point is copied from the second parent
        for (var i = cutPoint; i < parentA.neurons.length; i++){
            var biasFromParentA = parentA.neurons[i]['bias'];
            parentA.neurons[i]['bias'] = parentB.neurons[i]['bias'];
            parentB.neurons[i]['bias'] = biasFromParentA;
        }

        return this.random(0, 1) == 1 ? parentA : parentB;
}
```

## 5e lecture: Génération de règles pour un système expert à partir d'un algorithme génétique (abstract seulement)

Source: [A Genetic Algorithm for Expert System Rule Generation](http://people.ibest.uidaho.edu/~foster/Papers/46107.pdf)

- Génération de règles floues à partir de données
- Classification génétique de données
    1. Classification avec un algorithme génétique
        - Chromosomes de longueur aléatoire
        - Probabilité de mutation variables
    1. Statistiques sur les groupes
- Données satellites LANDSAT
- Conclusion: performance similaire à d'autres algorithmes de classification
- Enjeu: mode de représentation des règles