Changing Node ID with every Setup in Netlogo

一世执手 提交于 2020-01-05 10:19:43

问题


We try to show a simple infection via Netlogo. For our purpose we need to start the infection with the same turtle for several times. But right now with every setup another turtle begins with the infection. We already tried to work with the Node ID, but unfortunately the ID of the different turtles changes with every setup, too. We are out of ideas but maybe there is a way to sove this problem I am happy for any answers :) This is our Code so far:

    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

Thank you a lot.


回答1:


I am a little unclear so am giving bits of different answers for different situations.

If the turtles are different each time, what do you mean by 'the same turtle'. For example, do you mean the turtle in a particular position? If so, you could select the turtle on the appropriate patch.

If it doesn't matter which particular turtle it is (just that it's the same turtle), then the simplest approach is to set the random-seed. Then every time you run any random process (including choosing one-of the turtles to select the starting infection, or ask turtles to do something), NetLogo will use the same chain of random numbers. Of course, if you are still building your model, then adding new pieces of code that change how many calls are made to the random number generator will lead to a different chain, but rerunning with the same code will give the identical run.

You may need to use with-local-randomness and random-seed new-seed if you want to have some parts actually change.




回答2:


The problem is that nw does not store the WHO variable this is to avoid conflict with already existing turtles in a model.

A work-around would be assigning each turtle a separate id variable and setting that to who.

turtles-own [informed? id]

in turtles creation asign them each the id thus

set id who

you may want to write a conversion procedure like this

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

and use the copy. Of course you would not use

turtle 74 

but

one-of turtles with [id = 74]


来源:https://stackoverflow.com/questions/34908040/changing-node-id-with-every-setup-in-netlogo

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!