说我有一套学校坐标。我还有一组邻居质心坐标(n)。

我知道每个社区有多少个孩子,它们被分类为主要,中学或高中。所以,换句话说,

N = [(locationN1, primary:3, middle:10, high:4), (locationN2, primary:10, middle:17, high:7), ...]
.

我知道每所学校有多少斑点,格式为:

S = [(locationS1, primary:20, middle:5, high:2), (locationS2, primary:12, middle:7, high:8), ...]
.

我的目标是将尽可能多的学生匹配一定程度的学校。在我的计算中,有可能(非常可能),有些学生将学校少。

我想要的:确定哪个街区较少的孩子和多少。

我的当前计划:

    列出所有配对和学校和邻居之间的相应距离,在给定的半径内
  • 距离最低到最高的距离
  • 基于距离的优先级
  • 按照外观顺序循环邻域(每个邻域都可以看出与定义半径内的给定学校的几次相连)
  • 填补与邻居的孩子的相应学校
  • 从学校的容量中取出斑点
  • 搬到下一个邻里学校配对,...

作为示例:

  • 假设您获取以下订购:

    order= [(邻次_2,school_7,uttonge1),(邻次_5,school_2,uttonge2),(邻次_2,school_2,uttonge3),(邻域_2,school_3,距离4)...]

然后,学校_7从邻域_2接收孩子。并非邻居_2的所有孩子都可以在学校_7。

然后,学校_2收到来自邻居_5的学生。现在,假设学校_2充满了中学能力。

然后,邻居_2仍有学生派遣,所以尝试将它们发送到学校_2。小学和高中,没问题,他们现在都被派遣了。但中学已经满了。

然后我们继续前进到下一个配对,学校_3获得邻居_2的剩余的中学生。请注意,如果距离4高于极限半径,则这些中学生将被归类为学校,因为没有其他配对。

另外,如果邻居_4是任何学校的极限半径的oit,则所有孩子都被视为少。

1)是我的算法正确吗?

2)这个确切问题的名称是什么?我遇到了许多点匹配,电容分配问题,或设施位置问题的“验证”部分,但不是由于某种原因(可能糟糕的搜索技能)

3)我如何实现这种高效,或者这是一种非常合理的方式吗? (效率不是我的主要关注,但欢迎轻松修复)

4)除距离排序外,我是否有其他选项?从技术上讲,在我的情况下,优先级的距离并不重要,它更像是一种随机(或者我应该说公平)基于接收应用程序(未知数据)的时间的分配。因此,我的方法可能会展示100%的邻居分配非常接近一个学校的学校amd在Farrher社区中的一群孩子,但在现实生活中可能不是(不是)真实。

有帮助吗?

解决方案

这可以表示为查找在二分钟图中的最大匹配:每个孩子都是一个左角,学校中的每个插槽都是右顶点,如果可以匹配两个顶点之间存在边缘。

在您的情况下,您可以使用 max flow 更有效地解决它。我会让详细信息。

许可以下: CC-BY-SA归因
不隶属于 cs.stackexchange
scroll top