Algorithm 算法-匹配学生考试中心
我有一个问题,就是把学生分组到最近的考试中心。以下是条件/约束:Algorithm 算法-匹配学生考试中心,algorithm,Algorithm,我有一个问题,就是把学生分组到最近的考试中心。以下是条件/约束: 有X个学生和Y个考试中心。每个中心将容纳不同数量的学生 考试中心总容量的最大值可以大于学生人数,但不能小于学生人数 一名学生可以与多个考试中心保持最小距离 所有考试中心将同时举行考试 例如,有11500名学生和15个考试中心。5个中心(1至5个)将容纳1500名学生,3个中心容纳600名学生(6至8名),其他7个中心(9至15名)将容纳350名学生 我开发了以下内容: 一个数据库表,其中包含每个考试中心的学生位置(注册地址)。像下
Student ID Dist-Ex1 Dist-Ex2 ... Dist-Ex14 Dist-Ex15
1 10 70 20 50
2 25 43 5 105
...
11499 35 12 35 55
11500 5 23 5 5
Ex centers Nearest for no. of students
1 2000
2 500
...
14 150
15 500
提前多谢 我建议你在这里看看遗传算法 以学生人数和他们的作业为例 您的适应度函数可以为学生提供更大的价值,重叠更少 我在大学时就用这种方式解决了学生/日程安排问题,效果很好 所以我相信遗传算法是一种方法
祝你好运 我知道您正在寻找一个最佳解决方案-(所有学生都被分配到最近的考试中心)。为此,我们将把问题简化为 将问题简化为一个二部1图
G=(V,E)
,这样V={students}U{examination centers}U{S,T}
(所有学生、所有考试中心和两个额外的顶点S和T)。
E=CLOSESTS U{S}X{考试中心}U{students}X{T}
(S连接到所有中心,所有学生连接到T,CLOSESTS-我们现在将讨论)。
其中
CLOSESTS={(考试,成绩)|考试是离学生sutd最近的考试中心}
我们还需要一个权重函数f:E->N
,以便:
f(u,v) = capcity if u=S, v=examination center
f(u,v) = 1 if u is examination center and v is student
f(u,v) = 1 if u is student and v is T
生成的图形应类似于此示例:
现在,运行最大流算法,如。如果最大流量“进入”T为#num_studets,则存在一个最优解,并由算法2实现的流量网络表示。“最大流量”算法将计算每条边的流量,这相当于如何在不突破容量限制的情况下将学生分配到中心
证明:
- 如果有#学生的最大流量,则使用所有边(学生,T),
所有学生都有一个输入流,因此被分配。此外,每个考试中心最多分配
能力
学生,并且 解决方案是有效的
- 如果最大流量小于#学生,则存在 未从考试中心获得流量的学生,并且 因此没有赋值,也没有最优解
(1) 不完全是一个二部图,因为我们添加了S和T,没有它-它是。
(2) 根据,由于所有权重都是整数,所以有一个整数解。(我知道这是两年前提出的,但可能会对某人有所帮助) 它可以通过匈牙利算法()来解决,创建一个二部图,如下所示:
- 左侧节点表示学生
- 右侧节点代表15个中心的座位
- 从每个学生到每个座位插入一个边缘,重量=到中心的距离
- 然后计算最小权重匹配
这似乎是广义赋值问题的一个例子,它是NP难问题。维基百科有一个很好的解释,还有一个贪婪的算法,它不能保证是最优的。如果“代理”是位置,“任务”是学生,则代理/任务公式与您的问题相对应。成本是从地点到学生的距离,每个学生的利润是1。也许一个最大流量算法可以适合这里谢谢你的帮助。我将有一个最大流量以及基因的外观algorithms@kwytse:不客气。请注意,遗传算法(GA)是启发式的,不会找到最优解。如果你真的想找到最佳的解决方案,并将每个学生分配到其最近的中心-最大流量是一条路要走。另请参见编辑-我添加了一张照片,用来演示图形的外观。