Search code examples
netlogokillagentset

NetLogo: kill rest of agentset


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]]]

The top code is an existing functioning code that I have. Since the gags decrease, they will follow the last equation that tells them to die. However, I get to a point where it wants 15 gags to die, but I only have 10 left in the agentset. So I tried to add a new line of code directly after, but it is still giving me the same problem, so obviously, it isn't right. The line of code that I wrote is written below.

  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

If anyone has any advice on how to fix this problem, I would greatly appreciate it! Thanks in advance!


Solution

  • Replace:

    ask n-of ... gags with [pcolor = red - 2] [ die ]
    

    with:

    let quota ...
    let targets gags with [pcolor = red - 2]
    ask n-of min (list quota count targets) targets [ die ]
    

    or if that seems a bit hard to read, you could always:

    let quota ...
    let targets gags with [pcolor = red - 2]
    if quota > count targets
      [ set quota count targets ]
    ask n-of quota targets [ die ]