powered by NetLogo

view/download model file: VisualizationCommunities.nlogo

WHAT IS IT?

This is a demonstration of the utility of network visualization and in particular spring layout algorithms.

HOW IT WORKS

There are distinct groups of nodes. Nodes in the same group are much more likely to share an edge than nodes in different groups. Can you use a layout algoritm to detect how many groups there are?

HOW TO USE IT

Click on SETUP to generate a network with random coordinates.

Click on LAYOUT to use a spring layout algorithm to reposition the nodes.

Click on COLOR GROUPS to verify that the layout has correctly helped you to infer the grouping.

CREDITS AND REFERENCES

This model was created by Lada Adamic 2012
Feel free to use it and modify it as you like with or without attribution.

CODE

globals [
  num-communities
]

turtles-own [
  group
]


to setup
  ;; (for this model to work with NetLogo's new plotting features,
  ;; __clear-all-and-reset-ticks should be replaced with clear-all at
  ;; the beginning of your setup procedure and reset-ticks at the end
  ;; of the procedure.)
  __clear-all-and-reset-ticks
  set-default-shape turtles "circle"
  
  set num-communities 4
  let batch 1
  while [batch <= num-communities] [
   
    crt 60 [
      set group batch
    ]
    set batch (batch + 1)
  ]
  
  ask turtles [
    set color white
    set xcor random-xcor
    set ycor random-ycor
  ]

  repeat (num-communities * 175) [
    ask one-of turtles [
      let mygroup group
      
      ifelse (random-float 1.0 < 0.93) [
        if any? other turtles with [not link-neighbor? myself and (group = mygroup)] [
          create-link-with one-of other turtles with [not link-neighbor? myself and (group = mygroup)]
        ]
      ] [
        if any? other turtles with [not link-neighbor? myself and (group != mygroup)] [
          create-link-with one-of other turtles with [not link-neighbor? myself and (group != mygroup)]
        ]
      ]
    ]
  ]
end


to do-layout
  repeat 5 [layout-spring turtles links 0.2 4 4]
  display
end


to colorgroups
  let batch 1
  while [batch <= num-communities] [
   
    let this-color (random 256)
    ask turtles with [group = batch] [
      set color this-color
    ]
    set batch (batch + 1)
  ]
end