NetLogo

Материал из Letopisi.Ru — «Время вернуться домой»
(Различия между версиями)
Перейти к: навигация, поиск
(Литература)
Строка 29: Строка 29:
  
 
== [[Кнопки NetLogo]] ==
 
== [[Кнопки NetLogo]] ==
 
 
{{:Кнопки NetLogo}}
 
{{:Кнопки NetLogo}}
  
 +
== Расширения NetLogo ==
 +
=== [[NetLogo/GIS]] ===
 +
{{:NetLogo/GIS}}
  
 
+
== Примеры ==
=== Примеры ===
+
 
* [[NetLogo примеры]]
 
* [[NetLogo примеры]]
 
* Статья [[Муравейник]] - анимированные гифы  
 
* Статья [[Муравейник]] - анимированные гифы  

Версия 10:59, 19 апреля 2011

Содержание

Введение

NetLogo является продолжением языка Лого - первого языка, созданного еще в 1968 году объединенными усилиями Массачусетского Технологического Института и корпорации BBN (Bolt Beranek & Newman) с целью обучать детей при помощи компьютера. Создан Ури Виленским в 1999 году и развивается в Center for Connected Learning and Computer-Based Modeling.

Домашняя страничка проекта http://ccl.northwestern.edu/netlogo/ . Здесь же можно скачать последнюю версию языка. Обсуждения происходят в конференции пользователей - http://groups.yahoo.com/group/netlogo-users В отличие от конференции StarLogo, ориентированной на учителей, конференция и сам продукт NetLogo более тяготеет к исследовательской аудитории и преподавателям ВУЗов.

Среда программирования NetLogo служит для моделирования ситуаций и феноменов, происходящих в природе и обществе. NetLogo удобно использовать для моделирования сложных, развивающихся во времени систем. Создатель модели может давать указания сотням и тысячам независимых "агентов" действующим параллельно. Это открывает возможность для объяснения и понимания связей между поведением отдельных индивидуумов и явлениями, которые происходят на макро уровне.

Язык NetLogo достаточно прост и ученики и учителя могут создавать в этой среде свои собственные авторские модели. В то же время это достаточно мощный язык и среда для проведения исследовательских работ. Библиотека NetLogo содержит множество готовых моделей по биологии, математике, химии, социология. С этими моделями могут ознакомиться и поиграть ученики.

Возможности языка достаточно подробно документированы и по NetLogo существует подробное руководство. К сожалению пока только на английском языке. Язык распространяется вместе с большой библиотекой моделей, которые можно использовать и модифицировать. Для НетЛого повторное использование и дальнейшее развитие моделей даже более естественно, чем для среды Scratch, поскольку все модели хранятся в текстовых файлах. Модели NetLogo: естественные и общественные науки, физика, химия, математика, информатика, экономика, социальная психология.

Руководство по среде НетЛого на сайте создателей языка
http://ccl.northwestern.edu/netlogo/faq.html

Netlogo-intface.png

  • Interface - область, где мы исследуем свойства модели. В центре черное по умолчанию поле, на котором взаимодействую черепашки - turtles, пятна - patches и связи черепашек - links. На рабочее поле мы можем добавлять различные кнопки, переключатели. Кнопки привязываются к именам процедур.
  • Information - описание модели. Здесь авторы модели рассказывают - о чем модель, как она устроена, какие особенности, как можно использовать и развивать модель.
  • Procedures - область, где записываются процедуры NetLogo, управляющие поведением агентов - см. агенты NetLogo.

Как правило, в моделях НетЛого присутствуют 2 главные кнопки:

  1. setup - и с ней связана процедура setup - очистить экран, удалить всех агентов, создать агенты, необходимые для работы модели.
  2. go - запуск модели.

В нижней части экрана расположена строка observer - наблюдатель, который может давать команды NetLogo всем существующим в системе объектам.


Урок 1. Создаем и группируем черепах

Научимся создавать, расставлять и группировать черепах. Листинг программы - Черепашки NetLogo/Test-turtle.nlogo

Создадим новый проект. У черепашек Netlogo есть свойства - номер, цвет, координаты и т.д. Кроме того, мы можем задавать черепашкам новые свойства - turtles-own. Свойства всегда задаются в начале программы. Например, зададим для черепашек свойство group. Свойство будет иметь 2 значения - ложь или истина. Принадлежит черепашка к группе или не принадлежит.

