Связи NetLogo

Материал из Letopisi.Ru — «Время вернуться домой»
(Различия между версиями)
Перейти к: навигация, поиск
(layout-spring)
 
(не показаны 30 промежуточных версий 1 участника)
Строка 1: Строка 1:
 
Связи в NetLogo такие же агенты как черепахи NetLogo и пятна NetLogo. Связь всегда связывает двух черепах (два узла). Если одна из черепах погибает, то погибает и связь. Связи бывают направленными и ненаправленными.  
 
Связи в NetLogo такие же агенты как черепахи NetLogo и пятна NetLogo. Связь всегда связывает двух черепах (два узла). Если одна из черепах погибает, то погибает и связь. Связи бывают направленными и ненаправленными.  
  
 
+
=== Ненаправленные связи ===
 
Ненаправленные связи создаются командами к черепахам -  create-link-with или create-links-with. Например,  
 
Ненаправленные связи создаются командами к черепахам -  create-link-with или create-links-with. Например,  
 
* ask turtle 0 [create-link-with turtle 1] - команда черепахе 0 создать связь с черепахой 1
 
* ask turtle 0 [create-link-with turtle 1] - команда черепахе 0 создать связь с черепахой 1
Строка 7: Строка 7:
 
* ask turtles  [create-links-with other turtles] команда всем черепахам создать связи со всеми другими черепахами  
 
* ask turtles  [create-links-with other turtles] команда всем черепахам создать связи со всеми другими черепахами  
  
Направленные связи:
+
=== Направленные связи: ===
 
* create-links-from или create-link-from направленная связь других агентов к данному  агенту
 
* create-links-from или create-link-from направленная связь других агентов к данному  агенту
 
** Например,  ask turtle 0  [create-link-from other turtles]
 
** Например,  ask turtle 0  [create-link-from other turtles]
Строка 13: Строка 13:
 
** ask turtle 0  [create-link-to other turtles]
 
** ask turtle 0  [create-link-to other turtles]
  
[[Породы черепах NetLogo]] связываются такими же командами как и черепахи: create-<breed>-from, create-<breeds>-from, create-<breed>-to, create-<breeds>-to, create-<breed>-with, create-<breeds>-with
+
=== Связи между породами ===
 +
[[Породы NetLogo]] связываются такими же командами как и черепахи: create-<breed>-from, create-<breeds>-from, create-<breed>-to, create-<breeds>-to, create-<breed>-with, create-<breeds>-with
  
 +
=== layout ===
 
Специально для того, чтобы улучшить видимость сети из узлов и связей в NetLogo появились процедуры layout:
 
Специально для того, чтобы улучшить видимость сети из узлов и связей в NetLogo появились процедуры layout:
 +
 +
==== layout-circle ====
 
* layout-circle ''turtles'' ''radius'' - все черепашки выстраиваются по кругу заданного радиуса:  
 
* layout-circle ''turtles'' ''radius'' - все черепашки выстраиваются по кругу заданного радиуса:  
 
** layout-circle turtles with [color = red] 5 - все красные черепашки в круг с радиусом 5
 
** layout-circle turtles with [color = red] 5 - все красные черепашки в круг с радиусом 5
 +
 +
[[Файл:Layout-circle.png]]
 +
 +
==== layout-radial ====
 
* layout-radial  
 
* layout-radial  
** layout-radial turtles links (turtle 0) - черепашки выстраиваются относительно корневого агента - если есть родительская черепаха
+
** layout-radial turtles links (turtle 0) - черепашки выстраиваются относительно корневого агента - указанного в скобках.
* layout-tutte turtle-set link-set radius
+
** layout-tutte (turtles with [count link-neighbors = 1]) links 12
+
  
 +
Пример процедуры:
 +
  to clustC
 +
let Centr max-one-of users [nw:betweenness-centrality]
 +
layout-radial turtles links Centr
 +
export-view (word "../sber_results/u325/clusters/" [who] of Centr ".png" )
 +
ask Centr [die]
 +
ask users with [count my-links = 0] [die]
 +
end
 +
 +
 +
