如何从 link 中询问一只乌龟?

How to ask a single turtle from a link?

我养了两种乌龟:狗和猫,它们都是 linked。 link 有一个属性 (X),它的值取决于连接末端的狗的 A 值(在这种情况下我不关心猫)。

如何查询特定狗的属性值来更改 link 属性?

我有这样的代码,使用end2,但有时end2中的乌龟不是我需要的。

ask links [ask end2 
          [
           ifelse A <= 4 [ask myself [set X 1]][ask myself [set X 2]]
          ]]

谢谢!

您可能想查看 asking help 如何生成最小的完整可验证示例 - 如果您遵循这些指南,您更有可能获得有用的答案。

一种方法是使用 turtle-set 原语让每个 link 将其两个节点(猫和狗)放入一个临时代理集中。假设此设置:

dogs-own [ A ] 

links-own [ X ]

to setup
  ca
  reset-ticks
  create-cats 10 [
    set color blue
    setxy random 30 - 15 random 30 - 15
  ]
  create-dogs 10 [
    setxy random 30 - 15 random 30 - 15
    set color red
    set A 1 + random 8
  ]
  ask cats [
    create-link-with one-of dogs with [ not any? link-neighbors ] [
      set X 1
    ]
  ]
end

首先,获取 links 从 link 的两个节点中创建一个临时海龟集合,然后在该临时海龟集合中选择代理:

编辑感谢@SethTisue

编辑:不要这样做:

to go

  ask links [
    let my-nodes ( turtle-set end1 end2 ) 
    let my-dog one-of my-nodes with [ member? self dogs ]

编辑:改为这样做:

to go

  ask links [
    let my-nodes both-ends 
    let my-dog one-of my-nodes with [ member? self dogs ]

这让 link 仅引用其节点外的狗 (my-dog),因此它可以使用 of 检查 my-dog 的属性并执行你需要什么。

    if ( [A] of my-dog ) <= 4 [   
      set X 2
      ;;; This is just for easy identification
      set color yellow      
    ]
  ]  
  tick
end