我有以下场景:
我的输入是一组点。每个点(经纬度坐标)对应于一个区域子部分的中心点,并且有一个对学校的需求。比如,某个社区需要为50个儿童提供学校。
在使用聚类方法(如k-means或DBscan)按邻近性聚合这些点后,我希望将需求点分配到学校,使得每个聚类的需求(该聚类中所有点需求的总和)得到满足。
换句话说,我希望在这个聚类中创建学校,并将儿童(点)分配到这些学校中。
学校有固定容量限制。
例如:我需要3所学校(每所容量为40),来满足聚类C4中100个儿童的需求(P1, P2, P3)。
主要目标当然是了解这些学校的位置。但我可以使用逻辑来获取这些信息。
我应该使用什么方法来填充聚类的容量?这是正确的做法吗?
回答:
对于分布均匀的数据,我预期最有效的方法是从k-means聚类开始。如果每个生成的聚类都能满足学校的容量,你就得到了一个解决方案。
然而,你的“担忧”情况是至少有一所学校超过了容量。例如,你在一条宽河的北侧有20个儿童,南侧有90个儿童,学校的容量为40:你需要将南侧的至少10个儿童分配到北侧。
处理这种情况的算法方法是实现一个不同的误差函数:添加一个条款,严厉惩罚(即+无穷大成本)将第41个学生添加到该聚类中。
另一种方法是允许聚类正常聚合,但在之后进行调整。假设东南学校有46名学生,西南学校有44名:将6名和4名最靠近北部学校的学生,发送到那所学校。
这些指导对你来说足够了吗?你有学校同时超过和低于容量的情况吗?我不想过度设计解决方案。