如何在 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-report
、prey
品种等,只是为了让您清楚地知道您要解决的问题。
我并没有完全遵循您的代码,因为我不确定您的某些总体目标 - 相反,我给出了一个替代示例,它有望说明一种完成您所追求的目标的方法。我将展示一个例子,在这个例子中,女性的领土可以重叠,而男性的领土不能重叠。使用这些变量和设置:
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
我是 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-report
、prey
品种等,只是为了让您清楚地知道您要解决的问题。
我并没有完全遵循您的代码,因为我不确定您的某些总体目标 - 相反,我给出了一个替代示例,它有望说明一种完成您所追求的目标的方法。我将展示一个例子,在这个例子中,女性的领土可以重叠,而男性的领土不能重叠。使用这些变量和设置:
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