You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CPLEX中编写含i、p、m对应关系的索引约束?

约束编写方案

首先明确给定的<i,m,p>绑定关系:

  • <1,1,1>:提货节点1 ↔ 制造商1、产品1
  • <2,2,1>:提货节点2 ↔ 制造商2、产品1
  • <3,1,2>:提货节点3 ↔ 制造商1、产品2
  • <4,2,2>:提货节点4 ↔ 制造商2、产品2

1. 核心平衡约束(提货量与产量匹配)

这类约束保证每个提货节点的总提货量,等于对应制造商生产对应产品的总产量(假设w代表生产线/生产单元,对所有w求和得到总产量)。

对于每个周期t:

  • 节点1的总提货量 = 制造商1生产产品1的总产量:
    \sum_{v} U[t][1][v] = \sum_{w} QT[t][1][1][w]
    
  • 节点2的总提货量 = 制造商2生产产品1的总产量:
    \sum_{v} U[t][2][v] = \sum_{w} QT[t][1][2][w]
    
  • 节点3的总提货量 = 制造商1生产产品2的总产量:
    \sum_{v} U[t][3][v] = \sum_{w} QT[t][2][1][w]
    
  • 节点4的总提货量 = 制造商2生产产品2的总产量:
    \sum_{v} U[t][4][v] = \sum_{w} QT[t][2][2][w]
    

2. 无效组合的零约束(可选但建议添加)

为了严格禁止非指定<i,m,p>组合产生流量,避免模型出现逻辑漏洞,可以添加以下约束:

针对提货变量U

对于所有周期t、车辆v,如果节点i对应的<m,p>组合与当前约束的<m,p>不匹配,则约束该节点对应提货量为0:

\sum_{v} U[t][i][v] = 0 \quad \text{当<i,m,p>不在指定集合中时}

针对产量变量QT

对于所有周期t、生产线w,如果<m,p>对应的提货节点不存在指定绑定关系,则约束该产量为0(不过本次所有<m,p>都有对应节点,此约束可省略,若后续扩展场景可复用):

QT[t][p][m][w] = 0 \quad \text{当<m,p>无对应提货节点时}

建模语言示例(以Python PuLP为例)

如果用PuLP库实现,可先定义绑定关系字典,再批量添加约束:

# 定义<i: (m,p)>的绑定关系
node_mapping = {
    1: (1, 1),
    2: (2, 1),
    3: (1, 2),
    4: (2, 2)
}

# 添加核心平衡约束
for t in periods:
    for i in nodes:
        m, p = node_mapping[i]
        prob += pulp.lpSum(U[t][i][v] for v in vehicles) == pulp.lpSum(QT[t][p][m][w] for w in workstations)

# 添加无效组合的零约束
for t in periods:
    for i in nodes:
        m_expected, p_expected = node_mapping[i]
        for m in manufacturers:
            for p in products:
                if (m, p) != (m_expected, p_expected):
                    prob += pulp.lpSum(U[t][i][v] for v in vehicles) == 0

内容的提问来源于stack exchange,提问作者Tiến Nguyễn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 02:40:37