Удаление противоположности ссылки в списке в netlogo - PullRequest
1 голос
/ 18 июня 2020

У меня есть список ссылок, но иногда в нем появляются две противоположные друг другу ссылки. У всех ссылок есть значения, и список организован от самого высокого значения до самого низкого. я хочу сделать противоположную ссылку с меньшим значением d ie. У кого-нибудь есть идеи? не то чтобы это сильно помогло бы, но я получил свой список из этой строки кода:

set max-links sort-on [(- label)] link-set [max-one-of my-in-links [label]] of turtles

1 Ответ

0 голосов
/ 19 июня 2020

Я предполагаю, что это направленные ссылки, так как между любыми двумя черепахами не может быть двух неориентированных ссылок. Следующий код не изящен, но я думаю, он сделает то, что вы хотите. Я встроил его в рабочую модель.

to test

  clear-all
  create-turtles 10 [fd random 10]
  ask turtles [ create-links-to n-of 8 other turtles ]
  ask links [set label random 100 ]
  let link-list sort links

  let to-die []
  let remaining link-set link-list
  foreach link-list [[m] ->
    let opposite (link [who] of [end2] of m [who] of [end1] of m)
    if opposite != nobody and member? opposite remaining [
      ifelse ([label] of opposite  < [label] of m) [
        set to-die lput opposite to-die
      ]
      [
        set to-die lput m to-die
      ] 
      set remaining remaining with [self != m]
    ]
  ]

  foreach to-die [m -> 
    set link-list remove m link-list
  ]
  ask link-set to-die [die]

end

Для каждой ссылки в списке он проверяет, есть ли противоположная ссылка в наборе ссылок remaining, изначально составленном из ссылок в список. Если это так, он помечает правильную ссылку для удаления, а затем выбирается из remaining, чтобы при проверке противоположной ссылки она не была найдена. Как только все ссылки, которые нужно удалить, найдены, они удаляются из списка и отправляются на d ie.

Надеюсь, это поможет, Чарльз

...