我想将一组乌龟移动到特定位置,该位置由每只乌龟的数据确定,并让它们在每个位置停留一定的时间,然后再移动到下一个位置。我已经将位置编码为海龟,现在每个海龟都有一个位置和时间矩阵。但是,我最终得到一个错误,即我的轨迹和运动模式不是矩阵。我的代码在下面
用于设置位置和时间矩阵的代码(数据的小例子):
let herd1 matrix:from-row-list [[11 12 13 14 15] [30 23 2 14 10]]
let herd2 matrix:from-row-list [[13 12 14 11 15] [20 12 3 35 6]]
set movement-patterns (list herd1 herd2)
设置这些海龟的代码:
to setup-mobile-herds
ask mobile-herds [die]
create-mobile-herds (initial-mobile-herds) [ ;
set shape "cow"
set size 0.9
set color yellow
set sus 30
set inf 0
set rec 0
set trajectory movement-patterns
foreach n-values movement-patterns [ ?1 -> ?1 ] [ ?1 ->
ask item ?1 movement-patterns [
set mobile-S who
]
]
move-to (matrix:get trajectory 0 0) ;I'm getting an error here that says this is not a matrix
set time-cap (matrix:get trajectory 1 0)
set transmission-rate mobile-transmission-rate
]
end
我需要将每只海龟分配给一行数据,并将此信息用作每个点的轨迹和时间。我曾尝试添加代码以吃掉每一行,但这也不起作用。我收到一个错误,即项目输入需要一个字符串,但得到的是数字0。
删除行的代码:
set mobile-number count mobile-herds ;provides number of herds
set mobile-index (mobile-number - (initial-mobile-herds - 1))
set trajectory item mobile-index movement-patterns
我想弄清楚矩阵基元缺少什么?
答案 0 :(得分:2)
您的基本问题是变量轨迹是列表,而不是矩阵。忽略与错误无关的所有移动和持续时间,这是代码的简化版本,并添加了一些输出:
extensions [matrix]
globals [ trajectory ]
to testme
let herd1 matrix:from-row-list [[11 12 13 14 15] [30 23 2 14 10]]
let herd2 matrix:from-row-list [[13 12 14 11 15] [20 12 3 35 6]]
let movement-patterns (list herd1 herd2)
set trajectory movement-patterns
show trajectory
show item 0 trajectory
show matrix:get (item 0 trajectory) 0 0
end
您会看到轨迹是矩阵列表,而不是矩阵。然后,您可以使用列表基元item
获得单个矩阵,并使用matrix:get
访问该单个矩阵。
但是,我不知道这是否实际上是您的问题,因为您说这是示例数据。真实数据的设置与示例数据相同吗?