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