1
votes

Comment supprimer tous les liens d'une tortue vers un ensemble d'agents dans Netlogo

J'ai ce problème: J'ai une tortue qui traite avec un ensemble d'agents qui ont tous un lien avec la tortue spécifique. À la fin, je veux que la tortue supprime tous ses liens avec les agents de l'ensemble d'agents mais je ne trouve pas de moyen. Est-ce que quelqu'un peut m'aider? Je signale ici le code qui ne fonctionne pas. En particulier, la ligne problématique est "demandez à mes-liens [other-end = traitors] [die]"

to cooperate-with-friend
  set traitors friends with [cheater? = True]
  set loyals friends with [cheater? = False]
  ask traitors [set wealth wealth + 3]
  ask loyals [set wealth wealth + 2]
  set wealth wealth + count traitors * -3 + count loyals * 2
  ask my-links [other-end = traitors] [die]
end

NB: friends est un ensemble d'agents regroupant toutes les tortues ayant un lien vers la tortue exécutant le commander.


0 commentaires

3 Réponses :


0
votes

Étant donné que vous demandez aux traîtres de faire quelque chose, je suppose que les traîtres sont un ensemble d'angents. other-end , cependant, est un agent, donc other-end = traitors compare un agent avec un ensemble d'agents. Les deux ne peuvent jamais être égaux. Ce que vous voulez savoir, c'est si l'agent à l'autre bout est un membre du groupe angentset des traîtres. Pour cela, vous pouvez utiliser member?.

ask my-links with [member? other-end traitors] [die]


2 commentaires

Merci d'avoir attrapé ce JenB.


Si traîtres est une race, alors membre? les traîtres de l'autre bout peuvent être remplacés par is-traitor? autre extrémité



0
votes

Mmm .. Netlogo n'accepte pas cette ligne. Ça dit ça après le membre? attend une commande.

En attendant, j'ai résolu comme ça. Un peu tordu mais cela semble fonctionner:

let anger random-float 1
  repeat count traitors [
    let traitor one-of traitors
    if link-with traitor != nobody and tolerance < anger [
      ask link-with traitor [die]
    ]
  ]


1 commentaires

il manquait un avec dans le code. Voir une nouvelle réponse pour amener la tolérance / la colère



1
votes

La façon de modifier l'approche de Charles pour tenir compte de votre variable de tolérance est:

ask my-links with [member? other-end traitors]
[ if tolerance < random-float 1 [die]
]


0 commentaires