Netlogo:如何将每只海龟移到指定的位置并使用“矩阵”停留一段时间?

时间:2019-07-16 15:16:58

标签: netlogo

我想将一组乌龟移动到特定位置,该位置由每只乌龟的数据确定,并让它们在每个位置停留一定的时间,然后再移动到下一个位置。我已经将位置编码为海龟,现在每个海龟都有一个位置和时间矩阵。但是,我最终得到一个错误,即我的轨迹和运动模式不是矩阵。我的代码在下面

用于设置位置和时间矩阵的代码(数据的小例子):

    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   

我想弄清楚矩阵基元缺少什么?

1 个答案:

答案 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访问该单个矩阵。

但是,我不知道这是否实际上是您的问题,因为您说这是示例数据。真实数据的设置与示例数据相同吗?