По-перше, NetLogo має мануал і хелпери, які описують всі деталі мови програмування. Принцип RTFM буде застосовуватися протягом цього курсу.
NetLogo має головне вікно з трьома вкладками, кожна з певним призначенням:
NetLogo це система агентів. Агенти це сутності, які виконують свої інструкції (які ви їм визначили). Кожен агент діє одночасно з іншими. В NetLogo є чотири типи агентів:
Черепашки є агентами, що живуть у світі. Світ є двовимірним та поділений на клітинки. Кожна клітинка є квадратиком “землі”, по якій можуть переміщуватись черепашки. Зв’язки це агенти, що з’єднують дві черепашки. Обзервер це власне спосіб спостереження за світом.
Обзервер спостерігає світ і агентів. Є можливість виконувати команди через командний центр. Наприклад:
observer> create-turtles 1
кожна клітинка має цілочислені координати (центру), які відповідають декартовим координатам відносно центральної клітинки
створює агента в клітинці (0,0).
Команда
observer> ask turtle 0 [fd 12]
наказує агенту 0 рухатись вперед на 12 одиниць.
Правий клік у світі дає можливість інспектувати черепашку або клітинку. Занотуйте властивості.
шаблон команди для зміни властивостей і значень: set thing to value
Спрообуємо змінити властивості:
observer> ask patch 2 2 [set pcolor red]
observer> ask turtle 0 [set label "My first turtle!"]
Очистимо світ:
observer> clear-all
Керувати можна розміром: кількість клітинок, розмір клітинки. Керування топологією: квадрат, циліндр, тор.
читати мануал
Існує два типи процедур: команди (commands - процедури, що не вертають значень) та репортери (reporters - функції, які повертають значення).
Визначимо репортер sum-of-two-nums-squared, який обчислює квадрат суми двох аргументів:
to-report sum-of-two-nums-squared [first-number second-number]
report (first-number + second-number) * (first-number + second-number)
end
Команди визнчаються ще простіше
to my-command
print "Hello from MyFirstCommand."
print word "The square of 3 + 2 is " sum-of-two-nums-squared 2 3
end
Nota bene
NetLogo використовує квадратні дужки [. . . ] для визначення списків. Елементи списку відокремлюються пробілом.
NetLogo підтримує різні арифметичні і математичні оператори, зокрема +, -, *, ^. Вимагається, щоб ці оператори були відділені пробілами.
Змінні нетипизовані але мають декларуватись. NetLogo підтримує глобальні і локальні змінні. Глобальні оголошуються одним з двох способів. Перший - при визначення слайдера або свіча в інтерфейсі змінна вважається глобальною. Другий - на початку області коду:
globals [ variable1 variable2 variable3]
Також можна оголошувати та призначати значення локальним змінним можна в будь-якій точці коду:
let local-variable1 0
let local-variable2 ""
let local-variable3 one-of patches
Set використовується для призначення значень змінним.
Черепашки і патчи є агентами, тобто об’єктами з властивостями. За замовчуванням кожен патч має наступні властивості:
pxcor, pycor (x - y координати у світі), pcolor (колір), plabel, plabel-color.
У черепашок таких властивостей більше. Крім цього, ви можете визначити скільки завгодно своїх властивостей за допомогою оголошення на початку програми
patches-own [ playerType ]
turtles-own [ energy ]
Для зміни або призначення властивості використовується команда ask
ask turtle 0 [set shape "airplane"]
Зауваження: кожна черепашка має унікальний числовий ID. Це цілі числа, що призначаються при створенні починаючи з 0.
Множина агентів це множина клітинок або черепашок. Множини агентів неупорядковані, являються фундаментальною і найважливішою ідеєю NetLogo. Наприклад, \(turtles\) або \(patches\) є вбудованими примітивами, які повертають множину всіх черепащок та клітинок відповідно, та можуть бути агрументами і основами для циклів.
Приклади.
count patches
print count turtles with [color = green]
Корисні вбудовні способи створення множин агентів:
і корисні репортери, які приймають множини агентів у якості аргументів:
Черепашки (але не клітинки) можуть бути організовані у сімейства. Зробити це можна на початку програми:
breed [ optimists optimist]
breed [ pessimists pessimist]
Тепер ви можете створювати та програмувати оптимістів та песимістів.
create-turtles 17
create-optimists 23
Списки - це один з небагатьох інструментів, які дозволяють будувати на NetLogo складні конструкції. Списки - це упорядковані колекції будь-яких штук.
print (list "Bob" 5 [2 "Carol"] turtle 0)
Змінити список можна декількома способами:
let my-list [1 2 3 4]
set my-list replace-item 3 my-list (list 1 2 3)
Зауважте, що заміна списку працює як створення нового з іншим елементом. Додавання елементу: - fput - додає новий перший елемент; - lput - додає новий останній елемент.
В Netlogo списки використовуються для запуску циклів. Наприклад:
foreach [1 2 3]
[[a] -> crt a]
те саме, що на інших мовах програмування виглядає так
for i=1 to 3
crt(i)
next i
або так
for (int i=1; i < 4; i++) {
crt(i)
}
Символ \(?\) означає підстановку змінної у циклі. Починаючи з версії 6.0 замінено на оголошення анонімної змінної
show n-values 10 [[a] -> a]
Вбудовані можливості роботи зі списками
Строки визначаються подвійними лапками: “Bob”. Взагалі кажучи, якщо репортер працює з списками, то він спрацює і з строками. Приклад:
print length (list 2 4 6 8)
print length "Now is the time"
}
У NetLogo реалізовано простий функціонал читання/запису файлів, також можна створити QuickTime фільми виконання програм.
Виділимо головні конструкції (решта - RTFM):
foreach [1.1 2.2 2.6] [ [a] -> show (word a " -> " round a) ]
=> 1.1 -> 1
=> 2.2 -> 2
=> 2.6 -> 3
Нагадування. Використання анонімних процедур:
show n-values 5 [1]
=> [1 1 1 1 1]
show n-values 5 [[x] - > x]
=> [0 1 2 3 4]
ifelse reporter [ commands1 ] [ commands2 ]
while [reporter] [ commands ]
Як правило визначають дві процедури: Setup і Go, та відповідні їм кнопки на панелі інтерфейсу.