NetLogo примеры
Язык NetLogo в примерах и пояснениях на русском языке
Группы агентов - agentset
Обращение к группе агентов (агенству)
ask patches [set pcolor pxcor]
ask patches [set pcolor (pcolor - 1)]
Группа агентов, обладающих неким общим свойством ask turtles with [ycor > 0] [ fd 0.1 ]
Породы
Определение новых пород, установка изображения для породы и создание представителей породы breeds [ boys girls ] set-default-shape boys "boy-shape" create-boys 10
Определение функции и приказ определённой породе двигаться вперед. to move-boys ask boys [fd 1] end
Убить представителей определённой породы to kill-boys ask boys [die] end
IF if (color = red) [set pcolor black]
IFELSE Использование равновероятных событий: ask turtles [ ifelse random 2 = 0 [set color yellow] [set color red] ]
Случайный выбор одного из группы агентов: set message?-of random-one-of turtles true
Пример на hatch – черепашка рождает новую и передает ей список команд к выполнению. Новая черепаха – той же породы to reproduce if (color = pink and random 5 = 0) [ hatch 1 [if random 10 > 0 [set color blue] set age 0] ] end
Пример на sprout – пятно рождает черепашку и передает ей список команд ask random-n-of 200 (patches with [pcolor = black]) [ sprout 1 [ set color red ]] 200 случайных пятен среди тех, кто черного цвета рождают черепах
Пример с соседними пятнами to paint-agents [agents] ask agents [ set pcolor color-of myself - 2 ] end to paint-in-radius clear-patches ask turtles [ paint-agents patches in-radius radius ] end Или to paint-neighbors4 clear-patches ask turtles [ paint-agents neighbors4 ] end
Пример на myself to cluster locals [ closest-turtle ] set closest-turtle min-one-of turtles with [self != myself] [distance myself] set heading towards closest-turtle rt random-float 20 lt random-float 20 fd 1 end
Нашли ближайшую черепашку и сдвинулись в ее направлении. Distance интересно используется.
---
Обмен сообшениями с другими черепахами: turtles-own [message? other-turtle] to communicate ;;a turtle procedure set other-turtle random-one-of other-turtles-here ; get the ID of another turtle on your patch if(other-turtle != nobody) [if message?-of other-turtle [set message? true] ] end
Другая черепаха выбирается из списка черепах в данной точке. Если есть эта другая черепаха и у нее есть сообщение, то и наша черепаха теперь имеет это сообщение. (Можно еще поиграться с текстом этого сообщения). Внимания заслуживает использование message?-of – message? Глобальная переменная свойственная черепашке. Может быть true or false
Рисование стенок, отгораживающих пространство: to draw-walls ask patches with [abs pxcor = screen-edge-x] [ set pcolor blue ] ; право и лево ask patches with [abs pycor = screen-edge-y] [ set pcolor blue ] ; верх и низ end
Отражение от стенок: to bounce ;; для черепашки if (abs pxcor-of patch-ahead 1 = screen-edge-x) [ set heading (- heading) ] if (abs pycor-of patch-ahead 1 = screen-edge-y) [ set heading (180 - heading) ] end
Очень полезное и новое для Лого свойство – можно не лезть самому на стенку, а проверить свойства пятна впереди себя по ходу движения. (Сразу захотелось использовать в построении общего продукта, когда черепашки не только растят свой контент перед собой, но и проверяют связи с другим контентом и если он совпадает, то вяжут его со своим).
Сходный пример на обход пятен голубого цвета ask turtles [ ifelse pcolor-of patch-ahead 1 = blue [ lt random-float 360 ] [ fd 1 ] ] (Может пригодиться при игре с GPS черепахами на карте.)
Сходный пример на обход других черепах to go-if-empty-ahead ifelse not any? (turtles-on patch-ahead 1) with [self != myself] [ fd 1 ] [ rt random-float 360 ] end (Может пригодиться при игре с GPS черепахами на карте – нужно прописать общую версию в виде:
to go-if-empty-ahead-and-color-good ifelse (not any? (turtles-on patch-ahead 1) with [self != myself]) AND (pcolor-of patch-ahead 1 = black) [ fd 1 ] [ rt random-float 360 ] end
Пример на движение с While to go-until-empty-here fd 1 while [any? other-turtles-here][ fd 1 ] end
Пример на поиск партнера ask turtles [ without-interruption [ if (partner = nobody) and (any? other-turtles-here with [partner = nobody]) [ set partner random-one-of other-turtles-here with [partner = nobody] set color red set partner-of partner self ; мы помечаем сразу пару партнеров - ВАЖНО set color-of partner red ] ]
Примеры на координаты: to scatter1 ask turtles [setxy random-float screen-size-x random-float screen-size-y] end to scatter2 ask turtles [rt random-float 360 jump random-float screen-edge-x] end
Пример на построение гистограмм to setup ca crt 500 setup-plot do-plot end to setup-plot set-current-plot "X Coordinates" set-plot-x-range (- screen-edge-x) screen-edge-x set-plot-y-range 0 count turtles set-histogram-num-bars 7 end to do-plot histogram-from turtles [ xcor ] ; using the default plot pen end
Все объекты внутри среды описаны как строки текста. Т.е. модель передается как текст.
@#$#@#$#@ default true 0 Polygon -7566196 true true 150 5 40 250 150 205 260 250
Или
person false 0 Circle -7566196 true true 155 20 63 Rectangle -7566196 true true 158 79 217 164 Polygon -7566196 true true 158 81 110 129 131 143 158 109 165 110 Polygon -7566196 true true 216 83 267 123 248 143 215 107 Polygon -7566196 true true 167 163 145 234 183 234 183 163 Polygon -7566196 true true 195 163 195 233 227 233 206 159