turtles-own [group]

Вообще внутри turtles-own [] можно перечислить множество свойств

Теперь создадим первую процедуру, которая будет очищать все имеющиеся объекты и значения. Далее следует программа с комментариями. Комментарии задаются двумя символами ;;

Создаем новых черепах

to setup

  • ca - очищаем значения
  • каждая черепашка располагается в случайной точке экрана
  • crt 50 [  ;; создаем 50 черепах и разбрасываем их по экрану
  • setxy random-xcor random-ycor
  • set group false
  • ]
  • черепахи рождаются по порядку и поворачиватся последовательно. Когда мы им потом даем команду разойтись, они образуют круг
  • cro number_of_turtles [fd max-pxcor - 2]
  • Этого же результата можно достичь, если мы используем команду layout-circle
  • end

to circle

  • layout-circle turtles max-pxcor - 2

end

Мы умеем создавать черепашек и расставлять их по экрану. Теперь попробуем собрать черепашек одинакового цвета

Группируем черепах по цветам

to collect_color

  • Первая версия - черепашки объединяются, но делают много лишних движений
  ask other turtles with [color = [color] of myself] [face myself jump (distance myself) - 1] 

во второй версии задаем черепашкам свойство принадлежности к группе и в начале устанавливаем значение этого свойства в false

  • if group = false [ask other turtles with [(color = [color] of myself) and (group = false)]
 [  
 черепашка прыгает в сторону вызывающего агента
  • face myself jump (distance myself) - 1
 черепашка устанавливает свою принадлежность к группе в true - и теперь ее не будут вызывать
  • set group true create-link-to myself]]

end


На странице использованы Команды к черепахам NetLogo

Пятна - точки - patches

Агенты НетЛого, которые связаны с конкретными координатами на экране. К точке всегда можно обратится. Например:

  • ask patch 0 0 [set pcolor yellow]

Ограничения для пятен

  • Пятно не может умереть - невозможно велеть пятну умереть.
  • Невозможно создать новое пятно. Пятно не может hatch. Однако, пятно может родить новую черепашку sprout или черепашку какой-то специальной породы sprout-breed - По команде sprout в данной точке появляется черепашка

Команды для пятен

clear-patches (cp)
Очистить, стереть все пятна и вернуть их в исходное значение - черный цвет
diffuse patch-variable number
значение переменной раздается на ближайших соседей - диффузия цвета, запаха на поверхности
diffuse4 patch-variable number
значение переменной раздается на 4-х соседей - ближайшие соседние точки по прямой
import-pcolors
считать цвета из файла - картинки
patch-at dx dy
пятно с координатами относительно данного агента
Например, ask patch 2 5 [set pcolor yellow ask patch-at 2 2 [set pcolor red]]
patch-left-and-ahead angle distance
пятно слева и сверху
patch-at-heading-and-distance
пятно по направлению и на расстоянии
ask patch-at-heading-and-distance -90 1 [ set pcolor green ]

Примеры команд и процедур с пятнами

Окрасить все пятна в зависимости от расстояния до центра
ask patches [set pcolor distancexy 0 0]
Покрасить точки вокруг центральной точки в зеленый цвет
ask patch 0 0 [set pcolor yellow ]
ask patch 0 0 [set pcolor yellow ask neighbors4 [ set pcolor green ]]
ask patch 0 0 [set pcolor yellow ask neighbors4 [ set pcolor green ask neighbors [set pcolor red] ]]
и так далее, если хотим перекрашивать соседей

Связи в 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

См. Кнопки NetLogo/test_buttons.nlogo

Button

Кнопка - button - связана с процедурой на странице Procedures. Когда создается кнопка, мы можем указать какому из агентов она отдает указание:

  • Обозреватель
  • Черепахи
  • Пятна
  • Связи

Имя команды и имя кнопки на экране могут не совпадать. Например, мы можем создать процедуру setup и на экране задать имя кнопки - "Начнем"

Если кнопка создана и для нее еще нет процедуры, то кнопка окрашена в красный цвет.

to setup
ca
cro 50 [fd 5]
end

Создадим себе первую процедуру. В этой процедуре у нас создаются 50 черепашек.

Slider

Следующая кнопка - рычажок - slider - меняя положение рычажка можно изменять параметры модели. Например, мы хотим, чтобы число можно было при помощи этой кнопки менять число черепах. Рычажок задает имя глобальной переменной и может содержать только латинские буквы. Здесь же указывается интервал, в котором изменяются значения. Например, от 1 до 500


