Netlogo: create small-world network while running

﹥>﹥吖頭↗ 提交于 2019-12-24 07:05:36

问题


I'm trying to generate a small-world type of network (https://en.wikipedia.org/wiki/Small-world_network) in my Netlogo model which is created throughout the model itself; people get to know one another while the model is running.

I know how to generate a small world model in Netlogo in the setup. But how do you generate a small world network on the go?

My code for generating a small world during the setup is as follows.

breed [interlinks interlink] ;links between different breeds
breed [intralinks intralink] ; links between same breeds

to set_sw_network
  ask turtles[
    let max-who 1 + max [who] of turtles
    let sorted sort ([who] of turtles)
    foreach sorted [ x ->
      ask turtle x [
        let i 1
        repeat same_degree + dif_degree [
          ifelse [breed] of self = [breed] of turtle (( x + i ) mod max-who)
            [create-intralink-with turtle (( x + i ) mod max-who)]
            [create-interlink-with turtle (( x + i) mod max-who)]
          set i i + 1
        ]
      ]
    ]
      repeat round (rewire_prop * number_of_members) [    ;rewire_prop is a slider 0 - 1 with steps of 0.1
        ask one-of turtles [
          ask one-of my-links [die]
          create-intralink-with one-of other turtles with [link-with self = nobody]
        ]
      ]
  ]
end

But, I am not interested in creating a small world at the beginning. I'm interested in creating a network with small world properties throughout the model. Currently, I do have this on the go create-link feature in my model, but I'm not sure how to tweak it so it results in a small world type of network:

to select_interaction:
  ommitted code: sorts pre-existing links and interacts with them
  if count my-links < my_degree
  [
    repeat number_of_interactions_per_meeting
    [
      let a select_turtle  ;delivers a turtle with link to self = nobody
      if a != nobody
      [
        ifelse [breed] of a = [breed] of myself
        [
          create-intralink-with a
          [
            set color cyan
            interact
          ]
        ]
        [
          create-interlink-with a
          [
            set color orange + 2
            interact
          ]
        ]
      ]
   ]
  ]
end

At the moment, my strategy is to give every turtle a variable for my_degree that is based on the distribution of the given social network. But the question remains, if this is a good strategy at all, then what is the correct distribution for a small world network?

pseudo-code for this strategy:

to setup-turtles
  If preferential attachment: set my_degree random-poisson 'mean'
  If small world: set my_degree ????? 'mean'
end

Any insight would be wonderful.

来源:https://stackoverflow.com/questions/48319585/netlogo-create-small-world-network-while-running

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