【问题标题】:CPLEX - batch quantityCPLEX - 批量
【发布时间】:2021-11-16 08:23:26
【问题描述】:

我在其他编程语言中看到过类似的问题,但无法在 CPLEX 中解决以下问题。

我有两个条件需要满足。

  1. 生产的冰淇淋只能在每批 60 个调味批次中使用,并且可以在同一天食用。

forall(f in flavor, t in time) 生产数量的数量应该能被60整除。

我在下面尝试的代码不起作用。

forall(f in flavour, t in time) quantity[f][d] % 60 == 0;
  1. 外购冰淇淋无论口味如何,只能按 5 件购买

forall(t in time) 外包冰淇淋的数量应该能被 5 整除

任何人都可以帮助使用上述功能之一吗?

【问题讨论】:

    标签: cplex docplex


    【解决方案1】:

    模不是线性的,因此您应该引入新的决策变量。

    参见Making Optimization Simple 中的示例Modulo

    int nbKids=300;
    float costBus40=500;
    float costBus30=400;
     
    dvar int+ nbBus40;
    dvar int+ nbBus30;
    
    dvar int+ nbBus40div3;
    dvar int+ nbBus30div3;
     
    minimize
     costBus40*nbBus40  +nbBus30*costBus30;
     
    subject to
    {
     40*nbBus40+nbBus30*30>=nbKids;
     
     // Plus let s add that numbers of buses have to be 3 multipliers
     
     nbBus40==3*nbBus40div3;
     nbBus30==3*nbBus30div3;
     
     
    } 
    

    【讨论】:

    • 只是为了澄清亚历克斯正在使用的逻辑,在你的情况下你想要例如quantity[f][d] 是 60 的倍数。所以你实际上想要一个 60 的整数批次。所以你想声明一些整数变量,比如 dvar int+ nbBatches[f][d] 然后添加一些约束比如数量[f][d] = 60 * nbBatches[f][d]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    相关资源
    最近更新 更多