如何在 netlogo 中为几组代理创建区域?

How can I create territories for several groups of agents in netlogo?

我是 Netlogo 的新手,这是我第一次 post 进入论坛。 我需要创建在栖息地或领土内移动的动物代理组。领土可以重叠。更准确地说,我需要在不同地区移动的男性特工和在其他地区移动的几组女性特工。

这就是我到目前为止所做的。我只为一组女性和一组男性创建了一个领地。那不正是我需要的。

    globals [fragments] 
breed [preys prey] 
breed [femaletigers femaletiger] 
breed [kids kid] 
breed [maletigers maletiger] 

turtles-own 
[ 
  energy 
  age 
  gender 
  territory 
] 

to setup 
  clear-all 
  setup-fragments 
  ;setup-habitats 
  setup-turtles 
  reset-ticks 
end 

to setup-fragments 

  ask patches[set pcolor 67] 
  repeat 50 
  [ 
    ask one-of patches 
    [ 
      set pcolor brown 
      repeat 30 
      [ 
        let a random 360 
        let b random 5 
        ask patch-at-heading-and-distance a b 
        [ 
          ask neighbors [ set pcolor brown] 
          set pcolor brown 
        ] 
      ] 
    ] 
  ] 
end 

to setup-turtles 

  set-default-shape femaletigers "default" ; default shape (dreieck) 
  create-femaletigers 10 
  [ 

  set color red 
  set size 1.5 
  set energy 100 
  set age random 20 
  set gender "female" 
  set territory patches-in-territory patch 10 6 15 
  move-to one-of territory with [pcolor = 67 ] ; tigers start in territory but not on fragmented areas 
  ] 

  set-default-shape maletigers "default" ; default shape (dreieck) 
  create-maletigers 10 
  [ 
  set color blue 
  set size 1.5 
  set energy random 100 
  set age random 20 
  set gender "male" 
  set territory patches-in-territory patch 40 15 10 
  move-to one-of territory with [pcolor = 67 ] ; tigers start in territory but not on fragmented areas 

  ] 


  set-default-shape preys "circle" 
  create-preys 100 
  [ 
  move-to one-of patches with [pcolor = 67] ;preys don't start in fragmented areas 
  set color 114 
  set size 0.75 
  ] 
end 

to-report patches-in-territory [Center rd] 
  let ptr [] 
  ask Center [set ptr patches in-radius 20] 
  report ptr 
end 

感谢您的帮助。 玛丽亚

欢迎来到 Stack Overflow。在这里发帖时,一般来说,将代码限制在演示问题所需的最低限度会更好(请参阅 MCVE 指南 here);例如,您可以删除 to-reportprey 品种等,只是为了让您清楚地知道您要解决的问题。

我并没有完全遵循您的代码,因为我不确定您的某些总体目标 - 相反,我给出了一个替代示例,它有望说明一种完成您所追求的目标的方法。我将展示一个例子,在这个例子中,女性的领土可以重叠,而男性的领土不能重叠。使用这些变量和设置:

breed [ femaletigers femaletiger ]
breed [ maletigers maletiger ]

turtles-own [ territory ]
patches-own [ maleclaimed? ]

to setup
  ca  
  ask patches [ 
    set maleclaimed? false
  ]

  create-maletigers 3 [
    set shape "triangle"
    set size 1.5
    move-to one-of patches with [ maleclaimed? = false ]
    pd
    set territory patches in-radius 5 with [ maleclaimed? = false ]
    ask territory [ 
      set maleclaimed? true
    ]
  ]

  create-femaletigers 3 [
    set shape "square"
    setxy random-xcor random-ycor
    pd
    set territory patches in-radius 3 
    hatch 1 + random 3 [
      rt random 360
      fd 1
    ]
  ]

  reset-ticks
end

在设置中,patches-own 布尔值表示一块地块是否已被雄性占有 - 将其设置为 false 以开始,以便雄性可以在建立领地时检查一块地块是否是否已经声明。然后,老虎会像您一样建立自己的领地,除了雄性不会 select 领地来自另一只雄性。雌性建立自己的领地,然后 hatch 一些雌性将分享 "mother" 的领地。

要在它们的领地内移动,只需限制海龟,使它们只能移动到它们的一块领地——这是一种方法:

to go  
  ask turtles [
    let target one-of territory in-radius 1.5
    if target != nobody [
      face target
      fd 1
    ]
  ]
  tick
end

如果你想确认海龟是否在一个领地内,运行类似于:

to territory-check

  ask turtles [
    let col color + 2 + random 3
    ask territory [
      set pcolor col
    ]
  ]    

end

再次感谢。什么时候老虎繁殖,我想让他们的孩子创造一个新的领地,领地不应该重叠?

to move-male

  ask maletigers [
   let target1 one-of territory in-radius 2
   if target1 != nobody [
    face target1
    fd 1]]

end

to reproduce-tiger

  if age >= 48 and any?  maletigers-on  patch-here and pcolor = 67 [
    hatch random 1 + random (5 - 1) [
    set gender one-of [ "male" "female" ]   
    set breed kids
    fd random-float 2 ]]

end

to search-territory-male 

 ask maletigers with [ territory = nobody ] [
    if maleclaimed? = false  [
     set territory patches in-radius 18 with [ maleclaimed? = false ]
     ask territory [ set maleclaimed? true ]]]

end