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
Je vous propose un focus sur l'utilisation du type struct au travers d'un problème général consistant à compter le nombre d'occurrences de tous les mots lus en entrée et de les trier simultanément.
Puisque la liste de mots n'est pas connue à l'avance, il n'est pas pratique de la trier et d'utiliser une recherche dichotomique.
Cependant, nous ne pouvons pas non plus effectuer une recherche séquentielle à l'arrivée de chaque mot pour vérifier si on l'a déjà rencontré ; le temps d'exécution du programme serait trop long.
Comment pouvons-nous organiser les données pour faire face efficacement à liste de mots arbitraires ?
Lire la suite de Focus C : Structure autoréférentielle
Conjointement au développement de mon projet personnel, j'essaie d'alimenter une rubrique proposant une collection de divers programmes en C.
Abordant des problèmes ou des thématiques récurrentes, j'essaie d'apporter un regard pédagogique, clair et exploitable clef en main : chaque exemple, chaque programme, est téléchargeable.
Vous pouvez donc vous en resservir comme base de travail pour vos projets personnels.
A l'heure actuelle, parmi les sujets traités on retrouve :
Cette page propose aussi un ensemble d'articles ainsi qu'un aide-mémoire.
La bibliothèque thématique de programme en C est récente et s'étoffera avec le temps.
Si vous voulez voir certains sujets traités ou tout simplement me faire part de vos remarques, n'hésitez à laisser un message en commentaire de cette actualité.
Lire la suite de Focus : Algorithme C
Fil RSS des articles de ce mot clé