Search code examples
netlogo

Copy the link breed variable in the patch below


I have a network of nodes and links. This figure

enter image description here

is a capture of the world. The graph represents streets of a city. I have imported a shapefile with the gis extension. The gray lines are links, black dots are nodes and red dots represent people. The people move heading to the next node. In a street corner, the red dot chooses next street by examining the variable popularity owned by the link.

The links breed has a variable, popularity, whose value I would like to copy in the patches that are below.

If I try, for example, something like this to access patches under links will produce an error

ask links [show [(list pxcor pycor)] of patch-here]

Another approach can be to access links variable popularity from patches, but I do not know how to do it.

The reason why I want this is because I want to write in a file a matrix of popularity values and its position in the matrix should correspond with the position of the link in the world. Thus, the patches below the links would give me the matrix form. I have a procedure that for each patch writes the value of the patch in a file. However, I do not know how to pass the popularityvalue from the link to the patch below it.

Is there any way to copy a link owned variable to its patch?

Regards


Solution

  • If someone has a better way of doing this (or can simplify my code), feel free. Here is a complete working example. Copy it into an empty NetLogo model and run it to see it work.

    The setup procedure just creates some nodes and links with appropriate test values and then calls the transfer-link-values procedure, which does what I think you want. The setup procedure then puts the values into the patch labels to display them and see the results.

    The way the transfer-link-values procedure works is to create a turtle at one end of the link, and that turtle moves toward the other end of the link transferring the value as it goes. When it gets to the other end, the turtle dies.

    patches-own [patch-popularity]
    links-own [link-popularity]
    
    to setup
      clear-all
      create-turtles 10 [ setxy random-xcor random-ycor]
      while [ any? turtles with [not any? my-links] ]
      [ let to-pair turtles with [not any? my-links]
        let thisNode one-of to-pair
        ask thisNode
        [ create-link-with one-of other to-pair
          [ set link-popularity 5 + random 5 ]
        ]
      ]
    
      transfer-link-values
      ask patches [ if patch-popularity != 0 [set plabel patch-popularity ] ]
    end
    
    to transfer-link-values
      ask links
      [ let start-node one-of both-ends
        let this-link self
        let end-node nobody
        ask start-node [ set end-node [other-end] of this-link ]
        let transfer-value link-popularity
        ask start-node
        [ hatch 1
          [ face end-node
            if transfer-value > patch-popularity
              [ ask patch-here [ set patch-popularity transfer-value ] ]
            while [ not member? end-node turtles-here ]
            [ forward 1
              if transfer-value > patch-popularity
                [ ask patch-here [ set patch-popularity transfer-value ] ]
            ]
            if transfer-value > patch-popularity
                [ ask patch-here [ set patch-popularity transfer-value ] ]
            die
          ]
        ]
      ]
    end