Как ограничить количество ссылок, которые агент может сделать в модели?

Я настраиваю модель с несколькими агентами, которые подключены через ссылки следующим образом:

ask turtles [create-links-with turtles in-radius vision with [self != myself]]

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

Надеюсь, вы можете помочь.


person adkane    schedule 23.06.2015    source источник


Ответы (1)


Вы можете получить случайно выбранное подмножество черепах для ссылки на них с помощью примитива n-of следующим образом:

ask turtles [create-links-with n-of 3 turtles in-radius vision with [self != myself]]

Однако вам нужно будет сделать что-то более хитрое, если вы хотите установить четкий верхний предел, потому что это не мешает другим черепахам создавать ссылки на ту же черепаху. Если вам нужно фиксированное количество ссылок (5 в примере ниже), вы можете сделать это:

  ask turtles
  [ let new-links 5 - count my-links
    let candidates other turtles with [ count my-links < 5 ]
    create-links-with n-of min (list new-links count candidates) candidates
    [ ... ]
  ]

Если вам просто нужен верхний предел, вы можете попросить любую черепаху с параметром my-links > limit случайным образом выбрать подходящее количество ссылок для удаления. Итак, после создания ссылок примерно так (не проверено):

ask turtles with [count my-links > LIMIT]
[ if count my-links > LIMIT [ask n-of (count my-links - LIMIT) my-links [die]] ]    
person JenB    schedule 23.06.2015
comment
Спасибо за ваш ответ. Последний фрагмент кода, который вы предложили, - это то, что я хочу, чтобы он делал, то есть устанавливал верхний предел. Однако, когда я реализовал это, я иногда получаю сообщение об ошибке, в котором говорится: Первый ввод в N-OF не может быть отрицательным. Я действительно не понимаю этого, потому что, конечно же, первая строка должна избавиться от черепах, которые могут вызвать эту ошибку. - person adkane; 24.06.2015
comment
Хорошо, причина, по которой вы получаете эту ошибку, заключается в том, что NetLogo сначала создает набор черепах, а затем выполняет процесс удаления для всех из них в случайном порядке. По крайней мере, в некоторых случаях удаление, возникающее из-за более ранней черепахи, приводит к тому, что более поздняя черепаха попадает под ограничение, потому что она находится на другом конце удаленной ссылки. Я обновлю свой ответ. - person JenB; 24.06.2015
comment
Отлично, это работает намного лучше. Итак, просто чтобы уточнить, что не следует также устанавливать нижний предел? То есть у агентов может быть меньше ссылок, чем лимит? - person adkane; 24.06.2015
comment
да, он просто найдет те, которых слишком много, после процесса создания, а затем удалит некоторые ссылки, чтобы их отключить. Хорошей практикой является тестирование каждого фрагмента кода после того, как вы его написали, чтобы убедиться, что он делает то, что вы думаете. Для этого я бы создал гистограмму количества ссылок (подсчитайте мои ссылки) для черепах, и вы сможете увидеть, что у некоторых есть разное количество ссылок и что ни у одной из них нет больше, чем ваш лимит. Вы можете удалить гистограмму после того, как протестировали код. - person JenB; 24.06.2015