【发布时间】:2020-03-28 13:32:23
【问题描述】:
假设每个节点都分配了一个列表,例如[1 0 0 1](节点自己的变量'state')。我正在尝试比较两个连接节点的列表以确定它们的同意程度,然后对于给定的节点决定哪个连接节点的状态与其自己最相似。最终,我想让节点更新它们的另一个变量('answer',即 1 或 0)的值,使其与最接近的匹配节点的答案相同。
为了比较两个节点的列表,我想将它们相减并取绝对值,并将其设置为连接两者的链接的“协议”分数。所以对于减法,我尝试了:
ask links [
let subtracted-list (map - state of end1 state of end2) ...]
但我在这里收到一个运行时错误,上面写着“- 预期输入是一个数字,但得到了列表”。然后我打算类似地使用 map 来获取结果列表的绝对值并求和,但我似乎被困在这里,无法弄清楚出了什么问题。
编辑:
我已尝试采纳这些建议,但由于某种原因,我仍然无法让它发挥作用。代码如下:
breed [nodes node]
nodes-own [state]
links-own [agreement-score]
to setup
clear-all
set-default-shape nodes "circle"
ask patches [ set pcolor black ]
repeat num-nodes [ make-node ]
create-network
distribute-state
repeat 100 [ layout ]
reset-ticks
end
;; Distributing state values to each node (ex. [0 1 0 0 1 0 0 1])
to distribute-state
ask nodes [
set state (list n-values num-state-elem [random 2])
]
end
;; Network formation - Preferential attachment from the Models Library
to make-node
create-nodes 1 [
rt random-float 360
fd max-pxcor
set size 1.5
]
end
to create-network
let partner nobody
let first-node one-of nodes
let second-node one-of nodes with [self != first-node]
ask first-node [ create-link-with second-node [ set color white ] ]
let new-node one-of nodes with [not any? link-neighbors]
while [new-node != nobody] [
set partner find-partner
ask new-node [ create-link-with partner [ set color white ] ]
layout
set new-node one-of nodes with [not any? link-neighbors]
]
end
to update-color
end
;; Go procedures
to go
ask links [calculate-agreement-score]
ask nodes [update-color]
tick
end
to calculate-agreement-score
ask links [
set agreement-score bit-difference [state] of end1 [state] of end2
]
end
to-report bit-difference [#list1 #list2]
let subtraction (map - #list1 #list2)
report reduce + map abs subtraction
end
;; Making the network
to-report find-partner
let pick random-float sum [count link-neighbors] of (nodes with [any? link-neighbors])
let partner nobody
ask nodes
[if partner = nobody
[ ifelse count link-neighbors > pick
[ set partner self]
[ set pick pick - (count link-neighbors)]
]
]
report partner
end
to layout
layout-spring (nodes with [any? link-neighbors]) links 0.4 6 1
end
这仍然给我同样的错误信息:“- 预期输入是一个数字,但得到了列表 [1 0 1 1 1 1 0 0 1 0]。”
【问题讨论】:
标签: netlogo