2017-10-05 55 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