【问题标题】:How to add 'priorities' to the primite 'n-of' in NetLogo?如何将“优先级”添加到 NetLogo 中的 primite 'n-of'?
【发布时间】:2016-05-06 04:58:33
【问题描述】:

我有 3 种颜色(黄色、绿色和红色)的补丁。绿色的有一个“等级”值。我想询问给定数量('n-cells')的黄色或绿色补丁('candidate-cells')变成红色。我知道我可以使用原始的“n-of”随机执行此操作,如下所示:

let candidate-cells ( patches with [ pcolor = yellow or pcolor = green ] )
ask n-of n-cells candidate-cells [ set pcolor red ] 

但我想为将变红的补丁添加优先级。首先,我希望黄色补丁(随机)变成红色,但是如果在所有黄色补丁之后仍有补丁变成红色,我希望具有最高“等级”值的绿色补丁变成红色,直到变成补丁的数量达到'n 细胞' 的数量。我认为这段代码应该可以工作到最后一行:

  let candidate-yellow-cells ( pcolor = yellow )
  let candidate-green-cells ( pcolor = green )

  ask n-of n-cells candidate-yellow-cells [ set pcolor red ]

  if n-cells > candidate-yellow-cells [
    let left-cells ( n-cells - candidate-yellow-cells )
    ask n-of left-cells candidate-green-cells [ set pcolor red ]  

但是,我仍然对绿色单元格使用“n-of”,我想知道如何将其替换为将“左单元格”选为具有最高“等级”值的绿色补丁的东西。提前谢谢你。

【问题讨论】:

    标签: list netlogo


    【解决方案1】:

    这个例子应该能让你到达那里:

    globals [n-cells]
    patches-own [rank]
    to setup
      set n-cells 500
      ask patches [
        set pcolor one-of [yellow green red]
        set rank random 3
      ]
    end
    
    to recolor
      let _yellows (patches with [pcolor = yellow])
      let _ny count _yellows
      ifelse (n-cells > _ny) [
        ask _yellows [set pcolor red]
        let _greens sort-on [(- rank)] (patches with [pcolor = green])
        let _ng length _greens
        let _n min (list (n-cells - _ny) _ng)
        ask patch-set sublist _greens 0 _n [set pcolor red]
      ][
        ask n-of n-cells _yellows [
          set pcolor red
        ]
      ]
    end
    

    【讨论】:

    • 谢谢,艾伦,你再次拯救了这一天。不过,谁能澄清一下为什么我们需要'min' in:'let _n min (list (n-cells - _ny) _ng)'?
    • @ThalesWest 你不能要求比现有更多的补丁,所以如果你要求太多,这只是要求所有的。另一种方法是考虑要求太多而不是错误,但在这里我假设您希望程序继续运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多