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

问题描述

我目前正在研究一个项目,该项目正在尝试解决运输问题。本质上,我需要做的是根据学生的居住地将他们分配到学校。由于他们可以研究不同的事物,因此我将其建模为多商品运输问题。对项目施加的限制之一是,每个学习方向和居住地点相同的学生都必须分配到同一所学校。 这将提供以下数学模型:

Model

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

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,l]==students[g,l] else x[g,l] for s in schools if (g,l) in x),sense=pulp.LpConstraintEQ,name='Unique_assignment[{},{}]'.format(g,l),rhs=0
        ))

添加最后一个约束会使PuLP忽略所有其他约束,我不理解。谁能给我一个指针,说明我需要如何实现这样的条件?

解决方法

您似乎正在尝试对x实施“全有或全无”约束,并且只希望其为零或需求。那将不能很好地工作,并且您尝试使用条件约束进行编码的约束是不合法的,因为这意味着您希望求解器在某些变量值下使用一组方程式,而在不同变量下使用另一组方程式情况。

从好的方面来说,修复非常容易。您可以将x强制转换为二进制变量,并在需要获取数量的位置将其乘以需求。因此,在目标和容量约束下,您需要乘以参数d。并且您将需要修改需求约束,以使x的所有学校的总和为1。

稍稍旋转一下,如果卡住了,请发表评论。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...