NetLogo: убить остальных агентов
to change-vgags
ifelse (((-0.007333 * x * x) + (0.07333 * x) + 1) = 1)
[stop]
[ifelse (((-0.007333 * x * x) + (0.07333 * x) + 1) > 1)
[ask n-of (((((-0.007333 * x * x) + (0.07333 * x) + (1)) / 48) - (1 / 48)) * 590) gags with [pcolor = red - 2] [ hatch 1 ]]
[ask n-of (((1 / 48) - (((-0.007333 * x * x) + (0.07333 * x) + 1) / 48)) * 590) gags with [pcolor = red - 2] [die]]]
Верхний код - это существующий функциональный код, который у меня есть. Так как затычки уменьшаются, они будут следовать последнему уравнению, которое говорит им умереть. Тем не менее, я дошел до того, что он хочет, чтобы умерло 15 затычек, но у меня осталось только 10 в наборе агентов. Поэтому я попытался добавить новую строку кода сразу после, но она все еще вызывает у меня ту же проблему, так что, очевидно, это не правильно. Строка кода, которую я написал, написана ниже.
if (((1 / 48) - (((-0.007333 * x * x) + (0.07333 * x) + 1) / 48)) * 590) > count gags with [pcolor = red - 2] [ask gags with [pcolor = red - 2] [die]]
end
Если у кого-нибудь есть какие-либо советы о том, как решить эту проблему, я был бы очень признателен! Заранее спасибо!
1 ответ
Решение
Заменить:
ask n-of ... gags with [pcolor = red - 2] [ die ]
с:
let quota ...
let targets gags with [pcolor = red - 2]
ask n-of min (list quota count targets) targets [ die ]
или если это кажется немного сложным для чтения, вы всегда можете:
let quota ...
let targets gags with [pcolor = red - 2]
if quota > count targets
[ set quota count targets ]
ask n-of quota targets [ die ]