Удаление нескольких ссылок в полном ориентированном взвешенном графе черепах - PullRequest
1 голос
/ 10 апреля 2020

У меня есть n черепах, у которых есть связи друг с другом. Это означает, что у меня есть полный ориентированный взвешенный граф. Мне удалось найти ссылки с максимальным значением для каждой черепахи, но теперь я хочу удалить все остальные ссылки без максимального значения, снова для каждой черепахи. Я использую функцию [die] , но для того, чтобы выделить guish набор ссылок для каждой черепахи, а затем очистить ссылки из каждого набора. Это строка кода, которую я использую :

> ask turtles 
      [ 
>     ask my-in-links with [trust < max [trust] of links with [other-end] =  ] [die]  
      ]

Однако я подумал, что вместо использования функции другого конца я мог бы также использовать эту строку кода

> ask turtles [
ask my-in-links with [trust < max [trust] of links with [out-link-to] =  ] [die]
]

Первоначально я подумал об использовании одной из двух функций ( other-end / out-link-to), я мог бы создать общий атрибут между множеством ссылок. Моя главная проблема:

  1. Я не уверен, правильны ли функции (other-end / out-link-to)
  2. Я не знаю, что писать после "=" выражение
  3. Я не знаю, с какой черепахой начинает работать функция запрашиваемой черепахи

1 Ответ

1 голос
/ 10 апреля 2020

Вот полная модель, которая делает то, что вы пытаетесь достичь.

links-own [trust]

to testme
  clear-all
  ; create complete directed network
  create-turtles 10
  ask turtles
  [ create-links-to other turtles
    [ set trust random 50
    ]
  ]
  ; display complete network briefly
  layout-circle turtles 10
  type "average trust value is: " print mean [trust] of links
  wait 5
  ; delete all except highest trust for each turtle
  ask turtles
  [ let keeper my-in-links with-max [trust]
    ask my-in-links with [not member? self keeper][die]
  ]
  type "average trust value is: " print mean [trust] of links
end

У меня есть, показывая начальную сеть и печатая средние значения доверия, чтобы вы могли видеть, что происходит.

Важной концепцией здесь является то, что my-links - это набор агентов (в частности, это набор ссылок, потому что агенты в наборе являются ссылками). Поскольку вы пытаетесь просто просмотреть ссылки, которые связаны с одной черепахой, тогда не имеет значения, какие черепахи находятся на другом конце, и вам вообще не нужно ссылаться на другой конец.

Вы можете просто просмотреть набор ссылок, которые прикрепляются к конкретной черепахе (my-in-links или my-links или my-out-links), а затем посмотреть значения доверия для этих ссылок. Я использовал with-max, чтобы найти тот, который имеет наибольшее значение, а затем использовал набор членства. Но вы также можете использовать

  ask turtles
  [ let upper max [trust] of my-in-links
    ask my-in-links with [trust < upper] [die]
  ]

, который наиболее близок к коду, который вы написали в своем вопросе.

...