Finding the closest object can be slightly more complicated than simply getting the
neighbors, because it's possible that the closest object is not within an object's
neighborhood. However, assuming that some number of neighbors are found for your
agent, the following code should help:
+ to find-closest-neighbor:
closestNeighbor (object).
distance, minDistance (float).
# start with an arbitrarily high distance
minDistance = 1000000.
foreach i in (self get-neighbors): {
distance = | (self get-location) - (i get-location) |.
if distance < minDistance: {
minDistance = distance.
closestNeighbor = i.
}
}
return closestNeighbor. |
If there are no neighbors within the local neighborhood then it is sometimes necessary
to do a search of all agents in the simulation. To do this, the code above can be
modified by using an all
statement (Section 4.6) in place of the "self get-neighbors" expression:
foreach i in (all "Reals") {
# code to select the closest neighbor
} |