Ants/Sirenko: различия между версиями
Материал из Поле цифровой дидактики
Дарья (обсуждение | вклад) Нет описания правки |
Дарья (обсуждение | вклад) Нет описания правки |
||
| (не показана 1 промежуточная версия этого же участника) | |||
| Строка 1: | Строка 1: | ||
Remix [[ | Remix [[Ants]] | ||
<netlogo model=" | <netlogo model="Ants" /> | ||
netlogo | |||
globals [ | |||
population ;; количество муравьёв | |||
diffusion-rate ;; скорость диффузии феромона (0-100) | |||
evaporation-rate ;; скорость испарения феромона (0-100) | |||
] | |||
patches-own [ | patches-own [ | ||
chemical ;; | chemical ;; количество феромона на этом участке | ||
food ;; | food ;; количество еды на участке (0, 1 или 2) | ||
nest? ;; true | nest? ;; true на участках гнезда | ||
nest-scent ;; | nest-scent ;; число, показывающее близость к гнезду | ||
food-source-number ;; | food-source-number ;; номер источника еды (1, 2, 3) | ||
] | ] | ||
| Строка 18: | Строка 23: | ||
to setup | to setup | ||
clear-all | clear-all | ||
;; параметры (можно менять) | |||
set population 50 | |||
set diffusion-rate 50 ;; 50% феромона распространяется на соседей | |||
set evaporation-rate 10 ;; 10% феромона испаряется за тик | |||
set-default-shape turtles "bug" | set-default-shape turtles "bug" | ||
create-turtles population | create-turtles population | ||
[ set size 2 | [ set size 2 | ||
set color red | set color red | ||
setxy random-xcor random-ycor | |||
] | |||
setup-patches | setup-patches | ||
reset-ticks | reset-ticks | ||
| Строка 34: | Строка 48: | ||
to setup-nest ;; patch procedure | to setup-nest ;; patch procedure | ||
set nest? (distancexy 0 0) < 5 | set nest? (distancexy 0 0) < 5 | ||
set nest-scent 200 - distancexy 0 0 | set nest-scent 200 - distancexy 0 0 | ||
end | end | ||
to setup-food ;; patch procedure | to setup-food ;; patch procedure | ||
;; | ;; источник 1 — справа | ||
if (distancexy (0.6 * max-pxcor) 0) < 5 | if (distancexy (0.6 * max-pxcor) 0) < 5 | ||
[ set food-source-number 1 ] | [ set food-source-number 1 ] | ||
;; | |||
;; источник 2 — снизу слева | |||
if (distancexy (-0.6 * max-pxcor) (-0.6 * max-pycor)) < 5 | if (distancexy (-0.6 * max-pxcor) (-0.6 * max-pycor)) < 5 | ||
[ set food-source-number 2 ] | [ set food-source-number 2 ] | ||
;; | |||
;; источник 3 — сверху слева | |||
if (distancexy (-0.8 * max-pxcor) (0.8 * max-pycor)) < 5 | if (distancexy (-0.8 * max-pxcor) (0.8 * max-pycor)) < 5 | ||
[ set food-source-number 3 ] | [ set food-source-number 3 ] | ||
if food-source-number > 0 | if food-source-number > 0 | ||
[ set food one-of [1 2] ] | [ set food one-of [1 2] ] | ||
| Строка 56: | Строка 70: | ||
to recolor-patch ;; patch procedure | to recolor-patch ;; patch procedure | ||
ifelse nest? | ifelse nest? | ||
[ set pcolor violet ] | [ set pcolor violet ] | ||
[ ifelse food > 0 | [ ifelse food > 0 | ||
[ if food-source-number = 1 [ set pcolor cyan ] | [ if food-source-number = 1 [ set pcolor cyan ] | ||
if food-source-number = 2 [ set pcolor sky | if food-source-number = 2 [ set pcolor sky ] | ||
if food-source-number = 3 [ set pcolor blue | if food-source-number = 3 [ set pcolor blue ] | ||
] | |||
[ set pcolor scale-color green chemical 0.1 5 ] ] | [ set pcolor scale-color green chemical 0.1 5 ] | ||
] | |||
end | end | ||
| Строка 71: | Строка 85: | ||
;;;;;;;;;;;;;;;;;;;;; | ;;;;;;;;;;;;;;;;;;;;; | ||
to go | to go | ||
ask turtles | ask turtles | ||
[ | [ | ||
ifelse color = red | ifelse color = red | ||
[ look-for-food | [ look-for-food ] | ||
[ return-to-nest ] | [ return-to-nest ] | ||
wiggle | wiggle | ||
fd 1 ] | fd 1 | ||
] | |||
diffuse chemical (diffusion-rate / 100) | diffuse chemical (diffusion-rate / 100) | ||
ask patches | ask patches | ||
[ set chemical chemical * (100 - evaporation-rate) / 100 | [ | ||
recolor-patch ] | set chemical chemical * (100 - evaporation-rate) / 100 | ||
recolor-patch | |||
] | |||
tick | tick | ||
end | end | ||
| Строка 88: | Строка 108: | ||
to return-to-nest ;; turtle procedure | to return-to-nest ;; turtle procedure | ||
ifelse nest? | ifelse nest? | ||
[ | [ | ||
set color red | set color red | ||
rt 180 ] | rt 180 | ||
[ set chemical chemical + 60 | ] | ||
uphill-nest-scent ] | [ | ||
set chemical chemical + 60 | |||
uphill-nest-scent | |||
] | |||
end | end | ||
to look-for-food ;; turtle procedure | to look-for-food ;; turtle procedure | ||
if food > 0 | if food > 0 | ||
[ set color orange + 1 | [ | ||
set food food - 1 | set color orange + 1 | ||
rt 180 | set food food - 1 | ||
stop ] | rt 180 | ||
stop | |||
] | |||
if (chemical >= 0.05) and (chemical < 2) | if (chemical >= 0.05) and (chemical < 2) | ||
[ uphill-chemical ] | [ uphill-chemical ] | ||
end | end | ||
to uphill-chemical | |||
to uphill-chemical | let scent-ahead chemical-scent-at-angle 0 | ||
let scent-ahead chemical-scent-at-angle | let scent-right chemical-scent-at-angle 45 | ||
let scent-right chemical-scent-at-angle | |||
let scent-left chemical-scent-at-angle -45 | let scent-left chemical-scent-at-angle -45 | ||
if (scent-right > scent-ahead) or (scent-left > scent-ahead) | if (scent-right > scent-ahead) or (scent-left > scent-ahead) | ||
[ ifelse scent-right > scent-left | [ | ||
ifelse scent-right > scent-left | |||
[ rt 45 ] | [ rt 45 ] | ||
[ lt 45 ] ] | [ lt 45 ] | ||
] | |||
end | end | ||
to uphill-nest-scent | |||
to uphill-nest-scent | let scent-ahead nest-scent-at-angle 0 | ||
let scent-ahead nest-scent-at-angle | let scent-right nest-scent-at-angle 45 | ||
let scent-right nest-scent-at-angle | |||
let scent-left nest-scent-at-angle -45 | let scent-left nest-scent-at-angle -45 | ||
if (scent-right > scent-ahead) or (scent-left > scent-ahead) | if (scent-right > scent-ahead) or (scent-left > scent-ahead) | ||
[ ifelse scent-right > scent-left | [ | ||
ifelse scent-right > scent-left | |||
[ rt 45 ] | [ rt 45 ] | ||
[ lt 45 ] ] | [ lt 45 ] | ||
] | |||
end | end | ||
to wiggle | to wiggle | ||
rt random 40 | rt random 40 | ||
lt random 40 | lt random 40 | ||
Текущая версия от 09:15, 21 мая 2026
Remix Ants
netlogo globals [
population ;; количество муравьёв diffusion-rate ;; скорость диффузии феромона (0-100) evaporation-rate ;; скорость испарения феромона (0-100)
]
patches-own [
chemical ;; количество феромона на этом участке food ;; количество еды на участке (0, 1 или 2) nest? ;; true на участках гнезда nest-scent ;; число, показывающее близость к гнезду food-source-number ;; номер источника еды (1, 2, 3)
]
- Setup procedures ;;;
to setup
clear-all
;; параметры (можно менять) set population 50 set diffusion-rate 50 ;; 50% феромона распространяется на соседей set evaporation-rate 10 ;; 10% феромона испаряется за тик
set-default-shape turtles "bug" create-turtles population [ set size 2 set color red setxy random-xcor random-ycor ]
setup-patches reset-ticks
end
to setup-patches
ask patches [ setup-nest setup-food recolor-patch ]
end
to setup-nest ;; patch procedure
set nest? (distancexy 0 0) < 5 set nest-scent 200 - distancexy 0 0
end
to setup-food ;; patch procedure
;; источник 1 — справа if (distancexy (0.6 * max-pxcor) 0) < 5 [ set food-source-number 1 ]
;; источник 2 — снизу слева if (distancexy (-0.6 * max-pxcor) (-0.6 * max-pycor)) < 5 [ set food-source-number 2 ]
;; источник 3 — сверху слева if (distancexy (-0.8 * max-pxcor) (0.8 * max-pycor)) < 5 [ set food-source-number 3 ]
if food-source-number > 0 [ set food one-of [1 2] ]
end
to recolor-patch ;; patch procedure
ifelse nest?
[ set pcolor violet ]
[ ifelse food > 0
[ if food-source-number = 1 [ set pcolor cyan ]
if food-source-number = 2 [ set pcolor sky ]
if food-source-number = 3 [ set pcolor blue ]
]
[ set pcolor scale-color green chemical 0.1 5 ]
]
end
- Go procedures ;;;
to go
ask turtles [ ifelse color = red [ look-for-food ] [ return-to-nest ]
wiggle fd 1 ]
diffuse chemical (diffusion-rate / 100) ask patches [ set chemical chemical * (100 - evaporation-rate) / 100 recolor-patch ]
tick
end
to return-to-nest ;; turtle procedure
ifelse nest? [ set color red rt 180 ] [ set chemical chemical + 60 uphill-nest-scent ]
end
to look-for-food ;; turtle procedure
if food > 0 [ set color orange + 1 set food food - 1 rt 180 stop ]
if (chemical >= 0.05) and (chemical < 2) [ uphill-chemical ]
end
to uphill-chemical
let scent-ahead chemical-scent-at-angle 0 let scent-right chemical-scent-at-angle 45 let scent-left chemical-scent-at-angle -45
if (scent-right > scent-ahead) or (scent-left > scent-ahead) [ ifelse scent-right > scent-left [ rt 45 ] [ lt 45 ] ]
end
to uphill-nest-scent
let scent-ahead nest-scent-at-angle 0 let scent-right nest-scent-at-angle 45 let scent-left nest-scent-at-angle -45
if (scent-right > scent-ahead) or (scent-left > scent-ahead) [ ifelse scent-right > scent-left [ rt 45 ] [ lt 45 ] ]
end
to wiggle
rt random 40 lt random 40 if not can-move? 1 [ rt 180 ]
end
to-report nest-scent-at-angle [angle]
let p patch-right-and-ahead angle 1 if p = nobody [ report 0 ] report [nest-scent] of p
end
to-report chemical-scent-at-angle [angle]
let p patch-right-and-ahead angle 1 if p = nobody [ report 0 ] report [chemical] of p
end </syntaxhighlight>
Справка по командам к черепахам
| 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 ]
|
---
