1

Model Details I'm attempting to code territory selection in NetLogo. Turtle 0 selects a territory center, and builds a territory. It select patches based on value of food, discounted by the distance away (food / # patches away from center of the territory), selecting patches in order of discounted value. It stops when it meets total food requirements. Patches selected don't have to be connected to the territory, but should become connected as the turtle walks to the selected patch. These patches crossed are added as travel corridors so that the territory remains contiguous. After Turtle 0 has finished building its territory, Turtle 1 sprouts and repeats the process to select its own territory, then Turtle 2, and so on. Patches belonging to a turtle's territory are unavailable to other turtles.

The Problem Existing territories should be seen as obstacles. Turtles need to identify and go around these obstacles to reach their destination patch using the shortest path possible.

In my current code, turtles will select patches on the other side of an existing territory because they just travel across it. They won't have added a travel corridor to get there, however, because the patches on the way there were already owned.

What are some ways I might tell turtles that if they encounter owned patches (existing territories), they must go around using the shortest distance possible so they can build a travel corridor to the selected patch? I realize this is a complex question, made even more so if actual distances are calculated in (connected question: NetLogo: measure real travel distances around obstacles before choosing destination). I've been racking my brain on this one, so any ideas are helpful. Thanks in advance!

patches-own [
    benefit   ;; ranges 0.1-1 and represents food available in the patch
    owner ]   ;; patches are owned once selected for a territory

turtles-own 
   [ sum-value ]   ;; sum of values of patches in my territory   

globals [threshold = 25]

to setup
    ask patches [ set owner nobody ]
end

to go 
    ask turtles [build-territory]
    tick
end

to build-territory
     if sum-value > threshold [stop] ;; keeps picking patches for territory until I've met my threshold
     pick-patch
     reproduce  ;; sprouts a new hatchling when done building territory
end 

to pick-patch
    let _destination highest-value  ;; this is calculated in reporters, below
    ifelse _destination != nobody [
    face _destination forward 1   

      if patch-here = _destination  ;; add the patch once reached
        [ claim-patch _destination ]

      if patch-here != _destination   
        [ if owner = nobody [claim-travel-patch ]]  ;; add a travel patch while walking to selected patch
        [ if owner != nobody [avoid-obstacle]]  ;; or avoid the obstacle of existing territories
    ]

    [stop] ;; if there is no _destination
end

to claim-patch [_patch]
     ask _patch [set owner myself]
     set sum-value sum-value + (benefit / (distance start-patch))
     set pcolor [color] of self
     ;; etc....
end

to claim-travel-patch [_patch]
     ask _patch [set owner myself]
     set pcolor [yellow] 
     ;; etc....
end

to avoid-obstacle
     ;; need to identify some means of going around owned patches
     ;; ideally this will use the shortest route possible....
     ;; but even if not shortest route, any ideas for identifying a new path
     ;; to avoid the obstacle and reach the destination patch?
end

to reproduce
  if sum-value > threshold [ ask patch 75 75 [sprout 1 ] ]
end    

;;;; --reporters for calculations:-- 

to-report highest-value  ;; calculates value, benefit / cost.
     let available-destinations patches with [owner = nobody]  
     report max-one-of available-destinations [benefit-to-me / cost-to-me]          
end

to-report benefit-to-me
     report mean [benefit] of patches in-radius 1   ;; this is basically a moving windows analysis to find a cluster of high-benefit patches.
end

to-report cost-to-me
     report distance myself   ;; later, this will hopefully account for actual travel costs (non-euclidean distance), including around other territories. I think this is complicated, so ignoring for now in this question.
end
Community
  • 1
  • 1
User847462
  • 81
  • 10
  • this might give you an idea: http://stackoverflow.com/questions/5303538/algorithm-to-find-the-shortest-path-with-obstacles – timbmg Mar 06 '17 at 22:23
  • If you didn't get much help here, it's probably because your question is so big and broad. Really helping you with everything you've asked would probably take me 30 or minutes or more. Try asking smaller questions, one question at a time? Those are much easier to answer. – Seth Tisue Mar 21 '17 at 15:19
  • Thanks, I've pared down this question a bit to refocus it on obstacle avoidance and added a link to a separate but related question. – User847462 Mar 21 '17 at 20:03

0 Answers0