Для простоты и быстрых ответов было бы полезно, если бы вы могли предоставить Минимальный воспроизводимый пример . В этом случае я использую этот игрушечный код, который генерирует простую сеть из 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
Это создает сеть с четырьмя «повторяющимися» ссылками - значения ссылок помечены:
Next, some code that:
- Pulls all end pairs
- Filters so that only duplicated end pairs are processed
- Iterates over duplicated unique pairs and removes the lower-value link
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
After this is run, you can see that the lower-value links are removed:
введите описание изображения здесь