我有一个完整的有向图,每个链接都有自己的权重。我已经成功地选择了每只海龟的最大输出链接。但是,有时两只乌龟的最大输出链接彼此相反,导致两个彼此相反的链接被选择。如果发生这种情况,我希望具有较低值的链接消失。
我用这个创建了两个列表:
set max-end1 [[end1] of max-one-of my-out-links [trust]] of turtles
set max-end2 [[end2] of max-one-of my-out-links [trust]] of turtles
并通过设置 x 和 y 参数,如下所示:
ask turtles
[
set x max-one-of my-out-links [label]
set y my-in-links
]
我希望像这样比较两个列表中的每个项目:
if [x] of max-end2 = any? [y] of max-end1
[
ifelse x X y
[ask x [die]]
[ask y [die]]
]
但我不知道如何将 foreach 命令与 if 命令结合起来
有人能帮我吗?
我实际上无法弄清楚你的代码应该如何工作。列表似乎是一种尴尬的方法来解决这个问题以及您使用的方式any?
是行不通的。因此,我重新开始并编写了一个独立模型(将其放入空的 NetLogo 会话中)来完成我认为您正在尝试做的事情。
links-own [ weight ]
to testme
clear-all
create-turtles 15
ask turtles
[ create-links-to other turtles
[ set weight random 100
]
]
layout-circle turtles 10
kill-lowers
end
to kill-lowers
; first remove any that's not a max weight
ask turtles
[ let big-link max-one-of my-out-links [weight]
let dying my-out-links with [not member? self (link-set big-link)]
ask dying [die]
]
; find pairs and make lower turn red
ask links
[ let opp-links links with [end1 = [end2] of myself and end2 = [end1] of myself ]
if any? opp-links
[ ask opp-links [set color red]
]
]
end
testme 程序只是创建一个完整的网络。然后它调用kill-lowers 过程来删除链接。第一部分让每只海龟识别它的out-link
具有最大的权重(或者随机选择一个,如果两个同样高),然后创建link-set
所有其他链接并让它们死掉。我认为您的代码中已经发生了这种情况。
所以有趣的部分是开始的部分ask links
。它随机地遍历所有链接(将其视为foreach
除了对一组链接而不是列表进行操作)。反过来,对于特定链接,代码会检查是否存在相反方向的链接,并将其设置为名为 opp-links 的变量。它检查的方式是简单地查看是否有一个链接end2
成为自己的end1
还有另一种方式。end1
是定向链接的来源,并且end2
是目标。
如果有这样的链接,它就会变成红色。这样您就可以检查代码是否正在执行您想要的操作。测试完之后你就拥有了die
反而。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)