我正在尝试在IBM CPLEX中编写混合整数模型,但我遇到了问题。这是问题所在:
学生可以学习几门不同的课程,学生从课程中获得的效用取决于学生和课程。具有挑战性的部分是;某些课程的实用性有时与其个人实用程序的总和不同,如果它们由同一个学生一起学习。如果此联合实用程序为零,则应考虑单个实用程序。在这一点上,我打算做的是编写一个条件,使模型采用联合效用值,而不是学生采取的两个课程的个别值,但我无法做到这一点没有非线性。
感谢您的帮助。
答案 0 :(得分:1)
首先,你的问题缺乏一个非常重要的信息:目标。
我认为目标是为学生分配课程,使学生通过参加课程获得的总效用最大化。在这种情况下,任何学生通过任何课程都可以获得的所有实用程序都是已知的。从你的问题,我也明白联合公用事业也是已知的。因此,我们可以定义一个名为 loss 的新“参数”,以便 loss(k,l)表示课程 k时“丢失实用程序”的数量和 l 由学生同时拍摄。可以使用给定数据轻松计算这些值。然后,我们可以通过以下方式解决问题:
让 w(i,k)成为参数,通过参加课程确定学生 i 获得的效用量ķ。
让 x(i,k)为整数二进制变量,确定学生 i 是否学习 k 与否。
让 u(i,k)成为变量,确定学生从中取得的实际实用程序数量当然。
目标函数:
<强>条件:强>
x(i,k) * w(i,k)&gt; = u(i,k)(适用于所有学生和课程)
这保证了学生i从课程k的最大效用不能超过假定的(给定的,最大可能的)效用。当 x(i,k)为零时,这也可以保证 u(i,k)设置为零。
x(i,k) w(i,k) + x(i,l)w(i,l))&gt; = u(i,k)+ u(i,l) - 所有“课程对”和所有学生的损失(k,l)
这保证了学生同时参加两门课程所获得的公用事业总和不能超过联合效用。