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

如何在Lingo线性规划模型中添加三类客户的多产品月度需求约束

解决方案:在Lingo模型中添加产品-客户-月份关联约束与客户需求约束

原模型分析

原模型仅包含3种产品、3个月份,无客户维度,需先扩展集合结构,再补充对应参数与约束逻辑。


1. 扩展集合定义

补充缺失的产品、月份,新增客户集合,并定义关联产品-客户-月份的集合来承载约束:

SETS:
    // 补充橄榄油(AceiteOlive)、椰子油(AceiteCoco)
    PRODUCTO/Aceitesesamo,AceiteCartamo,AceiteSoya,AceiteOlive,AceiteCoco/: PRECIO, COST_PRODUC; 
    // 替换为需求覆盖的六月(Junio)、七月、八月,移除九月
    MES/Junio,Julio,Agosto/:CAP_PROD;
    INSUMOS/VitaminaA,VitaminaD,Antioxidantes,Preservantes,SemillaSoya,SemillaSesamo,SemillaCartamo/:COST_INSUMO;
    // 新增三类客户集合
    CLIENTES/Mayoristas,Industriales,Exclusivos/:;
    PXM (PRODUCTO, MES): DEMANDA,A, B;
    MXI (MES, INSUMOS):E, D;
    PXI (PRODUCTO, INSUMOS): REQ;
    PXMXI (PRODUCTO, MES, INSUMOS) : ;
    // 新增产品-客户-月份分配量集合
    PXCXM(PRODUCTO,CLIENTES,MES): ASIGNACION;
ENDSETS

2. 补充数据部分

新增产品的成本、价格,新增月份产能,以及客户对各产品的需求数据(示例数据可根据实际业务调整):

DATA:
    // 补充橄榄油、椰子油的生产成本
    COST_PRODUC= 2.89 2.76 2.97 3.12 2.65;
    COST_INSUMO= 1.5 1.3 2.2 1.5 3.5 3.5 3.8;
    // 调整为5产品×3月份的总需求矩阵
    DEMANDA= 850 835 873
             837 748 859
             866 828 733
             720 750 780
             680 700 720;
    // 补充橄榄油、椰子油的售价
    PRECIO= 10.9 20.8 7.5 18.6 12.3;
    // 六月-八月的产能
    CAP_PROD= 5000 5000 5000;
    // 补充橄榄油、椰子油的原料需求(示例数据)
    REQ=0.053   0.044   0.052   0.14    0     0.32  0
        0.053   0.044   0.052   0.14    0   0   0.34
        0.053   0.044   0.052   0.14    0.56    0   0
        0.048   0.039   0.047   0.12    0     0   0.30
        0.050   0.041   0.049   0.13    0     0   0;
    // 客户需求:每个产品-客户-月份的最低需求(示例数据)
    DEMANDA_CLIENTE= 
        // 芝麻籽油-各客户-六月/七月/八月
        150 120 100   200 180 160   100 90 80
        // 红花籽油
        200 180 160   150 130 110   80 70 60
        // 大豆油
        300 280 260   250 230 210   120 110 100
        // 橄榄油
        180 160 140   120 100 90    70 60 50
        // 椰子油
        120 100 90    100 90 80     60 50 40;
ENDDATA

3. 添加两类约束

约束1:产品-客户-月份关联约束

确保产品分配量与生产量匹配,同时针对指定三类产品添加客户分配规则(示例:批发商分配量不低于该产品当月总量的30%):

// 每个产品当月的总客户分配量 = 当月生产量
@FOR(PXM(I,J):
    @SUM(CLIENTES(C): ASIGNACION(I,C,J)) = A(I,J)
);
// 指定三类产品对批发商的最低分配比例
@FOR(MES(J):
    ASIGNACION(AceiteCartamo,Mayoristas,J)>=0.3*A(AceiteCartamo,J);
    ASIGNACION(AceiteOlive,Mayoristas,J)>=0.3*A(AceiteOlive,J);
    ASIGNACION(AceiteCoco,Mayoristas,J)>=0.3*A(AceiteCoco,J);
);

约束2:客户需求约束

满足各客户对对应产品的最低需求(可根据业务添加最高需求约束):

