Приглашаем к участию в проекте «300 ИнтелШкол-2011»

NetLogo

Материал из Letopisi.Ru — «Время вернуться домой»

(Перенаправлено с НетЛого)
Перейти к: навигация, поиск

Содержание

Введение

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 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


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 в сети

В сети существует сообщество пользователей, которые обмениваются моделями, написанными на языке 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

Источник — «/index.php/NetLogo»
Инструменты
организаторы проекта
Компания ТрансТелеКом
Корпорация Intel
PH International
www.Iteach.ru
партнер проекта

Почта России

Классный Журнал

www.centersot.org


наши друзья



Жужа. Ежедневная сказка
мы поддерживаем

Образование



Установите «Letopisi NewsReader» на свой компьютер