[[Файл:Layout-radial.png]]
 +
 +
==== layout-tutte ====
 +
 +
to make-a-tree
 +
  set-default-shape turtles "circle"
 +
  crt 6
 +
  ask turtle 0 [
 +
    create-link-with turtle 1
 +
    create-link-with turtle 2
 +
    create-link-with turtle 3
 +
  ]
 +
  ask turtle 1 [
 +
    create-link-with turtle 4
 +
    create-link-with turtle 5
 +
  ]
 +
  ; place all the turtles with just one
 +
  ; neighbor on the perimeter of a circle
 +
  ; and then place the remaining turtles inside
 +
  ; this circle, spread between their neighbors.
 +
  repeat 10 [ layout-tutte (turtles with [link-neighbors = 1]) links 12 ]
 +
end
 +
 +
 +
repeat 10 [layout-tutte  max-n-of 15 turtles [nw:betweenness-centrality]  links 22]
 +
 +
[[Файл:Layout-tutte01.png]]
 +
 +
==== layout-spring  ====
 +
 +
layout-spring - [[силовой алгоритм размещения]]
 +
 +
* layout-spring turtle-set link-set spring-constant spring-length repulsion-constant
 +
**  repeat 30 [ layout-spring turtles links 0.2 5 1 ] - черепахи, связи, жесткость связи (натяжение), естественная длина связи (которой стремиться достигнуть), сила отталкивания между узлами
 +
 +
 +
;layout-spring turtle-set link-set spring-constant spring-length repulsion-constant
 +
: layout-spring Группа_Черепах Группа_связей Сопротивление Естественная_длина_связи Сила_отталкивания_между узлами
 +
 +
Располагает черепах в черепаха-набор, как если бы ссылки в связи-наборе пружины и черепахи отталкиваются друг от друга. Черепахи, которые соединены ссылкам в связи-набор, но не включенные в набор черепахи рассматриваются как якоря и не переехал.
 +
 +
; spring-constant
 +
:  spring-constant  - "натянутости" пружины. Это "сопротивление", к тому, чтобы изменить длину связи. Чем выше, тем большее усилие надо прикладывать
 +
; spring-length
 +
: естественная длина связи, которой стремятся достигнуть все связи
 +
; repulsion-constant
 +
: постоянная отталкивание - мерой отталкивания между узлами. Это сила, которую 2 узлов на расстоянии 1 будут оказывать друг на друга. Чем выше repulsion-constant тем сильнее узлы отталкиваются.
 +
 +
Например,
 +
 +
; layout-spring turtle links 2 1 0.1
 +
:
 +
; layout-spring turtle links 2 0.1 0.1  -
 +
: нужно прикладывать большое усилие, расстояние не велико и они слабо отталкиваются
 +
;  layout-spring (turtles with [any? link-neighbors]) links 0.4 6 1
 +
: из одной библиотечной модели NetLogo - растаскивать на большую величину
 +
; layout-spring turtles links (1 / factor) (7 / factor) (1 / factor)
 +
: тот же примерно принцип - 1:7:1 соотношение для разделения узлов
 +
 +
[[Файл:Layout-spring.png]]
  
 
=== Команды связям ===
 
=== Команды связям ===
 
* clear-links - уничтожить все связи
 
* clear-links - уничтожить все связи
 
* both-ends
 
* both-ends
*die
+
** ask link 0 1 [print  both-ends]
*hide-link
+
* die - умереть
 +
* hide-link - спрятать связь
 
*in-<breed>-neighbor?
 
*in-<breed>-neighbor?
 
*in-<breed>-neighbors
 
*in-<breed>-neighbors
 
*in-<breed>-from
 
*in-<breed>-from
*in-link-neighbor?
+
*in-link-neighbor? связан ли данный узел с данным узлом?
*in-link-neighbors
+
** ask turtle 1 [show in-link-neighbor? turtle  2]
 +
* in-link-neighbors - все, кто связан с данным агентом направленными связями (к данному агенту)
 +
** ask in-link-neighbors [set heading [heading] of myself] Всем моим связанным соседям повернуться в ту же сторону, что и я
 +
