我正在尝试在我的模型中创建一个新函数,一个代理连续地在它的每个邻居上执行,随着它的总和汇总。例如(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])。这导致如上所述接收到乘法列表错误。我上周一直在研究这个问题,阅读,尝试几个版本的新东西,但没有运气。
我只是想知道是否有人能够就我的错误向我提出建议,或者告诉我一些相关信息?谢谢你的时间。
答案 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