2016-01-20 37 views
1

我们试图通过Netlogo显示简单感染。为了我们的目的,我们需要用同一只乌龟多次开始感染。 但是现在每一次安装的时候,另一只乌龟从感染开始。我们已经尝试使用Node ID,但不幸的是,不同的乌龟的ID也随着每个设置而改变。我们出的主意,但 也许有对SOVE这个问题,我很乐意为任何答案:) 这是我们到目前为止的代码的方式:用Netlogo中的每个安装程序更改节点ID

extensions [nw] 


    globals 
    [ 
    num-informed 
    informed-size 
    ] 

    turtles-own 
    [ 
    informed? 
    ] 

    to setup 
     clear-all 
     nw:load-graphml "JK_nachnamen.graphml" 
     ask turtles [ set size 1.5 ] 
     layout-radial turtles links turtle 61 
     ask turtles [set color red] 
     ask turtles [set shape "dot"] 
     ask links [set color grey + 1.5] 
     ask patches [set pcolor white] 
     ask turtles [set label-color black] 
     ask turtles [set informed? false] 
     ask turtle 72 
     [ 
     set informed? true 
     set color green 
     ] 
     set num-informed 1 
     set informed-size 2 
     reset-ticks 
     nw:save-graphml "JKnachnamennetlogo.graphml" 
    end 

    to spread 
if (count turtles with [informed? = true] > .7 * count turtles) [stop] 
    ask turtles with [ informed? = true ] 
    [ 
     ask link-neighbors with [not informed?] 
     [ 
     if (random-float 1 <= 0.01) 
     [ 
     set informed? true 
     show-turtle 
     set color green 
     ] 
     ] 
     ] 

    set num-informed count turtles with [informed? = true] 
    tick 
    end 

谢谢你很多。

+0

顺便说一句,你应该结合你的各种'ask turtle'语句 – JenB

+0

文件JK_nachnamen.graphml在每个节点中都有一个标识符吗? – JenB

回答

1

问题是nw不存储WHO变量,这是为了避免与模型中已有的龟相冲突。

解决方法是为每只乌龟分配一个单独的id变量并将其设置为谁。

turtles-own [informed? id] 

龟创作ASIGN他们每个ID从而

set id who 

你可能想要写一个转换程序,这样

to convert 
    nw:load-graphml "JK_nachnamen.graphml" 
    ask turtles [set id who] 
    nw:save-graphml file-name "JK_nachnamen(id).graphml" 
end 

,并使用该副本。当然,你不会用

turtle 74 

one-of turtles with [id = 74] 
+0

谢谢你的回答,我是初学者,所以请原谅我的下列问题:我的模型是导出的gephi文件,gephi文件的节点在Netlogo中显示为海龟(如果我没有弄错),我需要使用特定节点(我用gephi标识)来启动感染。如何为该特定节点分配新的ID?我怎么能确定,我不会为另一个节点分配新的ID? –

+0

我不太熟悉gephi,但这个问题可能有助于http://stackoverflow.com/questions/24858226/exporting-netlogo-data-to-graph-with-nodes-and-edges –

+0

你用颜色来表示意义? –

1

我针对不同的情况不同的答案有点不清楚所以我给位。

如果海龟每次都是不同的,那么你说'同一只海龟'是什么意思。例如,你是否认为乌龟处于特定的位置?如果是这样,你可以在适当的补丁上选择乌龟。

如果它不是什么特定的乌龟(只是它是同一只乌龟),那么最简单的方法就是设置random-seed。然后每次运行任何随机过程(包括选择one-of乌龟选择开始感染,或ask turtles做某事),NetLogo将使用相同的随机数链。当然,如果你还在构建你的模型,那么添加新的代码来改变对随机数生成器的调用将导致不同的链,但用相同的代码重新运行将得到相同的运行。

如果您想要实际更改某些部件,您可能需要使用with-local-randomnessrandom-seed new-seed