Graphviz和Dot以及数百个节点的图形。

3
我有一些图表需要呈现,它们包含150到750个节点和大约3倍的边缘。这些图表具有时间组件,因此我一直在使用rank same将它们按天收集(对于更小的样本,例如20个节点)。
dot在呈现这些较小的图表时做得非常好。然而,似乎有一个临界点,当图表变得非常大时,dot会变得非常缓慢,或者直接崩溃并显示“继续前进”。
sfdp和neato可以呈现这些图表,但它们看起来很混乱,实际上,我知道它们可以呈现为漂亮的流程图。
有什么建议吗?如何让dot呈现这些图表,或找到另一个可以制作定向图的工具?是rank same在这里拖慢了速度?
以下是当前运行的示例输出,已运行20分钟,但没有完成的迹象...
network simplex:  188 nodes 487 edges maxiter=2147483647 balance=1
network simplex: 188 nodes 487 edges 0 iter 0.00 sec
Maxrank = 561, minrank = 0
mincross: pass 0 iter 0 trying 0 cur_cross 0 best_cross 0
mincross: pass 0 iter 0 trying 0 cur_cross 4084 best_cross 4084
mincross: pass 0 iter 1 trying 0 cur_cross 3308 best_cross 3308
mincross: pass 0 iter 2 trying 0 cur_cross 1552 best_cross 1552
mincross: pass 0 iter 3 trying 0 cur_cross 1409 best_cross 1409
mincross: pass 1 iter 0 trying 0 cur_cross 5183 best_cross 840
mincross: pass 1 iter 1 trying 1 cur_cross 4156 best_cross 840
mincross: pass 1 iter 2 trying 2 cur_cross 2003 best_cross 840
mincross: pass 1 iter 3 trying 3 cur_cross 1780 best_cross 840
mincross: pass 2 iter 0 trying 0 cur_cross 840 best_cross 840
mincross: pass 2 iter 1 trying 1 cur_cross 946 best_cross 840
mincross: pass 2 iter 2 trying 2 cur_cross 922 best_cross 840
mincross: pass 2 iter 3 trying 0 cur_cross 774 best_cross 774
mincross: pass 2 iter 4 trying 0 cur_cross 629 best_cross 629
mincross: pass 2 iter 5 trying 1 cur_cross 759 best_cross 629

...

mincross: pass 2 iter 19 trying 3 cur_cross 567 best_cross 438
mincross: pass 2 iter 20 trying 4 cur_cross 507 best_cross 438
network simplex:  135708 nodes 203040 edges maxiter=2147483647 balance=2  
network simplex: 100 200 300 400 500 600 700 800 900 1000   
network simplex: 1100 1200 1300 1400 1500 1600 1700 1800 1900 2000   
network simplex: 2100 2200 2300 2400 2500 2600 2700 2800 2900 3000   
network simplex: 3100 3200 3300 3400 3500 3600 3700 3800 3900 4000   
network simplex: 4100 4200 4300 4400 4500 4600 4700 4800 4900 5000   
network simplex: 5100 5200 5300 5400 5500 5600 5700 5800 5900 6000   

...目前为321,200


我同意 rank = same 添加了约束条件,可能会阻止 dot 找到解决方案。如果从图形文件中省略 rank = samedot 是否会呈现相同的图形?否则,您可能需要编辑您的问题,以包括 dot 无法呈现的最小文件,以便我们可以逐行查看潜在问题。当然,可能是图形对于 dot 来说太复杂了,或者 dot 没有感知到图形的整体结构,这使得它无法产生良好的渲染效果。 - Simon
1
我一直在尝试减少rank = same语句的数量,这似乎可以大大加快速度。似乎时间至少按照rank = same语句的数量的n^2次方增长。文件最终渲染完成了;在v3 xeon上大约花费了20分钟,crashing cairo:32k x 25k左右的图像。SVG渲染器工作了,生成了一个有些问题的图形。我将继续尝试并暂时保持开放状态,并报告结果。 - Peter V
1个回答

0

最后,我建议不要在使用100个以上节点的“小到中等”图形中使用rank=same。

相反,我们在文件中内部排序节点创建,以鼓励一种软排名,并使用源和汇来尝试获得一些形状上的顺序。

据说,在算法方面进行布局和流动的原始研究可能有很多等待完成。因此,如果您是寻找论文课题的研究生,这是一个至少在过去10年中没有受到太多关注的领域。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接