Netlogo:;foreach“;具有两个列表的命令

Netlogo:;foreach“;具有两个列表的命令,netlogo,Netlogo,我有一个完整的有向图,每个链接都有自己的权重。我已经成功地选择了每个海龟的最大输出链接。但是,有时两个海龟的最大输出链接彼此相反,导致两个链接被选择为彼此相反。如果发生这种情况,我希望具有较低值的链接消失。 我用以下内容创建了两个列表: 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 t

我有一个完整的有向图,每个链接都有自己的权重。我已经成功地选择了每个海龟的最大输出链接。但是,有时两个海龟的最大输出链接彼此相反,导致两个链接被选择为彼此相反。如果发生这种情况,我希望具有较低值的链接消失。 我用以下内容创建了两个列表:

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过程来执行链接移除。第一部分让每只海龟识别其权重最大的
外链接
(或者如果两个权重相等,则随机选择一个),然后创建所有其他链接的
链接集
,并让它们死亡。我想你的代码中已经出现了这种情况

因此,有趣的一点是开始询问链接的部分。它在所有链接中随机运行(将其视为一个
foreach
,除了操作一组链接而不是列表)。反过来,对于特定链接,代码会检查是否存在反向链接,并将其设置为名为opp links的变量。它检查的方式是简单地查看是否有一个链接将
end2
作为自己的
end1
,也可以是另一种方式
end1
是定向链接的源,
end2
是目标


如果有这样的链接,它将变为红色。这样您就可以检查代码是否正在执行您想要的操作。在您测试它之后,您就可以使用它了。

我不知道您的代码应该如何工作。列表似乎是一种笨拙的方法,而您使用
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过程来执行链接移除。第一部分让每只海龟识别其权重最大的
外链接
(或者如果两个权重相等,则随机选择一个),然后创建所有其他链接的
链接集
,并让它们死亡。我想你的代码中已经出现了这种情况

因此,有趣的一点是开始询问链接的部分。它在所有链接中随机运行(将其视为一个
foreach
,除了操作一组链接而不是列表)。反过来,对于特定链接,代码会检查是否存在反向链接,并将其设置为名为opp links的变量。它检查的方式是简单地查看是否有一个链接将
end2
作为自己的
end1
,也可以是另一种方式
end1
是定向链接的源,
end2
是目标


如果有这样的链接,它将变为红色。这样您就可以检查代码是否正在执行您想要的操作。在您测试它之后,您就可以使用它了。

我看到您之前收到了一个使用列表的答案。我做了一个链接集答案。如果这两个答案都不能解决您的问题,您需要解释原因,否则问题将以副本形式结束。我将记住,对于未来的问题,谢谢您,我看到您之前已在收到使用列表的答案。我做了一个链接集答案。如果这两个答案都不能解决您的问题,您需要解释原因,否则问题将以副本形式结束。我将记住,对于以后的问题,谢谢您。我使用的链接部分,它的工作。但是你能帮我一步一步地执行链接部分吗?我的意思是,每次最大输出链接的链接集改变时,我都不理解这个问题。您的链接将如何更改?你问这个问题的方式表明你创建了一个网络。如果您在模拟过程中更改了链接(例如,如果它们是由于某种原因创建的),那么您需要在创建链接时检查是否应该创建它,以及其他一些链接是否会消亡。让我道歉。我没有很好地表达自己。这就是问题所在:每次我选择海龟的最大输出链接并将它们放入一个列表(最大链接),我也在迭代列表(按降序),并要求end1删除所有其他输出链接,end2删除所有其他输入链接(不是最大链接)。现在,在删除之前,我有时会在我的max links[(link 5 0)(link 0 4)(link 2 4)(link 3 1)(link 1 2)(link 4 2)]中遇到类似的东西,这里我有[2 4]和[4 2]我希望具有较低值的链接消失,并在继续删除之前更新列表创建网络并删除所有非最大链接后,每个节点剩余0或1个输出链接。因此,您的最大链接列表似乎毫无意义-它是所有的链接,除非您在代码中的某个地方创建了一些新的链接。谢谢。我使用的链接部分,它的工作。但是你能帮我一步一步地执行链接部分吗?我的意思是,每次最大输出链接的链接集改变时,我都不理解这个问题。您的链接将如何更改?你问这个问题的方式表明你创建了一个网络。如果在模拟过程中更改了链接(例如,如果出于某种原因创建了链接),则需要在创建链接时检查是否应创建链接