// 每个产品-客户-月份的分配量不低于客户需求
@FOR(PXCXM(I,C,J):
    ASIGNACION(I,C,J)>=DEMANDA_CLIENTE(I,C,J)
);

4. 完整修改后代码

SETS:
    PRODUCTO/Aceitesesamo,AceiteCartamo,AceiteSoya,AceiteOlive,AceiteCoco/: PRECIO, COST_PRODUC; 
    MES/Junio,Julio,Agosto/:CAP_PROD;
    INSUMOS/VitaminaA,VitaminaD,Antioxidantes,Preservantes,SemillaSoya,SemillaSesamo,SemillaCartamo/:COST_INSUMO;
    CLIENTES/Mayoristas,Industriales,Exclusivos/:;
    PXM (PRODUCTO, MES): DEMANDA,A, B;
    MXI (MES, INSUMOS):E, D;
    PXI (PRODUCTO, INSUMOS): REQ;
    PXMXI (PRODUCTO, MES, INSUMOS) : ;
    PXCXM(PRODUCTO,CLIENTES,MES): ASIGNACION;
ENDSETS

DATA:
    COST_PRODUC= 2.89 2.76 2.97 3.12 2.65;
    COST_INSUMO= 1.5 1.3 2.2 1.5 3.5 3.5 3.8;
    DEMANDA= 850 835 873
             837 748 859
             866 828 733
             720 750 780
             680 700 720;
    PRECIO= 10.9 20.8 7.5 18.6 12.3;
    CAP_PROD= 5000 5000 5000;
    REQ=0.053   0.044   0.052   0.14    0     0.32  0
        0.053   0.044   0.052   0.14    0   0   0.34
        0.053   0.044   0.052   0.14    0.56    0   0
        0.048   0.039   0.047   0.12    0     0   0.30
        0.050   0.041   0.049   0.13    0     0   0;
    DEMANDA_CLIENTE= 
        150 120 100   200 180 160   100 90 80
        200 180 160   150 130 110   80 70 60
        300 280 260   250 230 210   120 110 100
        180 160 140   120 100 90    70 60 50
        120 100 90    100 90 80     60 50 40;
ENDDATA

Max=@SUM(PXM (I, J): PRECIO(I) * @SUM(CLIENTES(C): ASIGNACION(I,C,J)) - COST_PRODUC(I)*A(I,J)) - @SUM(PXMXI(I,J,K): A(I,J)*REQ(I,K)*COST_INSUMO(K));

// 原库存相关约束
@FOR(PXM(I,J)|J#EQ#1: B(I,J)=A(I,J)-DEMANDA(I,J));
@FOR(PXM(I,J)|J#GE#2: B(I,J)=B(I,J-1)+A(I,J)-DEMANDA(I,J));
@FOR(MXI(J,K)|J#EQ#1: E(J,K)=D(J,K)-@SUM(PRODUCTO(I): REQ(I,K)*A(I,J)));
@FOR(MXI(J,K)|J#GE#2: E(J,K)=E(J-1,K)+D(J,K)-@SUM(PRODUCTO(I): REQ(I,K)*A(I,J)));
@FOR(MXI(J,K)|J#GE#1: @SUM(PRODUCTO(I): REQ(I,K)*A(I,J))<=D(J,K));
@FOR(PXM(I,J): A(I,J)<=CAP_PROD(J));

// 新增约束1:产品-客户-月份关联约束
@FOR(PXM(I,J):
    @SUM(CLIENTES(C): ASIGNACION(I,C,J))=A(I,J)
);
@FOR(MES(J):
    ASIGNACION(AceiteCartamo,Mayoristas,J)>=0.3*A(AceiteCartamo,J);
    ASIGNACION(AceiteOlive,Mayoristas,J)>=0.3*A(AceiteOlive,J);
    ASIGNACION(AceiteCoco,Mayoristas,J)>=0.3*A(AceiteCoco,J);
);

// 新增约束2:客户需求约束
@FOR(PXCXM(I,C,J):
    ASIGNACION(I,C,J)>=DEMANDA_CLIENTE(I,C,J)
);

内容的提问来源于stack exchange,提问作者Hania

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 13:35:01