Algorithme génétique multirhreadé

Soyez le premier à donner votre avis sur cette source.

Vue 11 648 fois - Téléchargée 1 440 fois

Description

Cet algorithme à pour but final de gérer la construction d'emploi du temps.
Pour le moment, il se contente de l'essence de l'algorithme génétique : faire survivre des individus (chromosomes), les croiser , et les muter.

Une implémentation du système d'individus est fait avec des phrases. (voir la fonction main)

Vous trouverez les sources dans le .zip (qui est en fait un jar, e.g la commande java -jar geneticAlgo.zip fonctionne)

Il ne dispose pas d'interface graphique, lancez le en console (ou libre à vous d'en implémenter une , c'est facile, implementez l'interface GeneticAlgorithmObserver)

Source / Exemple :


public static void main(String[] args){
		
		List<Chromosom> alist = new ArrayList<Chromosom>();
		
		
		alist.add(new WordGA("la boussole du capitaine hadoc"));
		alist.add(new WordGA("le grand chapeau du duc"));
		alist.add(new WordGA("les oiseaux chantent"));
		alist.add(new WordGA("il faut beau à paris"));
		alist.add(new WordGA("ledit camouflage ne te masqueras point"));
		alist.add(new WordGA("georges est caché derrière la cabane au fond du jardin"));
		alist.add(new WordGA("c'est moi le loup"));
		alist.add(new WordGA("et moi je vais te toucher"));
		alist.add(new WordGA("le dernier la bas est un glouton"));
		

		/*
		//					  le petit chaperon rouge

  • /
GeneticAlgorithm ga = new GeneticAlgorithm(alist,0.8,100, 0.1,161500); ga.addGeneticAlgorithmObserver(new FirstChromosomDisplayer()); System.out.println("Starting ..."); double smsec=System.currentTimeMillis(); ga.startComputation(); ga.waitEnd(); double emsec=System.currentTimeMillis(); System.out.println("Ending in " + ((emsec-smsec)/1000) + "sec"); System.out.println("Result: "+ga.getChromosoms().getChromosomAt(0)); System.exit(0); } /* Voici la fonction rateAll qui ordonne le calcul des indice de "survabilité" des chromosomes Le reste est dans le .zip
  • /
public void rateAll(){ Stack<ProcessableRessource> stack=new Stack<ProcessableRessource>(); for(int i = 0;i<curPop;i++){ if(infos[i]==null){ stack.push(chromosoms[i]); } } BatchTask bt = new BatchTask(stack,new GeneticAlgorithmSurvivorsRatingProcessor(this),null); BatchManager.getInstance().addObserver(this); BatchManager.getInstance().processRessources(bt); waitUnfinishedJobs(); }

Conclusion :


Si vous avez des questions ,commentaires ou remarques, n'hésitez pas !

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.