@jfourmond | @stanislasleroy |
- Programmation de l'algorithme génétique
- Tester l'exécution
- Choisir la taille de la population, le taux de cross-over et le taux de mutation
- Exécuter à plusieurs reprises l'algorithme avec des graines différents pour le générateur aléatoire
- Sauvegarder l'évolution des paramètres, des grandeurs et de la fitness en fonction de la génération, pour la moyenne de la population et pour le meilleur individu
- Visualiser
- Rediger le rapport
L'objectif est de programmer un algorithme génétique permettant de faire évoluer une population d'"individus", où chaque "individu" code les paramètres d'un oeil, d'après la modélisation suivante :
- Tout au long de l'évolution, la largeur maximale de l'oeil (distance AB) reste égale à W = 1.5 cm,
- L'intensité lumineuse I sera prise égale à e6.
- Rayon de courbure ρc : peut varier dans la plage [W/2, 10000]
- Taille de l'iris i : peut varier dans la plage [0, W/2[
- Angle Φ1 : peut varier dans la plage [0, π/2[
- Indice de réfraction n0 au centre de la lentille : peut varier dans la plage [1.35, 1.55]
- Rayon de courbure initial ρc = 10000
- Taille initiale de l'iris i = 0
- Angle Φ1 initial : Φ1 = 0
- Indice initial de réfraction au centre de la lentille n0 = 1.35
L'algorithme s'exécute jusqu'à ce que le nombre de générations limite soit atteint.
- Taille de la population : 40
- Nombre de générations : 50 000
- Taux de cross-over : 0.5
- Taux de mutation : 0.2
- Graines du générateur aléatoire : [ 1487422477451, 1487424485848, 1487424573992]
- Tri de la population en fonction de leur valeur de fitness
- Récupération des probabilités de reproduction
- Création du "camembert" en fonction de la probabilité de reproduction
- Choix aléatoire de deux parents en fonction du camembert
L'enfant détiendra les caractéristiques aléatoires en fonction des caractéristiques des parents et du taux de cross-over.
Les enfants produits muteront en fonction du taux de mutation. Une seule caractéristique de l'enfant sera modifié (addition) par un double gaussien aléatoire.
Les étapes de sélection, de reproduction et de remplacement sont effectuées jusqu'à ce que la population soit entièrement renouvelée.
Le programme nécessite le répertoire resources contenant le fichier indice_refraction.dat pour fonctionner. 4 arguments sont à spécifier au programme :
- la taille de la population
- le nombre de générations
- le taux de cross-over (en pourcentage)
- le taux de mutation (en pourcentage)
Un cinquième argument est optionnel : la graine du générateur aléatoire.
java -jar EyeEvolution.jar [population-size] [generations] [crossover-rate] [mutation-rate] ([seed])
Dans le cas présent, avec les paramètres choisis, l'appel au programme via l'archive Java se fait de la façon suivante (par exemple, avec la première graine du générateur aléatoire) :
java -jar EyeEvolution.jar 40 50000 50 20 1487422477451
A l'exécution, le programme produit un fichier au format csv contenant les détails suivants pour chaque génération :
- numéro de la generation
- taille de la population
- taux de cross-over
- taux de mutation
- graine du générateur aléatoire
- rayon de courbure moyen
- taille de l'iris moyen
- angle moyen
- indice de réfraction moyen
- fitness moyen
- rayon de courbure du meilleur oeil
- taille de l'iris du meilleur oeil
- angle du meilleur oeil
- indice de réfraction du meilleur oeil
- fitness du meilleur oeil