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

R Discussion :

Algorithme du voyageur de commerce


Sujet :

R

  1. #1
    Invité
    Invité(e)
    Par défaut Algorithme du voyageur de commerce
    Bonjour,

    Je cherche à faire tourner les algorithmes suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    maketsp=function(nCities)
    {
        positions = 2*runif(nCities,2)-1
        distances = matrix(rep(0,(nCities*nCities),nCities,nCities)) 
        for (i in seq(nCities))
        {
            for (j in seq(i+1,nCities))
            {
                distances[i,j] = sqrt((positions[i,0] - positions[j,0])**2 + (positions[i,1] - positions[j,1])**2)
                distances[j,i] = distances[i,j]
                print (distances)
            }
        }
    }
    Le code d'erreur est le suivant :

    Error in positions[i, 0] : incorrect number of dimensions
    In addition: Warning message:
    In runif(nCities, 2) : NAs produced
    Je ne vois pas comment implémenter la matrice distance

    Le deuxième algorithme est le suivant:

    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
    greedy=function(distances)
    {
        nCities = seq(1,distances)
        distanceTravelled = 0
     
        cityOrder = seq(0,nCities)
        cityOrder[0] = runif(nCities)
        distances[,cityOrder[0]] = Inf
     
        for ( i in seq(nCities-1))
        {
            cityOrder[i+1] = wich.min(distances[cityOrder[i],])
            distanceTravelled  = distances[cityOrder[i],cityOrder[i+1]]
            dist[,cityOrder[i+1]] = Inf
            distanceTravelled = distances[cityOrder[nCities-1],0]
            return(cityOrder)
            return(distanceTravelled)
        }
    }
    L'erreur est la suivante :

    Error in seq.default(0, nCities) : 'to' must be of length 1
    Les objets sont des matrices mais je ne sais pas comment les implémenter.
    Dernière modification par Invité ; 19/03/2014 à 21h53. Motif: [CODE] mon code [/CODE] (sélection du code puis bouton # de l'éditeur)

  2. #2
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2013
    Messages : 75
    Points : 191
    Points
    191
    Par défaut RTFM
    Erreur1:
    les indices débutent à partir de 1 pas 0

    Erreur2:
    nCities doit être un entier, c'est pourtant dit dans le message d'erreur

  3. #3
    Invité
    Invité(e)
    Par défaut Réponse
    Pour l'erreur 1, je remplace les indices 0 par des 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    maketsp=function(nCities)
    {
        positions = 2*runif(nCities,2)-1
        distances = matrix(rep(0,(nCities*nCities),nCities,nCities)) 
        for (i in seq(nCities))
        {
            for (j in seq(i+1,nCities))
            {
                distances[i,j] = sqrt((positions[i,1] - positions[j,1])**2 + (positions[i,1] - positions[j,1])**2)
                distances[j,i] = distances[i,j]
                print (distances)
            }
        }
    }
    j'obtiens l'erreur suivante :

    Error in positions[i, 1] : incorrect number of dimensions
    In addition: Warning message:
    In runif(nCities, 2) : NAs produced
    Pour l'erreur 2,j'indique nCities comme un entier :

    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
    greedy=function(distances)
    {
        nCities = 10
        distanceTravelled = 0
     
        cityOrder = seq(0,nCities)
        cityOrder[0] = runif(nCities)
        distances[,cityOrder[0]] = Inf
     
        for ( i in seq(nCities-1))
        {
            cityOrder[i+1] = wich.min(distances[cityOrder[i],])
            distanceTravelled  = distances[cityOrder[i],cityOrder[i+1]]
            dist[,cityOrder[i+1]] = Inf
            distanceTravelled = distances[cityOrder[nCities-1],0]
            return(cityOrder)
            return(distanceTravelled)
        }
    }
    j'obtiens l'erreur suivante :

    Error in distances[, cityOrder[0]] = Inf : 
      incorrect number of subscripts on matrix
    Dernière modification par Invité ; 01/04/2014 à 07h37. Motif: Insertion de code = ajout des balises [CODE] (bouton # de l'éditeur), erreurs = balises [PRE]

  4. #4
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour,

    Je ne me suis pas penchée en détails sur votre code mais je pense déjà qu'un des problèmes vient du fait que l'élément "positions" est un vecteur et non une matrice, donc pour accéder à l'élément i de "positions" au sein de votre fonction, il faudrait plutôt faire : positions[i].

    Ensuite, il y a clairement un problème avec votre utilisation de la fonction "runif". Je pense que vous devriez vérifier si les paramètres passés à cette fonction sont conformes. Pour info, pour accéder à l'aide de cette fonction : ?runif.

    En espérant que cela vous aide un peu, bonne continuation !


    Cordialement,


    A.D.

Discussions similaires

  1. Réponses: 6
    Dernier message: 17/12/2015, 17h42
  2. Algorithme du Voyageur de Commerce ou TSP en FORTRAN
    Par MINOTE dans le forum Fortran
    Réponses: 0
    Dernier message: 20/12/2009, 10h30
  3. Voyageur de commerce & algorithme glouton
    Par tagsOf dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 27/11/2009, 22h15
  4. Application d'un algorithme génétique au voyageur de commerce
    Par khayyam90 dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 11/12/2008, 14h21
  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