2016-04-04 12 views
1

3 renk (sarı, yeşil ve kırmızı) içeren yamalarım var. Yeşil olanların bir 'rank' değeri var. Ben sarı ya da yeşil yamalar ('aday hücreler') kırmızıya verilecek belirli bir sayı ('n-hücreler') sormak istiyorum.NetLogo'da 'n-of' primite 'öncelikleri' nasıl eklenir?

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

Ama kırmızıya döndü edilecek yamalar için öncelikleri eklemek istiyorum: Ben rastgele böyle ilkel 'n-of' kullanarak da yapabilirsiniz farkındayım. İlk olarak, sarı lekelerin kırmızıya dönmesini istiyorum (rastgele), ancak sarılan tüm yamalardan sonra hala kırmızıya dönüşecek yamalar döndürülürse, en yüksek 'rütbe' değerine sahip yeşil lekeler istiyorum. 'n-hücreler' sayısı. Ben bu kod parçası olan son satırın yukarı kadar çalışması gerektiğini düşünüyorum :

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 ] 

Ama yine de, ben yine yeşil hücreler için, ben bir şey tarafından Yenisini nasıl acaba 'n-of' kullandığımı en yüksek 'rank' değerine sahip yeşil yamalar olarak 'sol hücreleri' seçerdi. Şimdiden teşekkür ederim.

cevap

1

Bu örnek oraya olmalıdır:

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

Teşekkür Alan, bir kez daha günü kurtardı. Yine de, herkes neden "min" 'e ihtiyacımız olduğunu açıklayabilir:' let _n min (liste (n-cells - _ny) _ng) '? –

+0

@ThalesWest Orada olduğundan daha fazla yamalar isteyemezsiniz, bu yüzden çok fazla talep ederseniz, bu sadece her şeyi sorar. Bunun bir alternatifi, bir hata için çok fazla soru sormayı düşünmektir, ancak burada programın çalışmaya devam etmesini istediğinizi düşünmüştüm. – Alan