#colors #netlogo
#Цвет #netlogo
Вопрос:
Мои патчи инициализируются как зеленые (65), черные (0) или случайные базовые цвета. Каждые 5 тиков я хотел бы, чтобы зеленые менялись на случайный базовый цвет, черные оставались черными, а случайные цвета ЛИБО становились зелеными (65), либо менялись на другой случайный цвет (один из 55 базовых цветов).).
Реализация этой окончательной функции (с использованием подмножества существующих патчей случайного цвета) — это то, с чем я борюсь.
Я попробовал ifelse и просто разные операторы if, указав, что попросите n патчей 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
Ответ №1:
Я думаю, что вы более или менее там, это просто 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
Комментарии:
1. Спасибо, Люк. Я не знал о примитиве member, и ваше применение его здесь имеет смысл. Однако мне все еще нужно больше зеленого! Идея в том, что мы изменим настройку участника? pcolor base-окрашивает патчи в 1. другой базовый цвет ИЛИ 2. зеленый (65). Надеюсь, мы могли бы сделать что-то вроде 1/3 или 1/2 из них зелеными… в конце концов, зеленого должно быть больше, чем любого другого цвета. Имеет смысл?
2. @MelonieRichey — Вы можете изменить код после
if member?
инструкции по мере необходимости — например, см. Отредактированное дополнение к моему ответу, которое используетrandom-float
, чтобы определить, станет ли патч случайного цвета зеленым или другим базовым цветом.3. Красивые. Большое спасибо!