Связи NetLogo
(→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 | ||
+ | === 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) - черепашки выстраиваются относительно корневого агента - указанного в скобках. |
− | + | ||
− | + | ||
+ | Пример процедуры: | ||
+ | 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? | ||
− | |||
− | |||
− | |||
− | |||
− | |||
*<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-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-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-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 соотношение для разделения узлов
[править] Команды связям
- 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