StarLogo

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 23:42, 7 июня 2016.
StarLogo
fraimed
Парадигма Мультипарадигмальный: учебный, процедурный, язык имитационного моделирования, в частности агентного
Разработчики MIT Media Lab иMIT Teacher Education Program
Печать дисциплины утиная, динамическая, сильная
Портал: [education.mit.edu]
Главная реализация
StarLogo TNG, StarLogo, MacStarLogo Classic, OpenStarLogo, starlogoT
Влияние
NetLogo, Etoys

StarLogo — (СтарЛого, произносится stɑː ˈləʊgəʊ) — агентно-ориентированный язык моделирования, разработанный Митчелом Резником, Эриком Клёпфером, и др. в MIT Media Lab Массачусетского технологического института в рамках программы педагогического образования в штате Массачусетс. Это расширение языка программирования Лого, которое можно называть диалектом функционального языка программирования Lisp. Будучи предназначенным для образовательных целей, StarLogo может быть использован студентами для моделирования поведения децентрализованных систем.

Развитие и диалекты

Первая версия StarLogo запускалась на компьютерах Connection Machine 2. Последующая версия была адаптирована под компьютеры Macintosh; эта версия стала известна позже как MacStarLogo (а теперь и называется MacStarLogo Classic). Текущая StarLogo написана на Java и работает на большинстве компьютеров.

В настоящее время StarLogo доступен в версии под названием OpenStarLogo . Исходный код для OpenStarLogo доступен в Интернете, хотя лицензия, под которой она выпущена, не является полноценной OpenSource лицензией в соответствии с Open Source Definition, из-за ограничений на коммерческое использование кода.

Также StarLogo доступен в версии StarLogoT , который является программируемой средой моделирования для построения и изучения многоуровневых систем. StarLogoT позволяет контролировать поведение тысяч объектов в параллельном режиме. Каждый объект имеет свои собственные переменные и состояние. Это позволяет моделировать поведение распределенных и вероятностных систем и систем, обнаруживающих сложную динамику.

Синтаксис и элементы языка

Объявление переменных

В верхней части окна процедур, для каждого агента (Черепахи, Заплатки, и наблюдателя) могут быть объявлены свои переменные для модели. Каждый агент имеет некоторые переменные по умолчанию; например, каждый агент типа Черепаха имеет переменные "цвета" и "заголовок". Тем не менее, многие модели требуют предоставления агентам новых переменных. Например, каждая черепаха может имеют энергетический запас, который увеличивается каждый раз, когда она ест и уменьшается каждый раз, когда она движется. В верхней части такой модели мы можем объявить эту переменную со следующим текстом:

Turtles-own [energy]

Можно дать черепахе больше переменных, добавив их в список:

Turtles-own [energy gender]

Теперь каждая черепаха имеет переменную "пол", которая может быть полезной при построении модели размножения. Для заплаток синтаксис аналогичен:

Patches-own [grass-length]

Эта переменная может быть использована, если каждый черепаха ест траву из заплаты, которая включена. Переменная длины травы заплаты может быть уменьшена с помощью команды tset-grass-length. Тогда для каждой черепахи будет уменьшено значение данной переменной. Объявление массивов требует установки длины массива. Это определяет, сколько элементов, или переменных, массив может содержать. Массивы объявляются, как и другие переменные агента. Так, если в дополнение к переменным «энергии» и «пола» вы хотите иметь массив с именем "цвета" с четырьмя элементами, декларация массива имеет следующий синтаксис:

turtles-own [energy colors[4] gender]

Инициализация переменных

Агент может изменить переменную, которой владеет с помощью "set" синтаксиса. Например, все черепахи имеют переменную цвета, так что следующий код сообщает каждой черепахе, которая имеет уровень энергии не ниже 12, что необходимо установить свой цвет на красный.

if (energy >= 12) [setcolor red]

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

setengery-at 0 1 12

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

tsetgrass-length (grass-length - 1)

Использование пробелов

В StarLogo нет зарезервированных имён, поэтому "+/-=" является допустимым именем переменной. Учитывая эту свободу, использование пробелов является обязательным правилом кодированияа. Все переменные, операторы, и примитивы должны быть с пробелами между ними (т.е., (16 / 12) + 3). Во всех примерах StarLogo кода, вы заметите строгое выполнение этого соглашения. Единственными исключениями являются фигурные и кргулые скобки. Точно так же, имена процедур и переменных не должны содержать пробелов. Отсюда частое использование дефисов, чтобы создать четкие составные слова без пробелов, например, patches-own, grass-length, и т.д.

Запятые

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

Константы

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

constants [gravity [9.81]]

Теперь, слово "gravity " может быть использовано всей модели для замены значения "9.81"

Массивы

Массивы - это упорядоченые списки переменных, содержимое которых индивидуально индексируются. Как и обычные списки, массивы могут принадлежать любому агенту. Объявление массива включает в себя имя массива, и максимальный индекс массива (в скобках) в пределах списка переменных для конкретного агента. Например:

globals [
  global-array [50]
]

turtles-own [
  turtle-array [100]
]

Для получения значения конкретно заданного члена массива используется выражение:

arrayname-ref(-at, -of) index

Задать же значение конкретно заданному члену массива можно так:

setarrayname-ref(-at, -of) index value

Важно отметить, что нумерация элементов массива начинается с нуля.

Строки

Строки в StarLogo можно задавать следующим образом:

globals [my-string]
setmy-string "M
setmy-string "Miss
setmy-string "|Miss Muffet|

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

Использование процедур

Использовать процедуры и передавать им параметры можно следующим образом:

to walk  :speed  :direction 
  setheading :direction 
  fd :speed 
end

Когда walk вызывается из другой процедуры, он должен быть вызван с двумя аргументами, которые будут соответствовать скорости и направлению:

to go
  walk 5 (random 360)
end

Ссылки