【问题标题】:Single Source Multi commodity transportation problem in PuLP纸浆中的单源多商品运输问题
【发布时间】:2020-08-27 22:28:50
【问题描述】:

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

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

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 忽略所有其他约束,我不明白。谁能给我一个关于我需要如何实现这样的条件的指针?

【问题讨论】:

  • 我不明白第一个和最后一个约束的组合。 d_gl 显然是一个自然数,但是如果x_gsl \in {0, d_gl},那是不是意味着所有x_gsl 中只有一个可以为1,而其他所有s \in S 都必须为0?

标签: python constraints linear-programming pulp


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-11-21
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多