代理集输入函数返回列表错误

时间:2014-09-07 21:47:33

标签: function netlogo

我正在尝试在我的模型中创建一个新函数,一个代理连续地在它的每个邻居上执行,随着它的总和汇总。例如(neighbour1的返回值)+(neighbour2的返回值)+(neighbour3的返回值)...... .n?

然而,稍微复杂一点,这个功能包括两个已编程的代理集输入功能,实际上看起来像这样:

功能3:

((function1 [我的neighbour1] * function2 [我的neighbour1])+(function1 [我的neighbour2] * function2 [我的neighbour2])+(function1 [我的neighbour3] * function2 [我的neighbour3])...... n?) )`

我一直在尝试使用代码在Netlogo中实现它:

let function3 (sum [function1 myself self] of neighbours) * ( sum [function2 myself self] of neighbours)

其中邻居被定义为:

let neighbours turtle-set other turtles in-radius neighbourhood

和function1是:

to-report function1 [ agent1 agent2 ]
let w2 square w
report exp (- function2 agent1 agent2 / w2)

和function2是:

to-report function2 [ agent1 agent2 ]
report ( (square ([a-rock] of agent1 - [rock] of agent2)) + (square ([a-hip-hop] of agent1 - [hip-hop] of agent2)) )

但是,每当我运行模型时,我都会收到一条错误消息,指出: “*预期输入为数字,但得到列表[0.16000000000000003 0.5000000000000001]。错误,当乌龟2运行*由程序调用FIND-P调用程序GO调用按钮'“'”

似乎我的新函数3 - 而不是连续执行每个邻居,聚合总和 - 实际上列出(function1 * [我自己AllNeighboursOneByOne])并尝试将其添加到(function2的另一个列表) * [我自己AllNeighboursOneByOne])。这导致如上所述接收到乘法列表错误。我上周一直在研究这个问题,阅读,尝试几个版本的新东西,但没有运气。

我只是想知道是否有人能够就我的错误向我提出建议,或者告诉我一些相关信息?谢谢你的时间。

1 个答案:

答案 0 :(得分:2)

见Seth的评论。结论:我们必须猜测你的代码太多了。但这是一个没有错误的猜测:

globals [neighbourhood w]
turtles-own [a-rock rock a-hip-hop hip-hop]

to setup
  ca
  set neighbourhood 3 
  set w 1
  ask patches [sprout 1]
end

to f3test
  setup
  ask turtle 1 [print function3]
end

to-report square [#x]
  report #x * #x
end

to-report function3  ;;turtle proc
  let nbrs other turtles in-radius neighbourhood 
  report (
    (sum [function1 myself self] of nbrs)
    *
    ( sum [function2 myself self] of nbrs)
  )
end

to-report function1 [ agent1 agent2 ]  ;;observer proc
let w2 square w
report exp (- function2 agent1 agent2 / w2)
end

to-report function2 [ agent1 agent2 ]  ;;observer proc
report ( 
  (square ([a-rock] of agent1 - [rock] of agent2)) 
  + 
  (square ([a-hip-hop] of agent1 - [hip-hop] of agent2)) 
)
end