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

MATLAB Discussion :

Voyageur de Commerce


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Voyageur de Commerce
    Bonjour,

    Je cherche, à partir d'un fichier texte de créer un nouveau tableau associant chaque ville à un numéro.. .
    Le soucis c'est que je n'arrive pas a sélectionner les noms de chaque ville du fichier texte pour les mettre dans le tableau..
    Vous pouvez voir que ci dessous, je peux obtenir un tableau avec trois villes et leur associer un numéro.. le soucis c'est que j'aimerais pouvoir ajouter plus de villes (Il y a aussi le problème de créer un tableau contenant la distance entre chaque villes

    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
    fid=fopen('C:\mat\data.txt','r'); 
    k=fscanf(fid,'%c') 
    ville1='Lille'; 
    ville2='Amiens'; 
    ville3='Paris'; 
    Lille=1; 
    Amiens=2; 
    Paris=3; 
    fid2=fopen('C:\mat\data2.txt','wt'); 
    fprintf(fid2,'%s\t','Lille'); 
    fprintf(fid2,'%i\n',Lille); 
    fprintf(fid2,'%s\t','Amiens'); 
    fprintf(fid2,'%i\n',Amiens); 
    fprintf(fid2,'%s\t','Paris'); 
    fprintf(fid2,'%i\n',Paris); 
    fid2=fopen('C:\mat\data2.txt','r');
    (Au final, je devrais résoudre ce problème avec l'optimisation linéaire)

    Merci de votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Pense à refermer tes fichiers: fopen doit toujours être accompagné de fclose.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fid = fopen(...);
    % lecture , écriture ,...
    fclose(fid);
    Pour ce qui est de ta problématique, tu peux utiliser un tableau de cellules:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    villesNums = {'Lille' 'Amiens';
                    1        2} ;
    villesNums = [villesNums {'Paris' ; 3}];
     
    fid2=fopen('data2.txt','wt');
    fprintf(fid2,'%s \t %i\n',villesNums{:});
    fclose(fid2);

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Merci énormément pour ta réponse ! Et excuse moi du temps de réponse..
    J'ai apporté les modifications a mon ancienne fonction !
    Ca marche super bien

    Pour créer une matrice contenant les distances entre chaques villes, faut il que je crée la matrice manuellement en ajoutant les distances une à une ?
    Ou existe-t-il un moyen plus "facile" de remplir cette matrice ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par nephal Voir le message
    Pour créer une matrice contenant les distances entre chaques villes, faut il que je crée la matrice manuellement en ajoutant les distances une à une ?
    Si ton fichier est grand et que tu es armé de patience, évidemment

    Plus sérieusement oui, tu peux faire cela automatiquement avec du code à la suite de ton chargement.
    Une première fonction à regarder:
    Dernière modification par Invité ; 04/04/2013 à 11h39.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Merci, je vais me creuser un peu la cervelle pour résoudre mon soucis, pour l'instant j'était plutôt vers:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    %Création d'une matrice contenant les distances entres chaque villes%
    Distances=zeros(n+1)
    Distances(3,2)=10
    for i=2:n
        for j=2:n
            if Distances(i,j)>0
                Distances(j,i)=Distances(i,j)
            end
        end
    end
    Mais ça ne marche seulement dans le cas d'un ajout manuel de chaque ville !
    Je te tiens au courant dès que j'ai réussi a trouver comment utiliser la fonction que tu m'as dite

  6. #6
    Invité
    Invité(e)
    Par défaut
    La boucle peut se simplifier en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Distances = Distances + Distances.';
    Ou Distances = Distances + (Distances==0).*Distances.'; s'il y a risque que les valeurs transposées soient déjà présentes.

    Pour ce qui est de l'utilisation de la fonction unique, pense bien à regarder les arguments retournés

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    A vrai dire j'aimerais partir du fichier texte de départ contenant (sur chaque ligne) deux villes ainsi que leur distance associée !

  8. #8
    Invité
    Invité(e)
    Par défaut
    Ok moi j'étais resté sur le tableau de cellules
    Alors quelques lignes pour avoir de quoi partir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fid = fopen('C:\mat\data.txt','rt');
    T = textscan(fid,'%s %s %d')
    fclose(fid);

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Voila, tout marche super bien
    Maintenant je passe a l'optimisation linéaire pour résoudre mon problème du voyageur de commerce !
    Si j'ai des soucis je demanderais ici
    Encore merci

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Me revoilà !
    J'ai plutôt bien avancé dans mon problème, mais voila que j'ai un petit soucis..

    J'entre avec 'input' les numéros des villes ou je désire aller (les numéros vont de 1 à 23).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    a=input..
    b=input...
    c=input..
    Je complète une matrice contenant les distances entre toutes ces villes, mais voila que j'ai un problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dtt(1)=D(1,2)+D(2,3)+D(3,4)+D(4,5)+D(5,1);
    trajet1='1,2,3,4,5,1';
    Le résultat final contiendra toujours les chiffres 1,2,3,4,5 et non les chiffres que j'ai entré avec input.. Ni aurait-il pas un moyen de remplacer les numéros présents par les numéros associées aux villes entrées ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    dtt(12)=D(1,4)+D(4,5)+D(5,3)+D(3,2)+D(2,1);
    trajet12='1,4,5,3,2,1';
     
    trajet=[trajet1;trajet2;trajet3;trajet4;trajet5;trajet6;trajet7;trajet8;trajet9;trajet10;trajet11;trajet12;]
    trajet=cellstr(trajet);
    Distance_minimale=min(dtt)
    Opt_Tour=(find(dtt == Distance_minimale));
    Meilleur_Trajet=trajet(Opt_Tour)

  11. #11
    Invité
    Invité(e)
    Par défaut
    Je n'ai pas très bien compris ton problème
    Tu as juste à rentrer a, b et c dans ta matrice de distances: D(a,b).

    De plus concernant trajet: travailler avec un vecteur de valeurs et non caractères ne serait-il pas plus simple?

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Si je remplace tout par a,b,c,d,e ça voudrais dire que j'aurais bel et bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    trajet =
     
         3     4     5     6    25     3
         3     4     6     5    25     3
         3     4    25     6     5     3
         3     5     4    25     6     3
         3     5    25     6     4     3
         3     5     6     4    25     3
         3     4    25     5     6     3
         3    25     6     4     5     3
         3     6     4    25     5     3
         3     6     5     4    25     3
         3    25     5     4     6     3
         3     6    25     5     4     3
    Mais dans ce cas là je pourrais plus utilisé cellstr

  13. #13
    Invité
    Invité(e)
    Par défaut
    Plus de cellstr en effet, et alors?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Distance_minimale=min(dtt)
    Opt_Tour=(find(dtt == Distance_minimale));
    >> Comment trouver la valeur minimale (ou maximale) avec sa position ?
    Puis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Meilleur_Trajet = trajet(Opt_Tour,:)

Discussions similaires

  1. Probleme Voyageur de Commerce - Recuit Simulé
    Par dinver dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 21/06/2009, 22h26
  2. Voyageur de commerce avec Lisp
    Par abdo dans le forum Lisp
    Réponses: 2
    Dernier message: 11/03/2007, 02h42
  3. voyageur de commerce par recuit simulé
    Par siviuze dans le forum C
    Réponses: 6
    Dernier message: 11/01/2007, 16h14
  4. Voyageur de commerce, mais en plus compliqué
    Par Krispy dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 16/02/2004, 08h44
  5. Voyageur de commerce
    Par senke dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 27/09/2002, 12h51

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