问题描述
我目前正在研究一个项目,该项目正在尝试解决运输问题。本质上,我需要做的是根据学生的居住地将他们分配到学校。由于他们可以研究不同的事物,因此我将其建模为多商品运输问题。对项目施加的限制之一是,每个学习方向和居住地点相同的学生都必须分配到同一所学校。 这将提供以下数学模型:
除了最后一个约束,我已经设法实现了所有约束。我的尝试是按照以下方式进行的。
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。
稍稍旋转一下,如果卡住了,请发表评论。