to setup
ca
cro num_turtles [fd 5]
end


Switch

Переключает положение для глобальной переменной. Это значение пользователь на экране может поставить в положение ON/OFF

to setup
ca
cro num_turtles [fd 5]
ifelse green? [ask patches [set pcolor green]]
[ask patches [set pcolor pxcor]]
end

Здесь показано использование кнопки для организации ветвления. Если переменная green? включена, то пятна экрана окрашиваются в зеленый цвет. Если значение переменной отключено, то пятна окрашиваются в другие цвета. В примере показано, как мы можем окрасить пятно в цвет, выбрав значение цвета из координат этого пятна.


 to setup
ca
cro num_turtles [fd 5]
ifelse green? [ask patches [set pcolor green]]
[ask patches [
if pycor != 0
[set pcolor pxcor / pycor] ]]
end

Chooser

Выбор значения глобальной переменной. Переключатель задает имя глобальной переменной и может содержать только латинские буквы. В этом примере мы создаем tcolor и указываем значения, которые может принимать tcolor - 5, 15, 25, 35, 45. Создадим еще одну кнопку, которая будет проверять цвет черепашки. Теперь жизни черепашек в наших руках. Все, чей цвет меньше выбранного, при нажатии кнопки go будут погибать.

to go
ask turtles with [color < tcolor] 
[die]
end

Input

Кнопка позволяет пользователю вводить или выбирать значение. Например, создадим кнопку incolor, в которой можно изменять или выбирать значение цвета. Создадим еще и кнопку "Новые черепахи" и свяжем ее с процедурой hatch_new

to hatch_new
ask turtles with [color = incolor]
[hatch 2 [rt random 90 fd 2]]
end

Теперь мы можем увеличивать численность черепах заданного цвета. Если цвет черепахи совпадает с выбранным пользователем цветом, то эта черепаха рождает двоих потомков.

Monitor

Окно, в котором показывается выбранное значение. Например, мы создаем monitor, который показывает общую численность всех черепах - count turtles.

Plot

Окно, в котором в виде графика отражаются численные значения.

to hatch_new
ask turtles with [color = incolor]
[hatch 2 [rt random 90 fd 2]]
set-current-plot "Trt"
plot count turtles with [color = incolor]
end

NetLogo/GIS

За последние годы географические информационные системы (ГИС) изменили нашу жизнь. Google Maps, Earth и десятки других веб-служб сделали прорыв в сервисах-локаторах. Наши мобильные телефоны позволяют через GPRS определять местонахождение их владельцев.

Последние версии NetLogo включили расширения ГИС-расширение. Несмотря на свою простоту, это расширение создает одну из самых доступной ГИС-систем, которые мы знаем.


ARGIS
http://ru.wikipedia.org/wiki/ArcGIS
http://www.dataplus.ru/Soft/ESRI/ArcGIS/ArcGIS.htm

Литература

  1. http://pan1950.wordpress.com/2010/10/05/netlogo-gis/
  2. Агент-ориентированное моделирование природных пожаров. Динамика эвакуаций
    • Разработчики данной модели считают что лучшее, что можно сделать в борьбе с пожарами это планирование, выполнение различных сценариев и поиск общих закономерностей заторов на дорогах. Визуализация возможных сценариев пожаров были очень эффективны для повышения информированности общественности и служат фоном для дискуссий с участием трудных решений, стоящих перед сообществом.
  3. http://www.turtlezero.com/wiki/doku.php?id=guide:gis#how_is_gis_data_represented_in_netlogo
  4. http://www.geosimulation.org/papers/2010-Torrens-Geography-Compass-agent-based-models-and-the-spatial-sciences.pdf

Примеры

Сообщество NetLogo в сети

В сети существует сообщество пользователей, которые обмениваются моделями, написанными на языке NetLogo. Адрес сообщества - http://ccl.northwestern.edu/netlogo/models/community/

Что можно делать в этом сообществе:

  • Прочитать описание модели, ее назначение, принципы, которые лежат в основании
  • Посмотреть выполнение программы в сети. Для этого достаточно просто запустить программу в своем браузере. Java-applet отработает и покажет в отдельном окне как работает модель
  • Скачать модель и запустить на своем компьютере.
  • Внести в модель изменения и использовать готовые процедуры, взятые из чужой модели внутри своих собственных программ.
  • Загрузить свою собственную модель на общедоступный сервер http://ccl.northwestern.edu/netlogo/upload.shtml и предложить ее к обсуждению и совместному использованию.

