2015-02-08 2 views
1

приветствием,Убийство случайное направленное звено в обоих направлениях в NetLogo

Я очень новой для NetLogo, и очень заинтересованы в ГИС и сети функции в NetLogo.

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

Я нашел способ убить ссылку в обоих направлениях, если вы знаете, какая связь состоит из 2-х узлов, чтобы убить. Ниже приведен код для этого (Сета Tisue в одном из вопросов нити):

ask a [ ask link-with b [ die ] ] 

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

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

В качестве боковой линии я также озадачен тем, как netlogo работает с переменной, которая совсем не похожа на обычную C++-программу (моя фундаментальная с кодировкой C++). Я довольно много импортирую для своей сети и шейп-файла GIS, и в настоящее время я по-прежнему не использую netlogo engine в качестве своего вычислительного механизма (отходы для меня).

Как вы храните простой «x = 1 + 1» в глобальной переменной в netlogo? Действительно извините, если этот вопрос слишком прост для большинства.

+0

читать о переменных в NetLogo см http://ccl.northwestern.edu/netlogo/docs/programming.html#variables –

ответ

1

Глобальная переменная должна быть объявлена ​​в начале программы:

globals [ 
    my-global-link; this will be my global variable 
    my-another-one-link; another one 
] 

К «магазин» случайная ссылка использовать его как:

to do-something 
    set my-global-link one-of links 
end 

Для локальных переменных (внутри процедуры) просто использовать пусть сначала объявляйте об этом:

to do-something 
    let tmp-global-link one-of links 
end 
+0

Спасибо за комментарий, хотя это не то, что я хотел, но все-таки , Я благодарю вас за ваше время, пытаясь помочь! – user1142930

1

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

  1. Во-первых, как вы знаете, что есть ссылка в обоих направлениях? Обычно ориентированные графы имеют много пар узлов, где есть от A до B или B до A, но не оба. Код ниже проверяет другое направление и убивает обоих.

  2. Я включил ваш пример установки переменной x в значение 1 + 1 в настройке.

Я убежден, что есть лучший способ сделать это, поскольку код NetLogo обычно менее уродлив, но я не могу его найти. Следующий код представляет собой полный пример выполнения, который создает кучу узлов и ссылок, а затем убивает ссылку (включая обратную, если она существует) всякий раз, когда выполняется процедура kill-link.

globals [x tonode fromnode] 

to setup 
    clear-all 
    create-turtles 20 
    [ setxy random-xcor random-ycor] 
    repeat 100 
    [ ask one-of turtles 
    [ create-link-to one-of other turtles ; will not be created if already link 
    ] 
    ] 

    set x 1 + 1 
end 

to kill-link 
    ask one-of links 
    [ set fromnode end1 
    set tonode end2 
    die 
    ] 
    ask tonode 
    [ if out-link-neighbor? fromnode 
    [ ask out-link-to fromnode [die] 
    ] 
    ] 
end 
+0

Как насчет 'to kill-link let dead1 one-of links let dead2 [[out-link-to other-end] of end2] of dead1 ask (link-set dead1 dead2) [die] end' –

+0

Благодаря JenB и Сет Тису! Я довольно новичок в stackoverflow, и в будущем я буду в одиночку задавать вопрос по потоку. Что касается «убивает ссылку (включая взаимную, если она существует)», то лично, я думаю, версия JenB более читаема, а версия Seth Tisue - более короткая версия. Тем не менее, оба метода работают! Еще раз спасибо! – user1142930

Смежные вопросы