Search code examples
netlogosocial-networking

Network modelling using Netlogo


I am new in using NetLogo, so I hope you can help me with this code. I would like to build a network with two subnetwork, A and B, where A has N nodes and B beta*N nodes, where beta=0.5. Each network should be initialised with five fully connected nodes. I need to add a new node at a time, assuming that each has fixed out-degree k. Once a new node i comes into the network, it links to a randomly selected target node j. The other remaining k-1 nodes should be selected as following: with probability p, i should be linked to a random node of j's; with probability 1-p, i should be connected to another randomly selected node in A. On the other hand, the nodes in B should be linked (directed link) to each node in A with probability P. P can vary from 0 to 1.

What I already tried is built the two networks with N and alpha*N nodes respectively. But, as I said, I am new in using NetLogo and I am finding many difficulties to build this network that should be really easy in a different programming language, I would be more familiar with.

; Global variables

breed [agents agent]
breed [bagents bagent]


to setup

  clear-all

  setup-agent
  setup-bagent

end

; Defining agents

to setup-agent
  set-default-shape turtles "person" ; agent shape
  create-agents n-of-agents ; # of agents
  [set size 2 ; agent size
    set color white
   setxy (random-xcor) (random-ycor)
  ]

  ; Random Network
  ask agents [create-link-with one-of other agents with [not link-neighbor? myself]
    ask links [set color white]

  ]

end

; Defining bagents

to setup-bagent
  set-default-shape turtles "circle" ; bagents shape
  set beta=0.5
  let n-of-bagents beta*n-of-agents
  create-bagents beta*n-of-agents ; # of bagents
  [set size 2 ; bagent size
    set color red
   setxy (random-xcor) (random-ycor)

  ; Network
  ask bagents [create-link-with one-of other bagents with [not link-neighbor? myself]
    ask links [set color yellow]
  ]

end


to go

end

I hope you can help me to understand how to build such a network in NetLogo.

Many thanks


Solution

  • This does what you said. I don't think it's actually what you want as your algorithm is much better but still somewhat confused. But hopefully this gets you on the correct path.

    UPDATED to make one node add each tick

    globals
    [ beta
      prob
      k
    ]
    
    breed [A-agents A-agent]
    breed [B-agents B-agent]
    
    to setup
      clear-all
      set beta 0.5
      set prob 0.2
      set k 3
      setup-A-seed
      setup-B-seed
      reset-ticks
    end
    
    to go
      add-A-node
      if random-float 1 < beta [add-B-node]
      tick
    end
    
    ; Defining A seed network
    to setup-A-seed
      create-A-agents 5
      [ set shape "person"
        set size 2
        set color white
        setxy random-xcor random-ycor
      ]
      ask A-agents
      [ create-links-to other A-agents
        [ set color white ]
      ]
    end
    
    ; Defining B seed network
    to setup-B-seed
      create-B-agents 5
      [ set shape "circle"
        set size 2
        set color red
        setxy random-xcor random-ycor
      ]
      ask B-agents
      [ create-links-to other B-agents
        [ set color yellow ]
      ]
    end
    
    to add-A-node
      create-A-agents 1
      [ set shape "person"
        set size 2
        set color white
        setxy random-xcor random-ycor
    
        let target one-of other A-agents ; target is j in description
        create-link-to target
        repeat k - 1
        [ let candidates (other [link-neighbors] of target) with [not link-neighbor? myself]
          ifelse random-float 1 < prob or not any? candidates
          [ create-link-to one-of other A-agents with [not link-neighbor? myself]
            [ set color white ]
          ]
          [ create-link-to one-of candidates
            [ set color white ]
          ]
        ]
      ]
    end
    
    to add-B-node
      create-B-agents 1
      [ set shape "circle"
        set size 2
        set color red
        setxy random-xcor random-ycor
    
        let thisB self
        ask A-agents
        [ if random-float 1 < prob
          [ create-link-from thisB
            [ set color yellow
            ]
          ]
        ]
      ]
    end
    

    Some of the NetLogo issues I noticed in your code:

    • NetLogo does not use = for set
    • you must have space around mathematical operators (or NetLogo will think it's part of the name)

    Some of the things you need to think about in your algorithm:

    • why do you have an initial B network if all Bs connect to each A with fixed probability?
    • what do you do if the selected A doesn't have any edges to follow?

    As general advice, don't try writing something this complicated in one piece. Create your seed networks with 5 fully connected nodes. Make that work. Then do network A and make that work. Then bring in B. This iterative building is important for all programming languages. It is particularly important when using a new language so that you only have to debug one or two errors at a time and you know where the bugs are.