Достаточно часто встречается формулировка - данная модель является продолжением или развитием модели - далее следует ссылка на предшествующую модель и имя её автора.

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

Насколько продуктивно работает сообщество? Сообщество исследовательское, создание модели требует достаточно высокого уровня программирования в среде NetLogo - так что количество загружаемых на сервер файлов не велико. Все загруженные модели пригодны для дальнейшего использования в учебном процессе.

Близкие по стилю организации сообщества:

Литература

Изучение сетевых и общественных феноменов с помощью черепашек
SIMULATION FOR THE SOCIAL SCIENTIST - http://cress.soc.surrey.ac.uk/s4ss/ - книга с многочисленными примерами социальных систем, написанными и на NetLogo
Abrahamson, D., Blikstein, P., & Wilensky, U. (2007). Classroom Model, Model Classroom
Computer-Supported Methodology for Investigating Collaborative-Learning Pedagogy. Proceedings of the Computer-Supported Collaborative Learning conference, New Brunswick, NJ. http://ccl.northwestern.edu/papers/2007/abr-cscl.pdf
Blikstein, P., Abrahamson, D., & Wilensky, U. (2007). Multi-agent simulation as a tool for investigating cognitive-developmental theory. Paper presented at the 2007 annual meeting of the American Educational Research Association, Chicago, IL, April 9-13. http://ccl.northwestern.edu/papers/2007/NU%20CCL%20AERA%202007%20Piaget%20Conservation%20Paper%20v8.pdf
Blikstein, P., & Wilensky, U. (2008). Implementing multi-agent modeling in the classroom
Lessons from empirical studies in undergraduate engineering education. In G. Kanselaar, J. van Merriënboer, P. Kirschner & T. de Jong (Eds.), Proceedings of the International Conference for the Learning Sciences, ICLS2008 (Vol. 3, pp. 266-273). Utrecht, The Netherlands: ISLS. http://ccl.northwestern.edu/papers/2008/Blikstein&Wilensky_MultiAgent.pdf
Класс рассматривается как мультиагентная система, в которой множество учеников в процессе решения общей задачи.
Blikstein, P., Abrahamson, D., & Wilensky, U. (2008, March). Groupwork as a complex adaptive system
A methodology to model, understand, and design classroom strategies for collaborative learning. Paper presented at the annual conference of the American Education Research Association, New York, NY.
Blikstein, P., Abrahamson, D., & Wilensky, U. (2008). The classroom as a complex adaptive system
An agent-based framework to investigate students' emergent collective behaviors. In G. Kanselaar, J. van Merriënboer, P. Kirschner & T. de Jong (Eds.), Proceedings of the International Conference for the Learning Sciences, ICLS2008 (Vol. 3, pp. 312-313). Utrecht, The Netherlands: ISLS. http://ccl.northwestern.edu/papers/2008/Blikstein,etAl_ClassroomComplex.pdf
Kornhauser, D., Rand, W., & Wilensky, U. (2007). Visualization Tools for Agent-Based Modeling in NetLogo. Paper presented at Agent2007, Chicago, November 15-17. http://ccl.northwestern.edu/papers/2009/Kornhauser,Wilensky&Rand_DesignGuidelinesABMViz.pdf
С отличными примерами визуализаций моделей Netlogo и ссылками на Маэда. Классификация визуализаций: клеточные автоматы, Физические процессы, фракталы, геометрические фигуры.
Stonedahl, F., Rand, W., & Wilensky, U. (2008, May). Multi-agent learning with a distributed genetic algorithm
Exploring innovation diffusion on networks. Paper presented at the Seventh International Conference on Autonomous Agents and Multi-agent Systems (AAMAS), Estoril, Portugal. http://ccl.northwestern.edu/papers/2008/Stonedahl,Rand&Wilensky_MultiAgentLearning.pdf
Wilensky, U., & Rand, W. (2007). Making models match
Replicating agent-based models. Journal of Artificial Societies and Social Simulation (JASSS), 10(4). http://jasss.soc.surrey.ac.uk/10/4/2.html

Инструменты