NetLogo turtles: различия между версиями
Patarakin (обсуждение | вклад) |
Patarakin (обсуждение | вклад) |
||
| (не показано 6 промежуточных версий этого же участника) | |||
| Строка 1: | Строка 1: | ||
=== | * [[NetLogo patches]] | ||
Научимся создавать, расставлять и группировать черепах. Листинг программы - | * [[NetLogo links]] | ||
* [[NetLogo turtles]] | |||
* [[NetLogo widgets]] | |||
== Пространство тестирования == | |||
<netlogo model="Turtles" /> | |||
== Базовые команды к черепашкам == | |||
{| class="wikitable" | |||
! task | |||
! realisation | |||
|- | |||
| Все turtles выполняют команду | |||
| <syntaxhighlight lang="Lisp" line> | |||
ask turtles [ fd 1 ] | |||
</syntaxhighlight> | |||
|- | |||
| Выбрать turtles по условию | |||
| <syntaxhighlight lang="Lisp" line> | |||
ask turtles with [color = red] [ set size 2 ] | |||
</syntaxhighlight> | |||
|- | |||
| Исключить текущую turtle из набора | |||
| <syntaxhighlight lang="Lisp" line> | |||
ask turtles [ show other turtles ] | |||
</syntaxhighlight> | |||
|- | |||
| Turtles на текущем патче | |||
| <syntaxhighlight lang="Lisp" line> | |||
ask turtles [ show turtles-here ] | |||
</syntaxhighlight> | |||
|- | |||
| Другие turtles на текущем патче | |||
| <syntaxhighlight lang="Lisp" line> | |||
ask turtles [ show other turtles-here ] | |||
</syntaxhighlight> | |||
|- | |||
| Turtles на соседних патчах | |||
| <syntaxhighlight lang="Lisp" line> | |||
ask turtles [ show turtles-on neighbors4 ] | |||
</syntaxhighlight> | |||
|- | |||
| Turtles в радиусе | |||
| <syntaxhighlight lang="Lisp" line> | |||
ask turtles [ show turtles in-radius 3 ] | |||
</syntaxhighlight> | |||
|- | |||
| Проверить, есть ли соседи-черепахи | |||
| <syntaxhighlight lang="Lisp" line> | |||
ask turtles [ if any? other turtles in-radius 2 [ set color red ] ] | |||
</syntaxhighlight> | |||
|- | |||
| Посчитать число соседей | |||
| <syntaxhighlight lang="Lisp" line> | |||
ask turtles [ set label count other turtles in-radius 2 ] | |||
</syntaxhighlight> | |||
|- | |||
| Получить patch под turtle | |||
| <syntaxhighlight lang="Lisp" line> | |||
ask turtles [ show patch-here ] | |||
</syntaxhighlight> | |||
|- | |||
| Получить patch впереди | |||
| <syntaxhighlight lang="Lisp" line> | |||
ask turtles [ show patch-ahead 1 ] | |||
</syntaxhighlight> | |||
|- | |||
| Проверить, можно ли идти вперед | |||
| <syntaxhighlight lang="Lisp" line> | |||
ask turtles [ if can-move? 1 [ fd 1 ] ] | |||
</syntaxhighlight> | |||
|- | |||
| Выбрать самую "богатую" turtle | |||
| <syntaxhighlight lang="Lisp" line> | |||
turtles-own [energy] | |||
ask max-one-of turtles [energy] [ set color yellow ] | |||
</syntaxhighlight> | |||
|- | |||
| Выбрать несколько turtles по максимуму | |||
| <syntaxhighlight lang="Lisp" line> | |||
turtles-own [energy] | |||
ask max-n-of 5 turtles [energy] [ set shape "star" ] | |||
</syntaxhighlight> | |||
|- | |||
| Случайная turtle из набора | |||
| <syntaxhighlight lang="Lisp" line> | |||
ask one-of turtles with [color = blue] [ set color pink ] | |||
</syntaxhighlight> | |||
|- | |||
| Собрать список значений turtle-переменной | |||
| <syntaxhighlight lang="Lisp" line> | |||
turtles-own [energy] | |||
show [energy] of turtles | |||
</syntaxhighlight> | |||
|- | |||
| Среднее значение по turtles | |||
| <syntaxhighlight lang="Lisp" line> | |||
turtles-own [energy] | |||
show mean [energy] of turtles | |||
</syntaxhighlight> | |||
|- | |||
| Сумма значений по turtles | |||
| <syntaxhighlight lang="Lisp" line> | |||
turtles-own [energy] | |||
show sum [energy] of turtles | |||
</syntaxhighlight> | |||
|- | |||
| Отсортировать turtles по who | |||
| <syntaxhighlight lang="Lisp" line> | |||
show sort-on [who] turtles | |||
</syntaxhighlight> | |||
|- | |||
| Сформировать набор из разных источников | |||
| <syntaxhighlight lang="Lisp" line> | |||
let selected turtle-set turtles with [color = red] turtles with [shape = "car"] | |||
ask selected [ set label who ] | |||
</syntaxhighlight> | |||
|- | |||
| Создать links со всеми остальными | |||
| <syntaxhighlight lang="Lisp" line> | |||
ask turtle 0 [ create-links-with other turtles ] | |||
</syntaxhighlight> | |||
|- | |||
| Получить все links данной turtle | |||
| <syntaxhighlight lang="Lisp" line> | |||
ask turtles [ show my-links ] | |||
</syntaxhighlight> | |||
|} | |||
Научимся создавать, расставлять и группировать черепах. Листинг программы - | |||
Создадим новый проект. У черепашек Netlogo есть свойства - номер, цвет, координаты и т.д. | Создадим новый проект. У черепашек Netlogo есть свойства - номер, цвет, координаты и т.д. | ||
| Строка 25: | Строка 159: | ||
* end | * end | ||
<syntaxhighlight lang=" | <syntaxhighlight lang="Lisp" line> | ||
to circle | to circle | ||
layout-circle turtles max-pxcor - 2 | layout-circle turtles max-pxcor - 2 | ||
Текущая версия от 22:43, 22 апреля 2026
Пространство тестирования
Базовые команды к черепашкам
| task | realisation |
|---|---|
| Все turtles выполняют команду | ask turtles [ fd 1 ]
|
| Выбрать turtles по условию | ask turtles with [color = red] [ set size 2 ]
|
| Исключить текущую turtle из набора | ask turtles [ show other turtles ]
|
| Turtles на текущем патче | ask turtles [ show turtles-here ]
|
| Другие turtles на текущем патче | ask turtles [ show other turtles-here ]
|
| Turtles на соседних патчах | ask turtles [ show turtles-on neighbors4 ]
|
| Turtles в радиусе | ask turtles [ show turtles in-radius 3 ]
|
| Проверить, есть ли соседи-черепахи | ask turtles [ if any? other turtles in-radius 2 [ set color red ] ]
|
| Посчитать число соседей | ask turtles [ set label count other turtles in-radius 2 ]
|
| Получить patch под turtle | ask turtles [ show patch-here ]
|
| Получить patch впереди | ask turtles [ show patch-ahead 1 ]
|
| Проверить, можно ли идти вперед | ask turtles [ if can-move? 1 [ fd 1 ] ]
|
| Выбрать самую "богатую" turtle | turtles-own [energy]
ask max-one-of turtles [energy] [ set color yellow ]
|
| Выбрать несколько turtles по максимуму | turtles-own [energy]
ask max-n-of 5 turtles [energy] [ set shape "star" ]
|
| Случайная turtle из набора | ask one-of turtles with [color = blue] [ set color pink ]
|
| Собрать список значений turtle-переменной | turtles-own [energy]
show [energy] of turtles
|
| Среднее значение по turtles | turtles-own [energy]
show mean [energy] of turtles
|
| Сумма значений по turtles | turtles-own [energy]
show sum [energy] of turtles
|
| Отсортировать turtles по who | show sort-on [who] turtles
|
| Сформировать набор из разных источников | let selected turtle-set turtles with [color = red] turtles with [shape = "car"]
ask selected [ set label who ]
|
| Создать links со всеми остальными | ask turtle 0 [ create-links-with other turtles ]
|
| Получить все links данной turtle | ask turtles [ show my-links ]
|
Научимся создавать, расставлять и группировать черепах. Листинг программы -
Создадим новый проект. У черепашек Netlogo есть свойства - номер, цвет, координаты и т.д. Кроме того, мы можем задавать черепашкам новые свойства - turtles-own. Свойства всегда задаются в начале программы. Например, зададим для черепашек свойство group. Свойство будет иметь 2 значения - ложь или истина. Принадлежит черепашка к группе или не принадлежит.
turtles-own [group]
Вообще внутри turtles-own [] можно перечислить множество свойств
Теперь создадим первую процедуру, которая будет очищать все имеющиеся объекты и значения. Далее следует программа с комментариями. Комментарии задаются двумя символами ;;
Создаем новых черепах
to setup
- ca - очищаем значения
- каждая черепашка располагается в случайной точке экрана
- crt 50 [ ;; создаем 50 черепах и разбрасываем их по экрану
- setxy random-xcor random-ycor
- set group false
- ]
- черепахи рождаются по порядку и поворачиватся последовательно. Когда мы им потом даем команду разойтись, они образуют круг
- cro number_of_turtles [fd max-pxcor - 2]
- Этого же результата можно достичь, если мы используем команду layout-circle
- end
to circle
layout-circle turtles max-pxcor - 2
end
Мы умеем создавать черепашек и расставлять их по экрану. Теперь попробуем собрать черепашек одинакового цвета
Группируем черепах по цветам
to collect_color
- Первая версия - черепашки объединяются, но делают много лишних движений
ask other turtles with [color = [color] of myself] [face myself jump (distance myself) - 1]
во второй версии задаем черепашкам свойство принадлежности к группе и в начале устанавливаем значение этого свойства в false
- if group = false [ask other turtles with [(color = [color] of myself) and (group = false)]
[ черепашка прыгает в сторону вызывающего агента
- face myself jump (distance myself) - 1
черепашка устанавливает свою принадлежность к группе в true - и теперь ее не будут вызывать
- set group true create-link-to myself]]
end
На странице использованы Команды к черепахам NetLogo
