Nous avons déjà abordé cette problématique il y a quelques mois, je vous proposais de créer un algorithme génétique en Java.
Aujourd'hui, je vous propose le même programme mais developpé en C.
Pour rappel, le cas d'exemple étudié sera le suivant :
Nous allons créer un algorithme qui permet de trouver au sein d'une population un individu ayant la meilleure aptitude, dans notre cas possédant un code génétique identique à celui recherché (solution optimale).
Pour ce faire nous allons créer les fichiers suivants :
-
t_bool.h : Déclare le type t_bool, un type booléen.
-
population.h et population.c : Déclare et donne l'implémentation des différentes méthodes permettant de traiter l'ensemble des individus d'une population.
-
t_individual.h et t_individual.c : Déclare et donne l'implémentation des différentes méthodes permettant de traiter un individu.
-
t_skill.h et t_skill.c : Déclare et donne l'implémentation des différentes méthodes permettant déterminer la compétence d'un individu.
-
runtime_algo.c: S'occupe de gérer l'évolution : reproduction, mutation ...
-
main.c : Le programme principal permettant de lancer l'évolution sur notre population initiale.
Voyons en détail l'implémentation de ces différents fichiers.
Lire la suite de Création d'un algorithme génétique (en C)
Un algorithme génétique (GA) est idéal pour trouver des solutions aux problèmes de recherche complexes. Ils sont souvent utilisés dans des domaines tels que l'ingénierie pour créer des produits avec des propriétés et une qualité très élévées, grâce à la recherche de combinaisons de paramètres pour obtenir la meilleure composition. Par exemple, ils peuvent chercher dans différentes combinaisons de matériaux et de modèles pour trouver la combinaison parfaite des deux pour obtenir un composant léger et robuste à la fois.
Ils peuvent également être utilisés pour concevoir des algorithmes informatiques, pour planifier des tâches ou pour résoudre d'autres problèmes d'optimisation. Les algorithmes génétiques sont basées sur le processus d'évolution par sélection naturelle qui a été observé dans la nature. Ils reproduisent essentiellement la manière dont la vie utilise l'évolution pour trouver des solutions aux problèmes du monde réel.
Nous avons déjà abordé ce sujet au travers d'un article précédent. Dans cet article nous allons implémenter (pour l'exemple, le langage utilisé sera Java), voyons ça plus en détails.
Pour ceux désirant une version développé en C, vous pouvez consulter cet article.
Lire la suite de Création d'un algorithme génétique (en Java)
L'adaptation des populations naturelles vise à améliorer les chances de survie du groupe.
De leur côté, les modèles informatiques de l'évolution cherchent surtout à "engendrer" un individu dont le "code génétique" représente la solution optimale ou presque optimale d'un problème.
Mais pour accroître la probabilité qu'un tel événement se produise, le modèle doit peu à peu améliorer la qualité moyenne de "générations" entières de solutions potentielles, exactement comme c'est le cas pour la biologie.
Ci-après, nous donnons un exemple très simple de ce processus, reportant à plus tard une analyse détaillé du modèle. Cet article détaille la théorie ceux souhaitant mettre en pratique cette théorie, je vous invite à compléter votre lecture par cette article. Cet article détaille l'implémentation d'un algorithme génétique en Java.
Lire la suite de Modéliser l'évolution : Algorithme génétique