Витуальная Пустынь
\"Pustyn\"

NetLogo

NetLogo- записки на полях БукиБуки

Краткое описание языка NetLogo и его возможного использования в обучении

Патаракин Е.Д.

Предуведомление

NetLogo является продолжением языка Лого, очевидно, первого языка, созданного еще в 1968 году объединенными усилиями Массачуссеткого Технологического Института и корпорации BBN (Bolt Beranek & Newman) с целью обучать детей при помощи компьютера. Язык получил очень широкое распространение и популярность благодаря работам Сеймрура Пейперта и его группы Media MIT. Наибольшую известность имеет получила книга Пейперта "Переворот в сознании: дети, компьютеры и плодотворные идеи", переведенная на русский язык. В восьмидесятые годы Logo и LogoWriter были установлены в США на каждом четвертом школьном компьютере. Язык так и не был оценен по достоинству. Как пишут в WikiWiki http://c2.com/cgi/wiki?LogoLanguage - трагедия Лого в том, что инструктора, обучавшие Лого шести-семилетних детей никогда сами не владели полностью возможностями этого языка.

Лирический отчет о моем опыте участия в проекте LogoExpress в 1992 -1993 году - http://school-sector.relarn.ru/efim/4mistakes/2001/kop_2001_049.htm

В 1995 - 1999 году я использовал ucblogo - BerkeleyLogo, созданный Харви [Brian Harvey http://www.cs.berkeley.edu/~bh/] из Университета Беркли на уроках информатики в Интернет-студии начальной школы. Впечатление и от общения с Харви и от самого программного продукта осталось самое приятное.

К сожалению, этот опыт остался невостребованным, поскольку Интернет-студия жила своей собственной linux-жизнью.

История

Уже середине 90-х годов Мич Резник и его группа разработали продукт StarLogo, в котором действовали множество черепашек. Продукт был нацелен именно на изучение закономерностей и феноменов, в которые вовлечено множества агентов. Резник называет это экологическим мышлением и утверждает, что название придумал Алан Кей. Домашняя страничка проекта - http://education.mit.edu/starlogo/ здесь же можно скачать последнюю версию.

В конце 90-х Ури Виленский отделился от StarLogo с отдельным проектом NetLogo, который наследовал многие свойства StarLogo

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

В отличие от конференции StarLogo ориентированной на учителей, конференция и сам продукт NetLogo более тяготеет к исследовательской аудитории и преподавателям ВУЗов.

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

В традиционном языке Лого ученики дают инструкции одному исполнителю - черепашке. В мультиагентном языке команды можно отдавать сотням и тысячам черепашек, указывая им надлежащий способ поведения и взаимодействия друг с другом. Кроме подвижных черепашек в языке присутствуют пятна, на которые поделена вся плоская поверность мира. Пятна (patches) неподвижны, но так же являются агентами - исполнителями и им можно давать инструкции. При помощи пятен можно моделировать границы, количество пищи и т.п.

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

Рисунок 1 -

- Общий вид интерфейса. Верхний ряд - Работа с файлами, редактирование. Второй ряд - общий вид, Информация о модели, процедуры программы, сообщения об ошибках. Третий ряд - создание кнопок, переключателей и графиков.

Первое, что стоит сделать - создать свою первую кнопку.

Рисунок 2

Создание первой кнопки на экране обозревателя. Код кнопки должен быть связан с именем одной из процедур. Обратите внимание на возможность опции Forever.

Рисунок 3

Создание процедуры, связанной с кнопкой Старт

Рисунок 4

Результат выполнения процедуры, запускаемый кнопкой Старт

to setup

ca ; clear all - очистить все

crt t1 ; CreateTurtles создать t1 черепах

ask patches [set pcolor white] ; все участки белеют

ask turtles [ set color white fd random 15 ht]

ask turtle 0 [set color red]

end

Рисунок 5

Использование "вечнодействующей" кнопки и слайд-бара, регулирующего численность черепашек

Рисунок 6

Черепашки меняют цвет на экране

Рисунок 7

График роста численности красных черепашек

Рисунок 8

График показывает изменение численности белых и красных черепашек во времени

to go

ask turtles [rt random 360 fd random 5]

; Простое заражение любой случайно встретившейся на пути черепашки - она становится красной

;ask turtles with [color = red] [st ask turtles-here [set color red] wait 0.1]

; Если красной черепахе встречается белая, то белая заражается

; Если две красных, то одна из красных умирает, или возвращается в лагерь белых

ask turtles with [color = red]

[st ask turtles-here with [who != who-of myself]

[check_life] wait 0.1]

do_plot

end

to check_life

; Вариант, когда черепашка умирает

;if (color = red) [die]

; Вариант, когда черепашка возвращается к белым

ifelse (color = red) [set color white]

[set color red]

end

to do_plot

set-current-plot "plot1"

set-current-plot-pen "Red"

plot count turtles with [color = red]

set-current-plot-pen "White"

plot count turtles with [color = white]

end

Модели

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

Рисунок

Перечень моделей доступных в коллекции NetLogo

Биология

В первой модели действуют два типа агентов - эгоистичные и альтруистичные. В модели предполагается, что каждый из агентов оценивает своих соседей и знает какие они - эгоистичные или альтруистичные. За каждого альтруистичного соседа агент добавляет определенную величину к своему состоянию здоровья. Таким образом, в лотерее размножения всякий агент с альтруистичными соседями будет иметь дополнительные преимущества.

- Если я эгоист, то мое здоровье = 1 + вклад от альтруистичных соседей

- Если я альтруист, то мое здоровье составляет 1 - (цена моего альтруизма) + вклад от альтруистичных соседей

to perform-fitness-check ;; patch procedure

if (pcolor = green) [

set fitness (1 + altruism-benefit)

]

if(pcolor = pink) [

set fitness ((1 - cost-of-altruism) + altruism-benefit)

]

end

Уровни вклада и цены в модели могут регулироваться при помощи слайд-бара.

В отсутствии давления со стороны среды эгоистичные особи всегда имеют преимущество и вытесняют альтруистов.

Добавление к модели новых параметров - 'Harshness' 'Disease' существенно изменяет поведение модели. В новых условиях способность альтруистов к групповому положительному влиянию помогает им сохранить свою группу и успешно противостоять давлению факторов внешней среды.


Модель поведения колонии муравьев - ANTS, где каждый муравей следует простым правилам, а колония в целом демонстрирует достаточно сложное поведение. Муравей находит пищу и несет ее в муравейник. При этом на своем пути он оставляет химические метки. Другие муравьи чувствуют эти химические вещества и находят пищу по этим следам. Каждый муравей, следующий этой тропой, усиливает притяжение запахом. В модели учтено, что запахи испаряются и распространяются: EVAPORATION-RATE и DIFFUSION-RATE

Рисунок


Модель образования стай - Flocking (птиц, рыб и т.д.) Модель показывает, как стая птиц образуется в результате выполнения отдельными птицами общих правил:

- Птица стремится двигаться в том же направлении, что и другие птицы, которых она видит.

- Птица стремится отодвинуться от другой птицы, если они находятся слишком близко.

- Птица стремится приблизиться к другой птице (если они не слишком близко)

Рисунок

Модель образования стаи. Начальное состояние

Рисунок

Модель образования стаи. Промежуточное состояние

Рисунок

Модель образования стаи. Конечное устойчивое состояние


Несколько моделей экологических систем - "Кролики - Трава" и "Трава - Овцы и Волки". В этих моделях постоянно отслеживается численность всех популяций, участвующих в экосистемах.

Рисунок

При описании следующей модели - Волки и Овцы, следует обратить внимание, что в среде NetLogo в основании модели может лежать не свойства популяций, как это было в классической модели Лотка-Вольтерра (плотность популяций), а поведение отдельных особей. Каждый организм следует определенному набору простых правил и на основании этого создается паттеррны группового поведения.

Правила для волков

- перейти (случайный выбор) на доступное поле и понизить уровень своей энергии на E1;

- если на этом же поле находится одна или более овец, то съесть овцу и повысить уровень своей энергии на E2;

- Если уровень своей энергии равен нулю - умереть.

- С вероятностью R1 воспроизвести новую особь

Правила для овец:

- перейти (случайный выбор) на доступное поле и понизить уровень своей энергии на E3;

- если на поле есть трава, то съесть ее и повысить уровень своей энергии на E4;

- Если уровень своей энергии меньше нуля- умереть.

- С вероятностью R2 воспроизвести новую особь


Что нового и необычного в NetLogo?

; Всякий комментарий отделяется знаком ;

Черепашки NetLogo - плохие рисовальщики. Результат следующей процедуры на экране выглядит совсем плохо

to draw1 [list1]

if (length list1 = 0) [stop]

set heading towardsxy first first list1 last first list1

repeat 3 [pu fd (distancexy-nowrap first first list1 last first list1) / 3 pd fd 0.3 ]

draw1 bf list1

end

Как видно из текста процедуры - рекурсия поддерживается.

Утрата оператора RUN и всех связанных с ним возможностей. Конечно, это потеря для тех, кто умел им пользоваться. Аналог оператора evaluate в Perl

Переменные

Глобальные переменные обязательно должны быть определены в начале программы. В Лого в любой момент можно было присвоить значение новой переменной, даже если ее не было раньше. Теперь необходимо перечислить список globals [var1 var2 var3]

Как и раньше процедура может иметь входные параметры, которые указываются как список: To procedura1 [A1 A2 A3] и могут быть использованы как входные переменные действующие только внутри данной процедуры. Раньше их нужно было выделять знаками : - :A1 :A2

Внутри процедуры можно создать локальную переменную - local, видимую только внутри процедуры. Сделать это следует сразу после имени процедуры.

С каждой черепашкой и каждой точкой поверхности (patch) связаны значения их собственные. Для черепашки: ID - порядковый номер, color - цвет, xcor,ycor - значения расположения (центральная точка как и раньше соответствует значениям xcor=0, ycor=0)

Все предыдущие версии языка Лого, включая LogoWriter, ucblogo в представлении географических образов обращались к геометрии черепашки. Как определял Черепашку Сеймур Пейперт - объект синтонный человеческому телу и интуитивно понятный ребенку. Рисование круга, например, производилось через многократное повторение черепашкой одних и тех же действий - поворота и шага вперед.

В среде NetLogo такие действия возможны, но приводят к довольно грубому результату

- crt 1 ask turtle 0 [repeat 360 [rt 1 fd 0.1]]

Рисунок -

Гораздо естественнее для NetLogo воспользоваться сразу множеством черепашек:

- cct 120 [fd 10]

Рисунок - img=srcnl01.gif

REPORT

Произошло разделение процедур на команды-указаний черепашкам и процедуры, обязательно возвращаюшие значение. Раньше всякая процедура могла вернуть значение - для этого в Лого служил оператор Output или op - В Java-Script или в Perl для этой цели служит return. Действие всегда одинаковое - завершить выполнение процедуры и вернуть значение. Теперь в NetLogo возникает новый оператор возврата значения - REPORT и сама процедура, возвращающая значение тоже должна быть обозначена как to-report

; breeds - породы - Кроме того, что все черепашки являются черепашками и обладают свойствами черешек, можно еще в начале программы оговорить существование пород breeds [cat dog birds] и либо

; создать черепешку этой породы - create-cat

Например: report value-from random-one-of turtles [breed]

IATP
Библиотека Виртуальной Пустыни в 2003 году является частью сетевого проекта "Нижегородские ресурсы коллективного авторства" и развивается при финансовой поддержке Управления образовательных и культурных программ Государственного Департамента США в рамках Программы "Обучение и доступ к Интернет", реализуемой на территории Российской Федерации Представительством некоммерческой корпорации "Прожект Хармони Инк." (США).
Точка зрения, отраженная текстах сайта может не совпадать с точкой зрения Управления образовательных и культурных программ Государственного Департамента США или Некоммерческой корпорации "Прожект Хармони Инк.".

NN counter top100