我遇到以下问题:
我们有180名学生。每个学生都必须选择6门课程之一才能获得学位。一门课程的学生不得超过30名。此外,学生必须指定三门具有不同偏好的课程:。
目标是通过以下方式找到学生对课程的分配:
第一个问题是将问题表达为线性程序(LP)。我的表述如下:
最大化,
必须遵守:
我的说法正确吗?
问题的第二部分如下:
假设我们有一个黑匣子可以解决“最小成本流”问题(https://en.wikipedia.org/wiki/Minimum-cost_flow_problem)。如何使用这个黑匣子解决我们的分配问题?
谢谢
致谢。
答案 0 :(得分:1)
您的 I nteger 线性规划(ILP)公式并不完全正确,在您的最后一个约束中,您写道所有类都具有完全相同的30名学生,但这是不正确的,一个班级的学生不能超过30名。
因此,公式应类似于:
最大化 ∑ ij x ij p ij
适用于:
∑ j x ij = 1,∀i
∑ i x ij ≤30,∀j
关于最大流,您可以将每个学生显示为网络中的一个节点,并且可以将每个班级显示为一个节点,例如对于四个学生和三个班级,图形如下所示:
这里 s 对学生 s i 的容量为 1 ,因为每个学生都可以在最多的一个选择,所以 c(s,s i )= 1 。一间教室的容量为30,这意味着对于每个 c j 类,它都认为 c(c i ,d)= 30 。此外,每个 s i 和 c j 之间的容量也为1(尽管更大的容量不会使),所以 c(s i ,c j )= 1 。
在这里,我们在 s i 和 c j 之间的边缘添加“ 成本” 等于 a(s i ,c j )=-p ij 鉴于收益较高,成本较低。其他边的成本为零,因此 a(s,s i )= a(c j ,d)= 0 。因此,在这里,我们将分配流量(基于每个学生的容纳人数,这样一间教室的总流量少于30),并最小化成本,因此将 -p ij的总和最小化 。给定一个流,使得从源 s 到每个学生 s i 的流为1,那么我们可以给每个学生一个选择,总成本将得到优化。