2017-06-12 65 views
0

我试图用参数expansion rate创建“分层”或“树”网络结构。首先,将一个节点放置在顶部,并且网络中的每个节点都连接到等于其下的多个节点,等于expansion rate。目前我的代码看起来是这样的:Netlogo:创建具有正确节点数的分层(树)网络

to wire-tree 
    clear-all 
    ask patches [ set pcolor white ] 
    create-nodes 1 [   ; create root node of tree 
    set shape "circle" 
    set color red 
    set branch 0 
    expand-network 
    rewire-branches 
    ] 

    radial-layout 


    reset-ticks 
end 

to expand-network 

    if expansion-rate = 0 [ stop ] 
    while [count nodes < num-nodes] [ 
    ask nodes with-max [branch] [ 
     hatch expansion-rate [ 
     create-edge-with myself 
     set branch branch + 1 
     ] 
    ] 
    ] 

end 

该网络目前拥有正确的结构,但在网络中的节点数量超过了num-nodes滑块选择节点的数量。这是因为首先检查是否count nodes < num-nodes之后最后一个舱门被执行。但是,我想要的是,这个最后一个节点的节点一直执行到num-nodes,然后停止。因此,尽管最后一层之前的每个层次包含的节点数量等于expansion rate的功率,但如果总体不能正确划分,最后一层可能会少于此层次。

我该如何做到这一点?

我需要龟拥有的branch变量,因为我后来想以某种固定概率重新连接某些分支中的节点。稍后可能会发布一个问题;)

回答

2

hatch expansion-rate替换为hatch min expansion-rate (num-nodes - count nodes),这样它会创建两个数字的最小值 - 扩展率和您仍需要的总数。

+0

谢谢,我认为这应该工作。但Netlogo给我一个'预期的命令'错误,同时突出显示num-nodes,我无法让它工作。似乎我不能在这种情况下使用'min'过程? 编辑:我想我通过使用 '孵化最小列表扩展率(num-nodes-count nodes)' – ELC

+0

是的,有时NetLogo会对订购感到困惑。你应该不需要'list',因为它正好是两个,但是你可能需要额外的括号,所以它是'hatch min(扩展速率(num-nodes-count nodes))'。如果这样做不起作用,请尝试'hatch min(列表扩展速率(num-nodes-count nodes))'。请注意,在这里,括号内的原始'list'的位置。 – JenB

相关问题