【问题标题】:Graph partitioning optimization图分区优化
【发布时间】:2014-08-06 22:17:56
【问题描述】:

问题

我在平面上有一组位置(实际上它们是 KML 文件中的 pin),我想将此图划分为子图。连接性非常好 - 与所有现实世界的道路网络一样 - 所以我假设如果两个位置靠近,它们就会有某种连接。生成的子图集应遵守以下约束:

  • 每个节点都必须被一个子图覆盖
  • 每个节点都应该正好在 1 个子图中
  • 子图中的每个节点都应该彼此靠近(L2 范数距离)
  • 每个子图应至少包含 5 个位置
  • 子图的数量应该最少

现在位置的数量不超过 100 个,所以我考虑过暴力破解所有可能性,但这显然不会很好地扩展。

我考虑过使用一些 k-Nearest-Neighbors 算法(例如使用 QuickGraph),但我不知道从哪里开始以及如何扩展/缩小方法。也许可以将这个问题映射到另一个可以通过一些数值过程轻松解决的问题(例如Simplex)......

也许有人对这类优化问题有经验并愿意帮我找到解决方案?我没有 Mathematica/Matlab 之类的访问权限……但有足够的 .NET 编程技能和hmm Excel :-)

非常感谢!

【问题讨论】:

    标签: graph graph-algorithm nearest-neighbor


    【解决方案1】:

    一旦有多个标准需要以最佳方式同时满足,通常就会开始变得困难。

    数值解决方案可以如下工作:您可以为自己定义一个效用函数,将您的位置分区映射到正实值,通过为其分配“评级”来描述分区的“好”程度(好可能很高“坏”可能接近于零)。

    一旦你有了这样一个函数来为分区分配相应的“值”,你只需要对其进行优化,然后如果你合理地定义了你的效用函数,你就有希望获得一个好的解决方案。进化算法擅长这项任务,因为您的效用函数可能由于其离散性而在分析上过于复杂而无法解决。

    那么问题就在于如何通过这个实用函数将“值”分配给分区。这就是你的任务。例如,可以通过使用一个因子对每个标准进行加权并将结果相加,或者甚至更复杂的函数(最小二乘等)来完成。您在效用函数的定义中使用的因素是调整参数,可以改变直到结果看起来不错。

    如果你能亲自动手,一些 CA 软件对测试会有很大帮助,我猜想为你的分区问题获得一个黑盒求解器,你需要使用你选择的语言自己实现完整的过程。

    【讨论】:

    • 感谢您的建议,这种方法似乎很合理 - 我想评级功能有些复杂:-)
    • 复杂到你想要的程度。不过,这可能很容易,例如通过简单地总结每个标准的评级并对其进行优化。我在我的论文中对多标准优化问题使用了类似的方法,并且效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 2019-02-10
    相关资源
    最近更新 更多