Приглашаем к участию в проекте «300 ИнтелШкол-2013»
NetLogo
Содержание |
Введение
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
- Interface - область, где мы исследуем свойства модели. В центре черное по умолчанию поле, на котором взаимодействую черепашки - turtles, пятна - patches и связи черепашек - links. На рабочее поле мы можем добавлять различные кнопки, переключатели. Кнопки привязываются к именам процедур.
- Information - описание модели. Здесь авторы модели рассказывают - о чем модель, как она устроена, какие особенности, как можно использовать и развивать модель.
- Procedures - область, где записываются процедуры NetLogo, управляющие поведением агентов - см. агенты NetLogo.
Как правило, в моделях НетЛого присутствуют 2 главные кнопки:
- setup - и с ней связана процедура setup - очистить экран, удалить всех агентов, создать агенты, необходимые для работы модели.
- go - запуск модели.
В нижней части экрана расположена строка observer - наблюдатель, который может давать команды NetLogo всем существующим в системе объектам.
Черепашки 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
Пятна 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 и пятна 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 turtles radius - все черепашки выстраиваются по кругу заданного радиуса:
- layout-circle turtles with [color = red] 5 - все красные черепашки в круг с радиусом 5
- layout-radial
- layout-radial turtles links (turtle 0) - черепашки выстраиваются относительно корневого агента - если есть родительская черепаха
- layout-tutte turtle-set link-set radius
- layout-tutte (turtles with [count link-neighbors = 1]) links 12
Команды связям
- 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
Кнопки NetLogo
См. Кнопки 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
NetLogo/GIS
За последние годы географические информационные системы (ГИС) изменили нашу жизнь. Google Maps, Earth и десятки других веб-служб сделали прорыв в сервисах-локаторах. Наши мобильные телефоны позволяют через GPRS определять местонахождение их владельцев.
Последние версии NetLogo включили расширения ГИС-расширение. Несмотря на свою простоту, это расширение создает одну из самых доступной ГИС-систем, которые мы знаем.
Программное обеспечение для обработки данных для NetLogo
Литература
- http://pan1950.wordpress.com/2010/10/05/netlogo-gis/
- Агент-ориентированное моделирование природных пожаров. Динамика эвакуаций
- Разработчики данной модели считают что лучшее, что можно сделать в борьбе с пожарами это планирование, выполнение различных сценариев и поиск общих закономерностей заторов на дорогах. Визуализация возможных сценариев пожаров были очень эффективны для повышения информированности общественности и служат фоном для дискуссий с участием трудных решений, стоящих перед сообществом.
- http://www.turtlezero.com/wiki/doku.php?id=guide:gis#how_is_gis_data_represented_in_netlogo
- http://www.geosimulation.org/papers/2010-Torrens-Geography-Compass-agent-based-models-and-the-spatial-sciences.pdf
Примеры
- NetLogo примеры
- Статья Муравейник - анимированные гифы
- Статья Сеть с использованием модели растущего кластера
- Формирование команд - модель формирования команд
Сообщество NetLogo в сети
В сети существует сообщество пользователей, которые обмениваются моделями, написанными на языке NetLogo. Адрес сообщества - http://ccl.northwestern.edu/netlogo/models/community/
Что можно делать в этом сообществе:
- Прочитать описание модели, ее назначение, принципы, которые лежат в основании
- Посмотреть выполнение программы в сети. Для этого достаточно просто запустить программу в своем браузере. Java-applet отработает и покажет в отдельном окне как работает модель
- Скачать модель и запустить на своем компьютере.
- Внести в модель изменения и использовать готовые процедуры, взятые из чужой модели внутри своих собственных программ.
- Загрузить свою собственную модель на общедоступный сервер http://ccl.northwestern.edu/netlogo/upload.shtml и предложить ее к обсуждению и совместному использованию.
Достаточно часто встречается формулировка - данная модель является продолжением или развитием модели - далее следует ссылка на предшествующую модель и имя её автора.
Некоторые модели NetLogo позволяют изучать процессы, кооперации, формирования сообществ и процессы совместного обучения:
- http://ccl.northwestern.edu/netlogo/models/community/Cluster
- http://ccl.northwestern.edu/netlogo/models/community/Homework_highschool
- http://ccl.northwestern.edu/netlogo/models/community/Wireless-Coop-Mobile
- http://ccl.northwestern.edu/netlogo/models/community/Network_growth
- http://ccl.northwestern.edu/netlogo/models/community/Learning%20and%20Creativity
- http://ccl.northwestern.edu/netlogo/models/community/AdoptLearnOnLine - Как фермеры обмениваются своими опытами о земле
- http://ccl.northwestern.edu/netlogo/models/TeamAssembly - формирование команд
Насколько продуктивно работает сообщество? Сообщество исследовательское, создание модели требует достаточно высокого уровня программирования в среде NetLogo - так что количество загружаемых на сервер файлов не велико. Все загруженные модели пригодны для дальнейшего использования в учебном процессе.
Близкие по стилю организации сообщества:
Критика NetLogo
- there are more limitations than advantages with NetLogo in comparison to AnyLogic http://justinlyonandsimulation.blogspot.com/2006/08/netlogo-vs-anylogic.html
Литература
- Artificial Intelligence—Agents and Environments http://bookboon.com/us/textbooks/it/artificial-intelligence-agents-and-environments
- Artificial Intelligence: Exercises I - Agents and Environments http://bookboon.com/us/textbooks/it/artificial-intelligence-exercises-i
- Artificial Intelligence: Exercises II - Agent Behaviour I http://bookboon.com/us/textbooks/it/artificial-intelligence-exercises-ii
- http://files.bookboon.com/ai/ - примеры 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