Algo génétique - Java - Programmation
Marsh Posté le 27-02-2006 à 11:10:39
Je pense que cette question aurait plus sa place dans la catégorie Algo, celle-ci ne s'occupant, théoriquement, que de la partie implémentation en Java.
Sinon, pour répondre à ta question, et ne diposant que d'une vague connaissance du sujet, je dirais oui.
Marsh Posté le 27-02-2006 à 13:35:54
J'ai eu un cours de biomimétique en école d'ingé il y a qq années. Oui, il faut choisir l'indice aléatoirement. Cela dit, ça peut aussi dépendre de la modélisation de ton pb à résoudre. Des fois, pour faire converger l'algo, on peut être amené à rajouter des conditions sur le choix de cet indice, par ex, une probabilité de sélection pour chaque indice (genre, l'indice 1 à 50% d'être sélectionné, le 2ième 3%, le 3ième 10%, etc.).
Marsh Posté le 27-02-2006 à 13:38:26
au fait, est-ce-que tous tes individus subissent le cross-over ou seulement une partie de ta population (mais je pense que c'est ce que tu as appelé la selection de la population? Et as-tu introduit de la mutation? Par contre, c'est quoi le fitness? Ca me dit rien...
Marsh Posté le 27-02-2006 à 13:46:01
rufo a écrit : au fait, est-ce-que tous tes individus subissent le cross-over ou seulement une partie de ta population (mais je pense que c'est ce que tu as appelé la selection de la population? Et as-tu introduit de la mutation? Par contre, c'est quoi le fitness? Ca me dit rien... |
Il me semble que c'est l'adéquation de l'individu avec le but à atteindre, la fonction qui doit être maximisée par l'algorithme au bout des n itérations.
Marsh Posté le 27-02-2006 à 19:41:58
Mario_ a écrit : Je pense que cette question aurait plus sa place dans la catégorie Algo, celle-ci ne s'occupant, théoriquement, que de la partie implémentation en Java. |
Oui c'est vrai tu a raison mais bon j'avais en vue certaines questions concernant mon implémentation en java ...
rufo a écrit : Oui, il faut choisir l'indice aléatoirement. Cela dit, ça peut aussi dépendre de la modélisation de ton pb à résoudre. Des fois, pour faire converger l'algo, on peut être amené à rajouter des conditions sur le choix de cet indice, par ex, une probabilité de sélection pour chaque indice (genre, l'indice 1 à 50% d'être sélectionné, le 2ième 3%, le 3ième 10%, etc.). |
Dans mon cas il s'agit d'une simple maximisation d'une fonction, et comme tu le dit on peut être amené a rajouter des conditions ( dans le cas présent un chromosomes sera une décomposition binaire d'un nombre donc faut il simplement privilegier des croisement sur les bits de poid fort au risque d'induire une diminution de la diversité ? )
rufo a écrit : au fait, est-ce-que tous tes individus subissent le cross-over ou seulement une partie de ta population (mais je pense que c'est ce que tu as appelé la selection de la population? Et as-tu introduit de la mutation? Par contre, c'est quoi le fitness? Ca me dit rien... |
Oui tous mes individus devraient logiquement passer par le cross-over.
Je suis pour l'instant que sur le cross-over et pour la mutation le choix de l'indice sera aléatoire je pense ca me suffira en tout cas.
Chromosomes : Valeurs de x
Fonction de fitness : Valeurs de f(x)
En gros la fitnessd'un chromosome c'est la mesure de la qualité de la solution.
Sinon merci pour vos posts les gens.
Marsh Posté le 28-02-2006 à 11:22:35
Chronoklazm a écrit : Oui tous mes individus devraient logiquement passer par le cross-over. |
Ben non, tous tes individus ne sont pas obligés de passer par le cross-over. Sinon, ça suppose que t'as une population ayant un nb pair d'individus. En +, dans le tas, y'en a surement qui ne méritent pas de continuer à évoluer (ceux dont f(x) est < à un seuil). Du reste, je pense que pour choisir les candidats au cross-over, tu doit définir une probabilité proportionnelle à f(x). Par contre, je ne pense pas que ce soit bon de ne faire que du cross-over que sur les bits de poids forts car tu risques de ne pas arriver au réel maximum de f(x) (risque de te retrouver avec un truc du genre 11110000).
Pour la mutation, il faut définir 2 probas : la fréquence à laquelle survient une mutation, et le choix aléatoire de l'indice sur lequel la mutation intervient.
Marsh Posté le 28-02-2006 à 11:24:01
au fait, c'est pour résoudre quel pb ton algo génétique? Moi, je m'en étais servi pour optimiser le remplissage de CDs vierges avec des fichiers (prendre certains fichiers, eventuellement tous si y'a la place, et les répartir sur un nb donné de Cds de différentes capacités).
Marsh Posté le 01-03-2006 à 00:03:03
rufo a écrit : Ben non, tous tes individus ne sont pas obligés de passer par le cross-over. Sinon, ça suppose que t'as une population ayant un nb pair d'individus. En +, dans le tas, y'en a surement qui ne méritent pas de continuer à évoluer (ceux dont f(x) est < à un seuil). Du reste, je pense que pour choisir les candidats au cross-over, tu doit définir une probabilité proportionnelle à f(x). Par contre, je ne pense pas que ce soit bon de ne faire que du cross-over que sur les bits de poids forts car tu risques de ne pas arriver au réel maximum de f(x) (risque de te retrouver avec un truc du genre 11110000). |
J'ai une population avec un nombre pair d'individus. Ca facilite grandement la sélection.
tu doit définir une probabilité proportionnelle à f(x) => Oui c'est la technique de la roue de la fortune, c'est justement ce que j'utilise. Avec un choix aléatoire de l'indice pour le croisement ça maximise assez rapidement.
Pour l'instant je teste avec une petite fonction mathematique genre f(x) = x² ... apres si j'ai le temps et le courage j'aimerais me tapper un TSP.
Marsh Posté le 01-03-2006 à 00:05:12
rufo a écrit : au fait, c'est pour résoudre quel pb ton algo génétique? Moi, je m'en étais servi pour optimiser le remplissage de CDs vierges avec des fichiers (prendre certains fichiers, eventuellement tous si y'a la place, et les répartir sur un nb donné de Cds de différentes capacités). |
Bin packing en génétique quoi ... et alors, tu trouvais une solution plus rapidement qu'avec un algo greedy ?
Marsh Posté le 01-03-2006 à 14:52:09
non, le bin packing en génétique ets l'équivalent du pb du sac à dos : on a un nb donné d'éléments et on veut savoir combien de sacs il faut au minimum pour les ranger. Mon pb était quasi l'inverse : on a n CDs et on doit les remplir avec des fichiers pris dans une liste, mais on n'est pas obligé de tous les prendre.
l'algo greedy, je ne connais pas. J'ai regardé dans google, le premier article qui lui est consacré porte sur la détection de contours dans une image (marrant, ça vient d'un stage don le maître était un de mes profs:D). Je vois pas trop l'application sur mon pb.
En tout cas, on paramétrant bien mon algo, ça donnait une bonne solution, voire la meilleure solution en qq secondes alors que le brut force métait plusieurs minutes Pourtant, la taille du pb portait sur 2 ou 3 CDs et 20-25 fichiers...
Marsh Posté le 26-02-2006 à 18:11:56
Salut,
Voilà j'ai un souci pour mon algo génétique. Je n'utilise aucune lib spéciale, je fait tout à la maign ...
J'ai donc une population constitué de chromosomes (gênes : 1,0) j'arrive a calculer leurs fitness respectives puis a séléctionner la population pour les croisements.
Mais je ne pige pas trop comment choisir les sites des croisements cad l'indice a partir duquel va s'effectuer le cross-over :
Cross-over( 11100, 11010, 2 ) => ( 11110, 11000 ).
Dois je le choisir aléatoirement ?