如何删除netlogo中两个链接中较低的链接
我有一个完整的有向加权图。我提取了所有海龟的最大输出链接,并将它们放在一个降序列表中。 尽管有时列表会出现这种情况: 最大链接数=[(链接42)(链接21)(链接05)(链接32)(链接12) (链接5和3)] 链接[2 1]和[1 2]出现在列表中,我希望具有较低值的链接消失,列表更新。 现在我已经写了这段代码,但什么也没发生如何删除netlogo中两个链接中较低的链接,netlogo,Netlogo,我有一个完整的有向加权图。我提取了所有海龟的最大输出链接,并将它们放在一个降序列表中。 尽管有时列表会出现这种情况: 最大链接数=[(链接42)(链接21)(链接05)(链接32)(链接12) (链接5和3)] 链接[2 1]和[1 2]出现在列表中,我希望具有较低值的链接消失,列表更新。 现在我已经写了这段代码,但什么也没发生 ask turtles [ set x max-one-of my-out-links [trust] set y one-of
ask turtles
[
set x max-one-of my-out-links [trust]
set y one-of my-in-links
]
set max-links sort-on [(- label)] link-set [max-one-of my-out-links [label]] of turtles
ask item counter max-links
[
if [x] of end2 = [y] of end1
[
ifelse [x] of end1 < [x] of end2
[ask [x] of end1 [die]]
[ask [x] of end2 [die]]
]
set counter counter + 1
]
set max-links-update sort-on [(- label)] link-set [max-one-of my-out-links [label]] of turtles
询问海龟
[
将x max设置为我的一个输出链接[信任]
在链接中设置y
]
在海龟的[(-label)]链接集[max-one-of-my-out-links[label]]上设置最大链接排序
询问物品计数器最大链接数
[
如果end2的[x]等于end1的[y]
[
如果end1的[x]项小于end2的[x]项
[向[x]询问end1[die]]
[向[x]询问end2[die]]
]
设置计数器+1
]
在海龟的[(-label)]链接集[max-one-of-my-out-links[label]]上设置最大链接更新排序
我的目标是询问每只海龟的end2,看看该end2的最大输出链接是否与其第一个端点的一个输入链接相同。如果是,这意味着在相同的两只海龟之间建立了两个链接。我认为问题在于,当我为x或y调用end2或end1时,代码不理解这个end2和end1属于列表中的项
有人能告诉我怎么解决这个问题吗?
感谢您的简单和快速回答,如果您能提供一个。在本例中,我使用这个玩具代码生成一个由4个节点组成的简单网络:
links-own [ value ]
to setup
ca
random-seed 1
foreach ( range 0 360 90 ) [ angle ->
create-turtles 1 [
set heading angle
fd 8
]
]
ask turtles [
create-links-to n-of 2 other turtles [
set value random-float 1
set label precision value 3
]
]
reset-ticks
end
这将创建一个具有四个“重复”链接的网络-链接值标记为:
接下来,一些代码:
- 拉动所有端对
- 过滤器,以便仅处理重复的端对
- 在重复的唯一对上迭代并删除低值链接
您现在已经问了大约4次这个或类似的问题。请试着理解前面的答案,然后解释为什么这个答案不符合你的要求。这是否回答了你的问题?
to link-filter
; Get each link's end pairs
let endPairs map [ i -> sort [ both-ends ] of i ] sort links
; Filter for end pairs that occur more than once
let duplicatedEnds ( map [ i -> filter [ j -> j = i ] endPairs ] endPairs )
; Keep only unique values
let uniquePairs reduce sentence map remove-duplicates filter [ k -> length k > 1 ] duplicatedEnds
; Iterate over each unique pair
foreach uniquePairs [ pair ->
; Filter for links with those ends, sorted by value
let matchingLinks filter [ i -> sort [ both-ends ] of i = pair ] sort-on [value] links
print matchingLinks
; Drop the first of the matching links as it is the lower value
; if its complement has not already been removed
if length matchingLinks > 1 [
ask first matchingLinks [ die ]
]
]
end