Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème en java

problème in java

    29 juin 2020 à 3:33:13

    slm,svp j'ai un problème je vue initialiser une population par des chromosome voici la méthode qui j'ai fait   et voila comment j'ai initialiser les chromosomes::

    et chaque chromosome elle à une valeur d'évaluation(fitness)

    je vue trie la population en ordre décroisent selon la valeur fitness de chaque chromosome j'ai utiliser la méthode trie par selection et une méthod de sortByFitness



    voila les deux méthode qui j'ai utiliser mais la population elle n'est pas trie je sais pas où le problème
    voila l'éxcution et merci pour votre aide
    eneration #0
    Chromosome #0 : [G, B, D, B, D, D, D, G, H, H, G, H, B, B, G, D, G, G, B, G] |Fitness : 0
    Chromosome #1 : [H, B, G, B, H, D, G, D, D, H, H, G, H, G, G, D, H, D, H, H] |Fitness : 0
    Chromosome #2 : [D, D, D, G, B, B, H, B, H, D, B, D, G, B, G, B, H, H, D, D]|Fitness : 1
    Chromosome #3 : [G, H, D, D, B, D, B, B, B, D, B, G, B, B, B, H, D, H, B, D]| |Fitness : 0
    Chromosome #4 : [H, D, G, B, B, G, B, H, B, H, D, H, D, D, G, B, B, G, G, D]| |Fitness : 0
    Chromosome #5 : [H, B, D, G, H, H, B, D, H, G, G, H, B, B, B, D, G, G, H, H]| |Fitness : 2
    Chromosome #6 : [G, B, H, D, D, H, D, H, H, D, B, G, B, H, B, D, B, G, B, D] |Fitness : 1
    Chromosome #7 : [D, H, B, B, H, B, H, G, D, G, H, H, G, G, D, H, B, G, B, B]| |Fitness : 2
    Chromosome #8 : [G, H, H, H, D, H, G, H, D, B, H, G, H, D, D, D, G, H, G, H] |Fitness : 2
    Chromosome #9 : [B, G, D, H, G, H, B, D, H, B, G, D, B, H, H, G, G, H, B, B] |Fitness : 1
    voila les méthode:

    //méthode qui intialiser la population
    public  Population initialisPopulation() {
    	  for(int i=0;i<chromosomes.length;i++) {  
    	   chromosomes[i]= new Chromosom(AlgoGenetique.lchro).initialiseChromosome();                     
    	  }
    
    //méthode qui intialiser la population
    public Chromosom initialiseChromosome(){  
    	  char a[]= {'H','B','D','G'};
    	  int x= a.length;
    	  Random rd=new Random();
    	  for(int i=0;i<genes.length;i++) {
    	    int k= rd.nextInt(x);
    		genes[i]=a[k];                }
    	return this;
    	}
    //méthode tri_selection
    public  void tri_selection(Population p,int l) {
             Chromosom ch=new Chromosom(p.getChromosomes()[0].getGenes().length);
             for (int i = 0; i < p.getChromosomes().length - 1; i++) { 
                int index = i;  
                for (int j = i + 1; j < p.getChromosomes().length; j++){
                 if ( p.getChromosomes()[j].getFitness( p.getChromosomes()[j],l) >  p.getChromosomes()[index].getFitness(p.getChromosomes()[index],l)){ 
                        index = j;}     
                }
              ch=p.getChromosomes()[index];
             p.getChromosomes()[index]=p.getChromosomes()[i];
              p.getChromosomes()[i]=ch;
    	}}
    //méthode  sortByFitness
    public void sortByFitness(int l){
     Arrays.sort(chromosomes,(chromosome1,chromosome2)->{
     int flag=0;
    if(chromosome1.getFitness( chromosome1, l)>chromosome2.getFitness(chromosome2,l)) flag=-1;
     else if(chromosome1.getFitness(chromosome1,l)<chromosome2.getFitness(chromosome2,l)) flag=1;
    return flag;
       });
    }
     

    -
    Edité par zozozi 29 juin 2020 à 3:41:01

    • Partager sur Facebook
    • Partager sur Twitter
      29 juin 2020 à 3:40:17

      Bonjour,

      Mauvais titre

      Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.

      Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).

      De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.

      Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.

      Pour modifier votre titre, éditez le premier message de votre sujet.

      (titre originel : problème en java)

      Liens conseillés

      • Partager sur Facebook
      • Partager sur Twitter
        29 juin 2020 à 7:40:14

        Bonjour,

        Déplacement vers un forum plus approprié

        Le sujet est déplacé de la section Javascript vers la section Langage Java

        • Partager sur Facebook
        • Partager sur Twitter

        Pas d'aide concernant le code par MP, le forum est là pour ça :)

          29 juin 2020 à 11:24:48

          //méthode qui intialiser la population
          public  Population initialisPopulation() {
                for(int i=0;i<chromosomes.length;i++) { 
                 chromosomes[i]= new Chromosom(AlgoGenetique.lchro).initialiseChromosome();                    
                }
           
          //méthode qui intialiser le chromosome
          public Chromosom initialiseChromosome(){ 
                char a[]= {'H','B','D','G'};
                int x= a.length;
                Random rd=new Random();
                for(int i=0;i<genes.length;i++) {
                  int k= rd.nextInt(x);
                  genes[i]=a[k];                }
              return this;
              }
          //méthode tri_selection
          public  void tri_selection(Population p,int l) {
                   Chromosom ch=new Chromosom(p.getChromosomes()[0].getGenes().length);
                   for (int i = 0; i < p.getChromosomes().length - 1; i++) {
                      int index = i; 
                      for (int j = i + 1; j < p.getChromosomes().length; j++){
                       if ( p.getChromosomes()[j].getFitness( p.getChromosomes()[j],l) >  p.getChromosomes()[index].getFitness(p.getChromosomes()[index],l)){
                              index = j;}    
                      }
                    ch=p.getChromosomes()[index];
                   p.getChromosomes()[index]=p.getChromosomes()[i];
                    p.getChromosomes()[i]=ch;
              }}
          //méthode  sortByFitness
          public void sortByFitness(int l){
           Arrays.sort(chromosomes,(chromosome1,chromosome2)->{
           int flag=0;
          if(chromosome1.getFitness( chromosome1, l)>chromosome2.getFitness(chromosome2,l)) flag=-1;
           else if(chromosome1.getFitness(chromosome1,l)<chromosome2.getFitness(chromosome2,l)) flag=1;
          return flag;
             });
          }
          • Partager sur Facebook
          • Partager sur Twitter
            29 juin 2020 à 18:19:48

            Avant toute chose, je proposerais de transformer cette assiette de spaghettis en code orienté objet en utilisant:

            -Des classes avec de vraies méthodes.

            -Des variables encapsulées, et non visible de l'extérieur, se manipulant uniquement avec les méthodes.

            -Des enum

            Ensuite, tu peux utiliser l'interface Comparable sur ta classe Chromosome, ou utiliser un Comparator

            • Partager sur Facebook
            • Partager sur Twitter
              29 juin 2020 à 19:19:10

              @zozozi Bonjour, merci de bien vouloir changer le titre de votre sujet comme demandé, en fonction de votre problématique.
              • Partager sur Facebook
              • Partager sur Twitter

              problème en java

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown