NetLogo примеры

Материал из Letopisi.Ru — «Время вернуться домой»
Перейти к: навигация, поиск

Язык 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

Персональные инструменты
Инструменты