2010-06-08 9 views
0

Actuellement, je travaille sur un programme Netlogo où j'ai besoin d'utiliser des nœuds et des liens pour le problème de routage de véhicules. (les liens sont appelés des rues dans le programme)Erreur lors de la mise en table, seules les constantes sont autorisées?

Ici j'ai quelques problèmes pratiques de la façon d'entrer la vitesse de liaison variable dans une table avec un autre noeud. Les constantes comme 200 etc sont bien. Je en ligne trouvé quelques exemples où les variables sont utilisées, mais je ne sais pas pourquoi je continue à obtenir l'erreur suivante:

Expected a constant.

(ou pourquoi netlogo attend une constante)

Voici la pièce correspondante du code:

extensions [table] 
streets-own [linkspeed linktoll] 
nodes-own [netw] 

;; In another piece of code linkspeed is assigned successfully to the links 

to cheapcalc 

    ;; start conditions set costs very high 300000 

    ;; state 3 unsearched state 2 searching state 1 searched (for later purposes) 

    ask nodes [ 

    set i 0 set j count nodes set netw table:make 


    while [i < j][ 


    table:put netw (i) [3000000 3] set i (i + 1)]] 


    set i 0 let k 0 

    ask node 35  ;; here i use node 35 as an example. 

        ;; node 35 is connected to node 34, 36, 20 and 50 

    [table:put netw (35) [0 1] ;; node need to search costs to travel to itself 

            ;; putting constants is ok. 

    while [i < j] 

     [ask my-links 

      [ask both-ends 

       [if (who != 35) [set color blue  

;;    set temp ([linkspeed] of street 35 who) ;; here my real goal is to put this in stat of i. but i is easier than linkspeed. 

       table:put netw (who) [ i 2 ] 

       ]    

      ] ] 


     set i (i + 1)] ] ;; next node for later, no it is just repetition of the same. 


end 

J'espère que quelqu'un sait ce qui se passe ...

Répondre

1

Le problème est très probablement pas mettre une variable dans une table, mais mettre une variable dans une liste (que vous mettez ensuite dans une table).

Modifier la ligne ci-dessous:

 table:put netw (who) [ i 2 ] 

à:

 table:put netw (who) (list i 2) 

Cette - (liste i 2) - vous permet de générer une liste de variables, vous ne pouvez pas le faire dans l'autre sens - [i 2].

Espérons que cela aide.