Мои патчи инициируются как зеленый (65), черный (0) или случайный базовый цвет. Каждые 5 тиков я хотел бы, чтобы зеленые менялись на случайный базовый цвет, черные оставались черными, а случайные цвета ЛИБО становились зелеными (65), либо изменялись на другой случайный цвет (один из удаленных 55). базовые цвета).
Реализация этой последней функции (используя подмножество существующих патчей случайного цвета) - это то, с чем я борюсь.
Я пробовал ifelse и просто разные операторы if, указывая, что патчи n-of somenumber становятся зелеными, а остальные окрашиваются в случайный цвет. Это не сработало.
to setup-patches ;;PATCHES
ask n-of 400 patches [ set pcolor 65]
ask n-of 600 patches [ set pcolor one-of remove 55 base-colors ]
end
......
to vary-patches
if ticks > 0 and ticks mod 5 = 0 [
ask patches [
if pcolor = 65 [
set pcolor one-of remove 55 base-colors ]
if pcolor = black [
set pcolor 0 ]
if pcolor = one-of remove 65 base-colors [
set pcolor ............................................. ]
end
Я думаю, что вы более или менее там, проблема только в if pcolor = one-of remove 65 base-colors
. Каждый раз, когда этот оператор оценивается, pcolor
сравнивается со случайным one-of
списком, сгенерированным remove 65 base-colors
, — он не проверяет, находится ли pcolor
в этой группе. Для этого вам понадобится примитив member?
. Например, небольшая модификация ниже должна делать то, что вам нужно:
to setup-patches ;;PATCHES
ca
ask n-of 400 patches [ set pcolor 65]
ask n-of 600 patches [ set pcolor one-of remove 55 base-colors ]
reset-ticks
end
to vary-patches
if ticks > 0 and ticks mod 5 = 0 [
ask patches [
if pcolor = 65 [
set pcolor one-of remove 55 base-colors ]
if member? pcolor remove 65 base-colors [
set pcolor one-of base-colors
]
]
]
tick
end
Редактировать:
to vary-patches
if ticks > 0 and ticks mod 5 = 0 [
ask patches [
ifelse pcolor = 65 [
set pcolor one-of remove 55 base-colors
] [
if member? pcolor remove 65 base-colors [
ifelse random-float 1 < ( 1 / 3 ) [
set pcolor one-of base-colors
] [
set pcolor 65
]
]
]
]
]
tick
end
@MelonieRichey — вы можете изменить код после оператора if member?
по мере необходимости — например, посмотрите отредактированное дополнение к моему ответу, в котором используется random-float
, чтобы определить, станет ли случайно окрашенное пятно зеленым или другим из базовых цветов.
Красивый. Большое спасибо!
Спасибо, Люк. Я не знал о примитиве члена, и ваше применение его здесь имеет смысл. Однако мне все еще нужно больше зелени! Идея в том, что мы будем менять настройки члена? Патчи базовых цветов pcolor превращаются ЛИБО в 1. другой базовый цвет ИЛИ 2. в зеленый (65). Надеюсь, мы сможем заставить 1/3 или 1/2 из них стать зелеными... в конце концов, зеленого должно быть больше, чем любого другого цвета. Есть смысл?