這可能不是最有效的解決方案,但假設您有以下品種:
breed [ obstacles obstacle ]
breed [ nodes node ]
您可以使用下面記者:
to-report can-see? [ target ]
let result false
hatch 1 [
face target
fd 0.1
set result ifelse-value (any? turtles-here with [ self = target ])
[ true ]
[ ifelse-value (any? obstacles-here)
[ false ]
[ can-see? target ]
]
die
]
report result
end
它通過hatch
目標的方向荷蘭國際集團整個系列的臨時節點。如果沿途任何節點遇到障礙,則返回false
。如果達到目標,則返回true
。這些臨時節點是遞歸創建的,直到獲得結果。
您可能需要調整「步長」(本例中爲fd 0.1
):更大的步長將更有可能錯過障礙物的角落,但速度稍快。
您還需要確保您使用的是tick based updates instead of continuous updates,否則它會很慢。
下面是創建節點之間的鏈接,可以看到對方的例子:
to setup
ca
ask n-of 100 patches [
sprout-obstacles 1 [
set color red
set shape "square"
]
]
ask n-of 50 patches with [ not any? obstacles-here ] [
sprout-nodes 1 [
set color yellow
set shape "circle"
let targets other nodes
create-links-with targets with [ can-see? myself ]
]
]
end
如果你想使用補丁,而不是龜的障礙,你可能很容易修改。