2017-10-05 90 views
0

我正在創建一個病人 - 外科醫生 - 手術牀模型,其中我需要顯示外科醫生排隊在等待進入中心手術室的補丁左側和等待從右側排隊的病人。如何根據netlogo中誰的號碼按升序或降序排列代理?

我想要的外科醫生和患者應位於補丁按他們的who

S1,S2,S3 - >手術室< - P1,P2,P3

我用下面的查詢,我我不知道在哪裏納入誰編號

to lineup-patients 
    LET gapp 10      
    LET directions 
    [45 90 230 180 45 90 230 180 45 90 45 90 230 180 45 90 230 180 45 90 45 90 ] 
    LET jj 0      ; counter/index 
    REPEAT initial-number-patients 
    [ create-PATIENTS 1 
    [ SETXY (0 + jj * gapp) 20 
     set shape "person" 
     SET size 1.2 
     SET label who 
     SET label-color black 
     SET heading item jj directions 
    ] 
    SET jj jj + 1 
    ASK patients [ 
     MOVE-TO ONE-OF PATCHES WITH [ PCOLOR = yellow ] 
    ] ] 
END 
+0

我是新來的NetLogo,使用列表也試過,但我不能讓他們列隊補丁作爲每位參加陣容的人數 - 患者讓列表數量3讓患者 - 每個列表7讓gapp 10讓jj 0 REPEAT初始數字患者 [創建患者初始數字患者 [SETXY(0 + jj * gapp)20 set groups [];空單 組集合lput誰[「數的清單」] 組造型的「人」 ] 詢問患者[ 移動目標之一的修補程序,並[令pColor =黃色] SET顏色隨機126] 結束 – user8666670

+0

好的。請記住,下次爲每行代碼添加4個前導空間時,可以對代碼進行格式化。 – SteveFest

+0

是的,我會感謝 – user8666670

回答

1

你有一個move-to排隊後。它總是會移動所有現有的患者。爲了保持清潔,請編寫一個單獨的lineup proc。

to lineup [#patients #patch #gap] 
    let _x ([pxcor] of #patch) 
    let _y ([pycor] of #patch) 
    let _xqs n-values (count #patients) [[n] -> _x + n * #gap] 
    (foreach sort #patients _xqs [ 
    [p x] -> ask p [setxy x _y] 
    ]) 
end 

你可以用的NetLogo的新實例測試這個如下:

to test 
    ca 
    crt 20 
    lineup turtles one-of patches 0.5 
end 
+0

非常感謝Alan。它給患者排隊。我只是不明白什麼_xqs和[p x],如果你能解釋這將是感激。 – user8666670

+0

'_xqs'是排隊患者的x軸位置。請參閱「n值」的文檔。 '[p x]'是循環中使用的局部變量(用於患者和x軸位置)。請參閱使用具有多個列表的'foreach'的文檔。心連心。 – Alan

+0

這有助於..謝謝艾倫 – user8666670