* out-link-neighbors - все, кто связан с данным агентом направленными связями (от данного агента)
 
*in-link-from
 
*in-link-from
 
** Возвращает связь, которая связывает агента с данной черепахой. Например,   
 
** Возвращает связь, которая связывает агента с данной черепахой. Например,   
 
*** ask turtle 0 [ create-link-to turtle 1 ] ask turtle 1 [ show in-link-from turtle 0 ]
 
*** ask turtle 0 [ create-link-to turtle 1 ] ask turtle 1 [ show in-link-from turtle 0 ]
*is-directed-link?
+
*is-directed-link? если связь направленная, возвращает true (иначе возвращает false)
*is-link?
+
*is-link? если это связь, возвращает true
 
*is-link-set?
 
*is-link-set?
 
*is-undirected-link?
 
*is-undirected-link?
*layout-circle
 
*__layout-magspring
 
*layout-radial
 
*layout-spring
 
*layout-tutte
 
 
*<breed>-neighbor?
 
*<breed>-neighbor?
 
*<breed>-neighbors
 
*<breed>-neighbors
 
*<breed>-with
 
*<breed>-with
*link-heading
+
*link-heading - направление связи
 +
** ask link 0 1 [ print link-heading ]
 
*link-length
 
*link-length
 +
** ask link 2 1 [ print link-length ]
 
*link-neighbor?
 
*link-neighbor?
*link
+
*link - связь. Обращение к связи.
*links
+
** Например - Ask link 0 1 [set color 15]
 +
*links обращение ко всем связям
 +
** ask links [set color 25]
 +
** Если мы хотим выделить группу связей - ask links with [link-length > 3] [set color 45]
 +
** ask links [ask both-ends [ask neighbors  [set pcolor 5] ]  ]
 +
** ask links with [link-length > 3 ] [ask both-ends [ask neighbors  [set pcolor 15] ]  ]
 +
** ask links with [link-length < 2 ] [ask both-ends [ask neighbors  [set pcolor 25] ]  ] - Здесь мы говорим связям, длина которых меньше или больше выбранного значения обратиться к [[черепахи NetLogo|черепашках]] на обоих концах и передать [[пятна NetLogo|пятнам]] команду изменить цвет.
 
*links-own
 
*links-own
 
*<link-breeds>-own
 
*<link-breeds>-own
Строка 64: Строка 147:
 
