2014-02-11 7 views
1

Итак, в моем текущем приложении HubNet черепахи организованы в различные структуры графов. Независимо от того, могут ли два клиента видеть друг друга, зависит от того, связаны ли соответствующие черепахи на графике.NetLogo, HubNet и распределение Who-numbers

В настоящее время я строю графики, основанные на числах черепах, которые, таким образом, построены в предположении, что если в каждой заданной точке n черепах, они пронумерованы от 0 до n-1. Я ожидаю, что это может вызвать проблемы, если, например, клиент подключится, затем сбрасывается, а затем повторно подключается, так как это (если я не ошибаюсь) даст этому клиенту новый номер who (и старый номер не будет повторно использован). Поэтому мне интересно, есть ли способ убедиться, что черепахи пронумерованы так, как я хочу?

Отбрасывание всех, а затем сброс чисел who будет одним (плохим) решением. Можете ли вы помочь мне, предложив лучшее решение или как реализовать плохое решение?

ответ

1

Если вы хотите использовать номера, вам нужно спрятать черепах, а не убивать их. Если это делает вещи неудобными, потому что вам нужно обратиться к, например, turtles with [not hidden?], затем подумайте о создании двух пород, назовите их actives и inactives или что-то в этом роде, а затем, скрывая черепаху, сделайте hide-turtle set breed inactives. Тогда вы всегда можете обратиться к набору активных черепах, как actives. Когда кто-то присоединяется к симуляции, дайте им неактивную черепаху, если она есть, и пусть она делает show-turtle set breed actives.

Или, если вы решили не использовать номера, вам понадобится новая переменная черепахи, скажем, вы называете ее id. Когда вы делаете новую черепаху, сделайте set id count turtles - 1. Когда черепаха умирает, вам нужно переназначить новые идентификационные номера, чтобы больше не было пробелов. Неважно, какая схема вы используете для этого? Вам нужно, чтобы там были какие-то особые отношения между старым номером черепахи и его новым номером? Я могу представить несколько возможных подходов к этому. Вот один из них, который присваивает номера идентификаторов в порядке возрастания по числу:

let whos sort [who] of turtles 
ask turtles [ set id position who whos ] 

P.S. Но я должен удивляться, действительно ли это нумерация? В обычной модели NetLogo почти никогда не нужно использовать номера для чего-либо. Почти всегда есть более простой способ. Почему вы чувствуете, что вам нужно использовать нумерацию в этой модели? Возможно, вам это нужно, но я, по крайней мере, немного скептически настроен.

+0

Спасибо! Отлично. Поэтому причина, по которой я использую числа who, состоит в том, что я чувствовал, что при случайном распределении черепах на места на разных графиках полезно было иметь некоторые перечисления черепах. Например, если я хочу создать круг, я делаю это, комбинируя черепаху n с черепахой n-1 и n + 1 (и делаю специальные настройки для последней черепахи). Есть ли более простой способ сделать это? – ProfessorHelloKittyNr1

+0

Взаимосвязь между черепахами в круге - это случай, когда прохождение чисел, вероятно, на самом деле является самым простым решением. –

+1

Теперь, когда расширение NW связано с NetLogo, ['nw: generate-ring'] (http://ccl.northwestern.edu/netlogo/docs/nw.html#generate-ring) является удобным способом создания круг черепах, соединенных ссылками. –