Algo génétique

Algo génétique - Java - Programmation

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 ?

Reply

Marsh Posté le 26-02-2006 à 18:11:56   

Reply

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.

Reply

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.).

Reply

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...

Reply

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.

Reply

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.
 
Sinon, pour répondre à ta question, et ne diposant que d'une vague connaissance du sujet, je dirais oui.


 
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.


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 28-02-2006 à 11:22:35    

Chronoklazm a écrit :

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.
...


 
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.

Reply

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).

Reply

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).
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.


 
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.


Message édité par Chronoklazm le 01-03-2006 à 00:13:42

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

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 ?


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 01-03-2006 à 00:05:12   

Reply

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...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed