【问题标题】:Searching for efficient clustering algorithm寻找高效的聚类算法
【发布时间】:2018-09-03 12:22:41
【问题描述】:

在二维NxN 矩阵中,每个点代表地图的一个区域。随机区域有M个客户需要由随机区域K个客户服务中心服务。每个客户服务中心最多可提供X 个工作岗位。所有客户的数量必须小于或等于客户服务中心的总能力。所有客户必须被分配到任何服务中心,汉密尔顿距离是成本(客户只能向上、向左、向下和向右移动到服务中心)。如何分配客户以最小化总成本?如果它是一个众所周知的问题或至少是伪代码,我正在寻找一个方向。

【问题讨论】:

  • 这可以表述为一个可能有 M*K 个变量的整数规划问题。

标签: c algorithm matrix 2d cluster-analysis


【解决方案1】:

问题的表述方式是constrained optimization problem,而不是聚类问题。它可能是凸的,integer and linear

聚类算法无法满足容量限制。

有很多关于这种优化的研究。有多种高度优化的求解器可供使用。

【讨论】:

    【解决方案2】:

    我认为您可以使用 MinCost/MaxFlow 算法来处理这个问题。创建图表如下:

    • 创建M + K + 2节点; Mcustomer-nodes,Kcustomer-service-center-nodes (csc-nodes),源和汇。
    • 创建从源到 K csc 节点的 K 边,成本为 0,容量等于每个 CSC 可以服务的客户数量。
    • M 客户节点到接收器创建M 边,每条边的容量为1,成本为0
    • 创建从K csc 节点到M 客户节点的K * M 边,每个边的容量等于1,成本等于CSC 和客户之间的距离。

    在网络上运行 MinCost/MaxFlow 算法 (V = M + K + 2, E = M + K + M*K)。如果 max-flow 值等于M,那么您可以以最终(最低)成本为所有客户提供服务。

    这种情况的解决方案是23

    【讨论】:

    • 感谢@Icastillove 的详细解释
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 2018-04-30
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 2018-11-12
    • 2012-12-04
    相关资源
    最近更新 更多