2016-04-04 11 views
1

3色(黄色、緑色、赤色)のパッチがあります。緑色のものは「ランク」値を持ちます。黄色または緑色パッチ(「候補細胞」)の特定の数(「n細胞」)に赤色になるように頼みたいと思います。NetLogoの 'n-of'プリミートに '優先度'を追加するにはどうすればいいですか?

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

しかし、私は赤く点灯しますパッチに優先順位を追加したいと思います:私はこのように、私はランダム「のn」プリミティブを使用してそれを行うことができます知っています。まず、黄色のパッチを赤色(無作為に)に変えたいが、黄色のパッチがすべて消えた後もまだ赤色になるパッチがある場合は、最高のランクの値を持つ緑色のパッチを、 「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-の」を使用していますその最も高い「ランク」値を有する緑色パッチとして「左セル」を選択する。前もって感謝します。

答えて

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 
+0

おかげで、アランは、もう一度あなたは一日保存しました。それでも、誰かが「min(list(n-cells-_ny)_ng)」で「min」が必要な理由を明確にしてもらえますか? –

+0

@ ThalesWestあなたが存在するパッチより多くのパッチを尋ねることはできません。あなたが余りに多くのパッチを要求すると、これはすべてのパッチを要求します。別の方法としては、あまりにも多くのエラーを尋ねることを検討することですが、ここではプログラムを実行し続けることを望んでいました。 – Alan

関連する問題