IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Programme qui affiche le même résultat pour des tableaux de compteurs deux à deux différents


Sujet :

avec Java

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Novembre 2015
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 156
    Par défaut Programme qui affiche le même résultat pour des tableaux de compteurs deux à deux différents
    Je suis en train de mettre en place un programme comparant les nombres de coup de BFS, DFS, A* avec deux heuristiques pour résoudre le jeu du taquin.

    J'ai un problème stupide... Mon programme compte le même nombre de coups pour BFS et DFS ensemble d'une part et les deux A* d'autre part...

    Pourtant, j'affiche à chaque fois quatre tableaux bien différents à partir du main dans une classe Project et j'affecte des valeurs différentes à partir d'une classe Problem

    La partie du code qui fait défaut est celle qui suit chez DFS (mais est équivalente à celle de BFS sauf la fin ou j'ai utilisé un frontier.add(child); pour mettre les fils en bas de la liste), je pense.

    En gros c'est une boucle while qui va explorer les fils d'un père aussi loin que possible dans la généalogie avant de revenir.
    A chaque tour les fils sont ajoutés en haut de la frontière grâce à frontier.push(child);
    A chaque tour le compteur du nombre de coup est incrémenté.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
        	while(!frontier.isEmpty()){
    			number_of_strokes_DFS+=1;
        		if(System.currentTimeMillis()-startTime>10000)break;
        		// We remove the current state from the frontier
        		current_state = frontier.pop();
        		// We get all possible actions from the current state
        		actions = current_state.getActions();
        		// We add the current state to already explored nodes
        		explored_nodes.add(current_state);
        		//System.out.println(current_state);
        		path.add(current_state);
     
        		// we found the goal
        		if(goal_test(current_state)){
            		/*for(State visited :path){
        			System.out.println(visited);
        		}*/
    				array_number_of_strokes_dfs.add(number_of_strokes_DFS);
        			System.out.println("nombres de coups DFS"+number_of_strokes_DFS);
        			number_of_strokes_DFS=0;
        			return current_state;
        		}
     
            	// We create every child
            	for (Action action : actions){
            		//System.out.println("action : " + action);
            		// we get a child from the execution of the current_state
            		State child = current_state.execute(action);
            		//System.out.println("we executed the action");
                	if(!explored_nodes.contains(child)&&!frontier.contains(child)){
                		// This child not being already explored nor int the frontier we add it to the last one
                		frontier.push(child);
                	}
            	}
     
        	}
    		array_number_of_strokes_dfs.add(-1);
     
    		return finalState;
     
        }
    En effet, quand je laisse array_number_of_strokes_dfs.add(number_of_strokes_DFS); j'obtiens dans le fichier resultats_strokes créé dans le main deux mêmes résultats pour les tableaux de nombres de coups pour DFS et le nombre de coup pour BFS. Ceci peut arriver une fois mais ce n'est pas vraisemblable pour tous les cas quand même!
    Alors que si je le change en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    array_number_of_strokes_dfs.add(0);
    J'obtiens une liste de zéro.
    J'imagine que ce doit être la même chose pour les A*.

    C'est une approche chirurgicale très "vétérinaire", de cause à effet, mais je pense être sur la bonne voie.

    Auriez vous une idée?

    J'ai mis mon projet en pièce jointe. Il se compose de trois classes dont les deux mentionnées ci dessus sont vraiment importantes, une interface et un truc marqué "E"
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Afficher 2 champs sur la même ligne pour des raisons de vérification
    Par FATENMRABET dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 23/09/2013, 16h22
  2. Réponses: 2
    Dernier message: 21/05/2013, 12h07
  3. Réponses: 1
    Dernier message: 29/12/2008, 15h21
  4. Menu principal pour des bases de données différentes ?
    Par Kareg dans le forum Modélisation
    Réponses: 30
    Dernier message: 20/08/2007, 16h10
  5. delete[] seulement pour des tableaux d'objets?
    Par Crisanar dans le forum C++
    Réponses: 7
    Dernier message: 22/10/2005, 19h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo