Vous êtes sur la page 1sur 2

Programmation pour le calcul scientifique

Année : 2016-2017
Formation : L3 Ingénieurie Mathématique

TP10 : Algorithmes génétiques

Le but de ce TP est de résoudre un système linéaire avec un algorithme génétique. On considère une matrice
carrée A de rang n, un vecteur b de taille compatible, et on cherche le vecteur x ∈ Rn solution de

Ax = b.

Pour cela, on va créer des populations successives P k de vecteurs (xki )i≥0 de Rn , en ayant pour but de minimiser
les quantités ||Axki − b||. Le nombre total d’individus est constant au cours du temps, c-a-d d’une population
à l’autre. Plus précisément, on va appliquer la stratégie suivante :
• Initalisation : on génère une population initiale P 0 , c-a-d un ensemble de vecteurs (x0i )i≥0 .
• A chaque étape k :
• On génère de nouveaux individus (= de nouveaux vecteurs) par croisement des membres de la
population P k générée lors de l’étape précd́ente.
• On modifie un certain pourcentage de ces nouveaux individus par mutation.
• On génère une nouvelle population P k+1 en sélectionnant parmi l’ancienne population et les nou-
veaux individus ceux qui sont optimaux pour le critère considéré.
• Fin : On sélectionne le vecteur optimal parmi les individus de la dernière population qui a été créée.

1. Ecrire une fonction Initialisation qui a pour argument un entier n et qui renvoie un vecteur x (=
un tableau de dimension 1) de taille n généré aléatoirement, dont tous les coefficients ont des valeurs
comprises entre -1 et 1.
2. Ecrire une fonction Critere qui prend en argument une matrice A (= un tableau de dimension 2), un
||Ax − b||∞
vecteur b et un vecteur x, et qui renvoie le réel crit = .
||x||∞
3. Ecrire une fonction Croisement qui prend en argument deux vecteurs x1 et x2 et qui renvoie deux
nouveaux vecteurs x3 et x4 définis par :
x1 + x2 3x1 − x2
x3 = , x4 =
2 2
4. Ecrire une fonction Mutation qui prend en argument un vecteur x et un réel taux ∈ [0, 1], et qui renvoie
un vecteur y défini par :
y = x + dx
avec dx le vecteur défini par dx = taux ×||x||∞ × e, avec e un vecteur généré aléatoirement, dont tous
les coefficients ont des valeurs comprises entre -1 et 1.
5. Ecrire une fonction Selection qui prend en argument une matrice A (= un tableau de dimension 2),
un vecteur b , une population de vecteurs P (= un tableau de dimension deux) et un entier nb_pop, et
qui renvoie les nb_pop individus de la population P qui minimisent ||Ax − b||∞ .
6. Utiliser les fonctions ci-dessus pour écrire un programme principal permettant de résoudre le système
||Ax − b||∞
linéaire Ax = b, avec un algorithme génétique, avec un critère d’arrêt < .
||x||∞

1
7. Testez-le sur plusieurs exemples et faites varier les paramètres tels que le nombre d’individus dans la
population, le taux de mutation, le critère d’arrêt etc...
8. Affichez sur un graphe l’évolution de l’erreur pour l’individu le plus performant à chaque étape, en
fonction du nombre d’étapes.

Vous aimerez peut-être aussi