带约束的图形绘制

计算科学 约束优化 图论
2021-12-13 12:03:46

我有一个(循环无向)图,存储在一个合适的结构中(这取决于选择的语言)。节点代表现实世界中的地方,边代表它们之间的联系,所以我对绘图有一种初步的猜测。

我必须用一些约束和要求来绘制这个图,并且从我读过的(科学文献和关于绘图的书籍)来看,目前没有一个算法专门解决这个要求,尽管 Sugiyama 的磁化弹簧非常接近我想要的达到。然而,如果提供合适的成本函数,模拟退火可以解决这个问题,这不是一项简单的任务。

所以问题是:你能帮我制作一个程序,用下面列举的约束来解决图形绘制问题吗?

约束和要求

  1. 边缘必须以 45 k度对齐,k介于 0 和 7 之间(如果此要求太强,则至少为整数)。但是,在算法的执行过程中,我认为没有理由禁止违反该约束。
  2. 由于图表示物理位置,算法必须保持相对位置(例如,如果节点 A 在初始猜测中是 B 的东北偏北,则 A 必须是 B 的北或东北,但可以例外以满足下一个要求)。
  3. 节点距离应该趋向于“自然”的预定义长度和对齐方式(如果图形是开放链,算法应该输出对齐在一条线上的等距节点)
  4. 弯曲发生在节点处,两个相邻边缘之间的角度应为 135 度,叉除外。
  5. 必须避免边缘交叉。
  6. 标签不得与图纸的任何部分重叠,并且应按以下规范定位(0 度 = 水平轴,文本框逆时针旋转):
    • 如果这个不是水平的,则与超级边缘(对齐边缘的聚合)正交
    • Bend:prefer [凸边,与最长的相邻超边正交]
    • 水平边缘
      1. 45度
      2. -45度
      3. -135度
      4. 水平下方
      5. 水平以上
      6. 135度

我还没有选择编程语言,但我想我会坚持使用 C/C++、Python、Perl 或 Lua。输入将是我一开始谈到的“对象”,输出将是相同的“对象”,但节点位置已被优化算法改变。

典型的问题将有大约 500 个节点,小区域人口密集且连接,这些区域之间的连接密度较低(但不是唯一的)。我对效率不感兴趣,至少目前是这样。

1个回答

听起来您正在尝试绘制地铁地图。果然,文献中有几篇关于地铁/地铁图形绘制的论文。您可以从 Alexander Wolff 的“绘制地铁地图:调查”(2007 年)开始,然后看看Nöllenburg 和 Wolff的最新“通过混合整数编程绘制和标记高质量地铁地图”(2011 年)。