Miki
Miki

Reputation: 129

Netlogo: sum within a neighborood

I need some help. My issue is the following

I want to solve the following formula

sum (Zi - Zj)^2 where Zi is a constant for an individual i and Zj is the value for a generic individual j that is within a neighborood with radius = 1 of the individual i. Therefore, I want a sum of the square of the distance between a constant value and the value of Z for each individual within that radius.

Sorry for the absence of my code, but I have no idea about how to approach this issue

I will write an example

Zi = 1 The neighborhood of the individual i is composed of 2 agents, let say a and b where Za = 3 and Zb = 5

I want the following result

(1-3)^2 + (1-5)^2 = 20

Thanks

Upvotes: 1

Views: 281

Answers (1)

JenB
JenB

Reputation: 17678

I think you want to do the sum of squared differences between a constant and a list of numbers, where the list of numbers is the value of Z for several turtles. If this is correct, then the following is a complete model that does what you want.

turtles-own [ varZ ]

to setup
  clear-all
  create-turtles 40
  [ setxy random-xcor random-ycor
    set varZ random 10
    set color blue
  ]
  testme
end

to testme
  ask one-of turtles
  [ set color red
    let friends other turtles in-radius 4
    ask friends [ set color yellow ]
    type "my varZ is: " print varZ
    type "sum of squared differences is: " print sum-sq-diff varZ [varZ] of friends
  ]
end

to-report sum-sq-diff [#constant #listvals]
  report reduce + (map [ thisval -> (thisval - #constant) ^ 2 ] #listvals)
end

The procedure sum-sq-diff takes two inputs: a constant and a list of values. It calculates the squared sum of differences between the constant and each value in the list. The map does the square of differences and creates a list of those values, then the reduce sums across the list. You can test is by simply typing sum-sq-diff 1 [ 2 3 4 ] in the command centre and you will get back 14 (which is (2-1)^2 + (3-1)^2 + (4-1)^2).

The rest of the code is an example of how to use this procedure in the context I think you want, pulling out the turtles within some radius and using their variable values as the list.

Upvotes: 1

Related Questions