【发布时间】:2016-08-22 03:11:04
【问题描述】:
我正在尝试让海龟在带有 netlogo 的 ABM 中相互战斗。目前海龟随机移动每个刻度。我希望他们在每次跳动时随机找到另一只乌龟并与他们战斗。最终,我会让他们只与邻居打架,但目前配对是随机的。
战斗的获胜者由每对乌龟之间的获胜概率决定。我习惯于在 R 中做这些模型,我会将这些信息存储在矩阵中。例如
[[ 1 0.95 0.95 ]
[ 0.05 1 0.75 ]
[ 0.05 0.25 1 ]]
在这里,第一行的乌龟有 95% 的可能性战胜第 2 列或第 3 列的乌龟。第 2 行的乌龟有 5% 的可能性战胜 A 列,75% 的可能性战胜 C 列。我在对角线上写了 1,但乌龟不能自己打架。随着时间的推移,海龟会因战斗而失去能量——但这还没有添加到模型中。
到目前为止,这是我的代码。当我挑选海龟来寻找“受害者”时,我希望能够从这个矩阵中挑选出这对获胜概率。例如如果我选择turtle0 和turtle3 作为受害者,我想模拟一场“战斗”,其中turtleA 是获胜者,获胜概率为95%。
以这种方式使用矩阵是在 netlogo 中执行此操作的最佳方式吗?还是我使用我的其他编程语言的偏见太多了?
extensions [matrix]
globals []
turtles-own [
energy ;; energy level
]
to setup
ca
let m matrix:from-row-list [[1 .95 .95] [.05 1 .75] [.05 .25 1] ]
print matrix:pretty-print-text m ;;just to check if matrix is correct
crt 3 [
setxy random-xcor random-ycor
set color 11
set shape "mouse side"
set size 2
]
ask patches [
set pcolor 66
]
ask turtles [
set energy 100
]
reset-ticks
end
to go
if ticks >= 5000 [ stop ] ;; stop after 5000 runs.
ask turtles [
fd 5 rt random 90
check-death
check-fight
]
tick
end
;; if energy gets to 0 die.
to check-death
if energy <= 0 [ die ]
end
to check-fight
let victim one-of turtles-here
if victim != nobody
[
;; code in here to get win probabilities from matrix and determine winner.
]
end
【问题讨论】:
标签: netlogo