根据能力分配许多学生的许多学校
-
29-09-2020 - |
题
说我有一套学校坐标。我还有一组邻居质心坐标(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 更有效地解决它。我会让详细信息。