PuLP 中的单源多商品运输问题

Single Source Multi commodity transportation problem in PuLP

我目前正在做一个项目,我试图用交通问题来解决这个问题。本质上,我需要做的是根据学生居住的地方将学生分配到他们的学校。因为他们可以研究不同的东西,所以我将其建模为多商品运输问题。对该项目施加的限制之一是,每个学习方向和居住地点相同的学生都需要分配到同一所学校。 这将给出以下数学模型:

我已经设法实现了除最后一个约束之外的所有约束。我的尝试是按照以下方式进行。

for g in communes:
    for l in studies:
        model.addConstraint(pulp.LpConstraint(
            e=pulp.lpSum(x[g,s,l] - students[g,l] if x[g,s,l]==students[g,l] else x[g,s,l] for s in schools if (g,s,l) in x),
            sense=pulp.LpConstraintEQ,
            name='Unique_assignment[{}, {}]'.format(g,l),
            rhs=0
        ))

添加最后一个约束会导致 PuLP 忽略所有其他约束,我不明白这一点。谁能告诉我如何实现这样的条件?

看来您正在尝试对 x 实施“全有或全无”约束,并且只希望它为零或需求。这不会很好地工作,并且您尝试使用条件约束编码的约束是不合法的,因为这意味着您希望求解器在某些变量值下使用一组方程,而在不同的变量下使用另一组方程案例.

好的一面是,修复非常简单。您可以将 x 转换为二进制变量,然后在需要获取数量的任何地方将其乘以需求。因此,在您的 objective 和容量限制中,您需要乘以参数 d。您将需要修改您的需求约束,使 x 所有学校的总和为 1.

试一试,如果卡住请回复。