*** ask my-in-links [ask other-end [be_free]
 
*** ask my-in-links [ask other-end [be_free]
 
*my-links Возвращает все связи данного агента
 
*my-links Возвращает все связи данного агента
** Например, ask my-link [die] - а что еще можно сказать связям
+
** Например, ask my-link [die] - а что еще можно сказать связям?
*my-out-<breeds>
+
* my-out-<breeds>
*my-out-links
+
* my-out-links мои направленные исходящие связи
*no-links
+
* no-links
*other-end
+
* other-end команда от черепашки к связи или связям. Связь передает другому узлу команду к исполнение
 +
** ask my-in-links [ask other-end [die]] или ask my-in-links [ask other-end [hatch]]
 
*out-<breed>-neighbor?
 
*out-<breed>-neighbor?
  
 +
 +
==== Вопросы про связи ====
 +
===== Как я могу узнать номер связи, чтобы к ней обратиться? =====
 +
* У связи нет номера. Связь характеризуется номерами узлов, которые она связывает. Мы можем попросить все связи подписать номера своих узлов
 +
** ask links [set label [who] of both-ends]
 +
** и теперь ask link 59 11 [show link-heading show link-length  ] 
 +
 +
 +
===== Связать черепах с теми, кого она и произвела. Задача из проекта по по построению модели вики: =====
 +
; pages-own [history] ;
 +
: Свойство каждой страницы - список "история"
 +
; to write_page
 +
: rt random 10 lt random 10 fd 1
 +
: hatch 1
 +
: [ set breed pages set history lput [who] of myself [] ;
 +
; end
 +
 +
 +
; ask pages [create-link-to writer first history]
 +
: <br clear=all /> [[Файл:WkipageCreate051.png]] <br clear=all />
  
 
[[Категория:NetLogo]]
 
[[Категория:NetLogo]]

Текущая версия на 12:49, 30 января 2016

Связи в NetLogo такие же агенты как черепахи NetLogo и пятна NetLogo. Связь всегда связывает двух черепах (два узла). Если одна из черепах погибает, то погибает и связь. Связи бывают направленными и ненаправленными.

Содержание

[править] Ненаправленные связи

Ненаправленные связи создаются командами к черепахам - create-link-with или create-links-with. Например,

  • ask turtle 0 [create-link-with turtle 1] - команда черепахе 0 создать связь с черепахой 1
  • ask turtle 0 [create-links-with other turtles] команда черепахе 0 создать связи со всеми другими черепахами
  • ask turtles [create-links-with other turtles] команда всем черепахам создать связи со всеми другими черепахами

[править] Направленные связи:

  • create-links-from или create-link-from направленная связь других агентов к данному агенту
    • Например, ask turtle 0 [create-link-from other turtles]
  • create-link-to или create-links-to направленная связь от данного агента к другому или другим
    • ask turtle 0 [create-link-to other turtles]

[править] Связи между породами

Породы NetLogo связываются такими же командами как и черепахи: create-<breed>-from, create-<breeds>-from, create-<breed>-to, create-<breeds>-to, create-<breed>-with, create-<breeds>-with

[править] layout

Специально для того, чтобы улучшить видимость сети из узлов и связей в NetLogo появились процедуры layout:

[править] layout-circle

  • layout-circle turtles radius - все черепашки выстраиваются по кругу заданного радиуса:
    • layout-circle turtles with [color = red] 5 - все красные черепашки в круг с радиусом 5

Layout-circle.png

[править] layout-radial

  • layout-radial
    • layout-radial turtles links (turtle 0) - черепашки выстраиваются относительно корневого агента - указанного в скобках.

Пример процедуры:

 to clustC
let Centr max-one-of users [nw:betweenness-centrality]
layout-radial turtles links Centr
export-view (word "../sber_results/u325/clusters/" [who] of Centr ".png" )
ask Centr [die]
ask users with [count my-links = 0] [die]
end


Layout-radial.png

[править] layout-tutte

to make-a-tree
 set-default-shape turtles "circle"
 crt 6
 ask turtle 0 [
   create-link-with turtle 1
   create-link-with turtle 2
   create-link-with turtle 3
 ]
 ask turtle 1 [
   create-link-with turtle 4
   create-link-with turtle 5
 ]
 ; place all the turtles with just one
 ; neighbor on the perimeter of a circle
 ; and then place the remaining turtles inside
 ; this circle, spread between their neighbors.
 repeat 10 [ layout-tutte (turtles with [link-neighbors = 1]) links 12 ]
end


repeat 10 [layout-tutte max-n-of 15 turtles [nw:betweenness-centrality] links 22]

Layout-tutte01.png

[править] layout-spring

layout-spring - силовой алгоритм размещения

  • layout-spring turtle-set link-set spring-constant spring-length repulsion-constant
    • repeat 30 [ layout-spring turtles links 0.2 5 1 ] - черепахи, связи, жесткость связи (натяжение), естественная длина связи (которой стремиться достигнуть), сила отталкивания между узлами


layout-spring turtle-set link-set spring-constant spring-length repulsion-constant
layout-spring Группа_Черепах Группа_связей Сопротивление Естественная_длина_связи Сила_отталкивания_между узлами

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

spring-constant
spring-constant - "натянутости" пружины. Это "сопротивление", к тому, чтобы изменить длину связи. Чем выше, тем большее усилие надо прикладывать
spring-length
естественная длина связи, которой стремятся достигнуть все связи
repulsion-constant
постоянная отталкивание - мерой отталкивания между узлами. Это сила, которую 2 узлов на расстоянии 1 будут оказывать друг на друга. Чем выше repulsion-constant тем сильнее узлы отталкиваются.

Например,

layout-spring turtle links 2 1 0.1
layout-spring turtle links 2 0.1 0.1 -
нужно прикладывать большое усилие, расстояние не велико и они слабо отталкиваются
layout-spring (turtles with [any? link-neighbors]) links 0.4 6 1
из одной библиотечной модели NetLogo - растаскивать на большую величину
layout-spring turtles links (1 / factor) (7 / factor) (1 / factor)
тот же примерно принцип - 1:7:1 соотношение для разделения узлов

Layout-spring.png

[править] Команды связям

  • clear-links - уничтожить все связи
  • both-ends
    • ask link 0 1 [print both-ends]
  • die - умереть
  • hide-link - спрятать связь
  • in-<breed>-neighbor?
  • in-<breed>-neighbors
  • in-<breed>-from
  • in-link-neighbor? связан ли данный узел с данным узлом?
    • ask turtle 1 [show in-link-neighbor? turtle 2]
  • in-link-neighbors - все, кто связан с данным агентом направленными связями (к данному агенту)
    • ask in-link-neighbors [set heading [heading] of myself] Всем моим связанным соседям повернуться в ту же сторону, что и я
  • out-link-neighbors - все, кто связан с данным агентом направленными связями (от данного агента)
  • in-link-from
    • Возвращает связь, которая связывает агента с данной черепахой. Например,
      • ask turtle 0 [ create-link-to turtle 1 ] ask turtle 1 [ show in-link-from turtle 0 ]
  • is-directed-link? если связь направленная, возвращает true (иначе возвращает false)
  • is-link? если это связь, возвращает true
  • is-link-set?
  • is-undirected-link?
  • <breed>-neighbor?
  • <breed>-neighbors
  • <breed>-with
  • link-heading - направление связи
    • ask link 0 1 [ print link-heading ]
  • link-length
    • ask link 2 1 [ print link-length ]
  • link-neighbor?
  • link - связь. Обращение к связи.
    • Например - Ask link 0 1 [set color 15]
  • links обращение ко всем связям
    • ask links [set color 25]
    • Если мы хотим выделить группу связей - ask links with [link-length > 3] [set color 45]
    • ask links [ask both-ends [ask neighbors [set pcolor 5] ] ]
    • ask links with [link-length > 3 ] [ask both-ends [ask neighbors [set pcolor 15] ] ]
    • ask links with [link-length < 2 ] [ask both-ends [ask neighbors [set pcolor 25] ] ] - Здесь мы говорим связям, длина которых меньше или больше выбранного значения обратиться к черепашках на обоих концах и передать пятнам команду изменить цвет.
  • links-own
  • <link-breeds>-own
  • link-neighbors
  • link-with
  • my-<breeds>
  • my-in-<breeds>
  • my-in-links Возвращает все направленные ко мне связи
    • Например, я хочу всех черепах, которые связаны с данной направленными к ней связями что-то сделать
      • ask my-in-links [ask other-end [be_free]
  • my-links Возвращает все связи данного агента
    • Например, ask my-link [die] - а что еще можно сказать связям?
  • my-out-<breeds>
  • my-out-links мои направленные исходящие связи
  • no-links
  • other-end команда от черепашки к связи или связям. Связь передает другому узлу команду к исполнение
    • ask my-in-links [ask other-end [die]] или ask my-in-links [ask other-end [hatch]]
  • out-<breed>-neighbor?


[править] Вопросы про связи

[править] Как я могу узнать номер связи, чтобы к ней обратиться?
  • У связи нет номера. Связь характеризуется номерами узлов, которые она связывает. Мы можем попросить все связи подписать номера своих узлов
    • ask links [set label [who] of both-ends]
    • и теперь ask link 59 11 [show link-heading show link-length ]


[править] Связать черепах с теми, кого она и произвела. Задача из проекта по по построению модели вики:
pages-own [history] ;
Свойство каждой страницы - список "история"
to write_page
rt random 10 lt random 10 fd 1
hatch 1
[ set breed pages set history lput [who] of myself [] ;
end


ask pages [create-link-to writer first history]

WkipageCreate051.png
Персональные инструменты
Инструменты