我试图在Netlogo中建模以下层次结构:
想象一下,一个典型的公司或一群公共行政人员。顶部有一个老板(乌龟),他/她下面有一些员工(海龟)。有两个变量:控制范围soc(一个Boss有多少员工可以覆盖)和控制深度doc(结构中确实存在多少个层次级别)。员工总数等于soc ^ doc。海龟的总数等于1 + soc ^ doc(1是老板)
Netlogo-Interface中有两个选择器:soc和doc(范围从1到4)。
我想象的代码:根据所选择的变量,结构应该按照以下规则自动排列:创建尽可能多的员工链接,因为在更高层级上有员工,直到达到文档为止。
示例:doc:3 soc:3 1 Boss(总是1因此它可以像锚一样使用)
1.等级:3个链接(1 * 3)
2.等级:9链接(3 * 3)
3.等级:27链接(9 * 3)
4.级别:在达到文档时结束
要实现这一点,我需要让海龟有点读取doc和soc变量并使它们相应地创建链接,但我不知道如何。
到目前为止,这是我的代码: 全局[ 信息
]
undirected-link-breed [ Informationflows Informationflow ]
breed [ Employees Employee ]
breed [ tasks task ]
breed [ Bosses Boss ]
;#########SETUP########
to setup
clear-all
create-Bosses 1 [ set color red
set size 2 ]
set-default-shape Bosses "person"
ask Bosses [ setxy 0 15 ]
ask patches [ set pcolor white ]
set-default-shape Employees "person"
create-Employees ( span-of-control ^ depth-of-control) [set color blue
set size 2 ] ; absolute Number of Employees
;ask Boss 0 [ create-Informationflow-with random Employee 8] ; IDEA
;ask Employees [ create-Informationflow-with one-of other Employees] ; IDEA
;ask Employees [ create-Informationflow-with Boss 0 ] ; IDEA
repeat 100 [ layout ]
ask Employees [
setxy 0.95 * xcor 0.95 * ycor ]
end
to-report value-of-span-of-control? ; Just an idea
report span-of-control
end
;##########LAYOUT##########
to layout
; layout-radial Employees Informationflows (Boss 0) ;Problem: Boss is fixed in the Center
layout-spring Employees Informationflows 0 10 2
end
如果有人能指出我正确的方向,我会非常感激。
亲切的问候,
乔恩
答案 0 :(得分:2)
好的,首先是一般的编码建议 - 做一件事,测试并修复它,然后继续下一件事。
关于如何“阅读”doc和soc变量的问题让我觉得你对NetLogo来说是一个新手。如果是这样,请继续执行NetLogo站点上的教程。创建名为“XYZ”的选择器会创建一个名为“XYZ”的全局变量,没有其他步骤可以读取它。由于您选择的是数字,因此您可能需要使用滑块而不是选择器。
尝试用以下内容替换你的注释掉的问Boss系列:
ask one-of Boss [ create-Informationflow-with n-of soc Employees ]
使用who
数字通常是不好的做法,因为海龟可能会死亡或以不同的顺序生成,因为您更改了某些代码,然后who
数字不同。所以我使用one-of
随机选择任何boss(其中只有一个boss)。我类似地使用n-of
选择Employees来创建链接,并将n-of
中的数字n指定为soc
变量的值。