Краткое описание языка 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 - плохие рисовальщики. Результат следующей процедуры на экране выглядит совсем плохо
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]
Библиотека Виртуальной Пустыни в 2003 году является частью сетевого проекта
"Нижегородские ресурсы коллективного авторства"
и развивается
при финансовой поддержке Управления образовательных и культурных программ
Государственного Департамента США в рамках Программы
"Обучение и доступ к Интернет",
реализуемой на территории Российской Федерации Представительством некоммерческой
корпорации "Прожект Хармони Инк." (США).
Точка зрения, отраженная текстах сайта может не совпадать с точкой зрения
Управления образовательных и культурных программ Государственного Департамента
США или Некоммерческой корпорации "Прожект Хармони Инк.".