使用Netlogo中的每个安装程序更改节点ID

时间:2016-01-20 18:47:10

标签: netlogo

我们试图通过Netlogo显示一个简单的感染。为了我们的目的,我们需要用同一只乌龟开始感染几次。 但是现在每次设置另一只乌龟都是从感染开始的。我们已经尝试使用节点ID,但不幸的是,不同龟的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

非常感谢你。

2 个答案:

答案 0 :(得分:1)

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

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

@Test

在海龟创造中将每个id分配给它们

turtles-own [informed? 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 

答案 1 :(得分:1)

我有点不清楚,所以给出了不同情况的不同答案。

如果海龟每次都不同,你的意思是“同一只乌龟”。例如,你的意思是特定位置的乌龟?如果是这样,你可以在适当的补丁上选择乌龟。

如果它与哪只乌龟无关(只是它是同一只乌龟),那么最简单的方法是设置random-seed。然后每次运行任何随机过程(包括选择one-of海龟来选择起始感染,或ask turtles做某事),NetLogo将使用相同的随机数链。当然,如果您仍在构建模型,那么添加新的代码片段会改变对随机数生成器进行的调用次数将导致不同的链,但使用相同的代码重新运行将提供相同的运行。

如果您希望某些部分实际更改,则可能需要使用with-local-randomnessrandom-seed new-seed