首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用CP Optimizer对取货和发货操作的能力约束进行建模?

如何使用CP Optimizer对取货和发货操作的能力约束进行建模?
EN

Stack Overflow用户
提问于 2019-08-11 21:20:40
回答 1查看 146关注 0票数 0

我正在对一个有容量约束的调度问题建模。任务是调度一组必须由特定机器执行的操作。更具体地说,我有一组车辆和一组位置,这些车辆必须访问这些位置才能执行一些操作。每个位置最多可以处理一辆车,并且每辆车都有最大容量。有两种类型的操作:提货操作和交付操作。取货工序对应正需求,交货工序对应负需求。该任务是在考虑车辆容量约束的情况下调度所有操作。

我想使用CPLEX中的CP优化器,并使用Java Eclipse对其进行建模。

我尝试使用cumul函数表达式对此进行建模,因为我可以在操作开始时使用StepAtStart函数来指示容量的增加。但是,该函数不对负值进行建模。

受SchedRCPSP示例的启发,我已经尝试过这段代码。但我不能输入负值,也不能减去负需求的表达式。

代码语言:javascript
复制
IloIntervalVar[] opList = new IloIntervalVar[nbOp];
[...]
[...]
IloCumulFunctionExpr[] resources = new IloCumulFunctionExpr[nbVeh];
for(int v = 1; v < nbVeh -1 ; v++) {
      resources[v] = cp.cumulFunctionExpr();          
}
for(int i = 0; i < nbOp; i++) {
      Operation opi = operations.get(i);
      if(opi.Demand> 0) {
            resources[opi.vehicle] = 
            cp.sum(resources[opi.vehicle], 
                   cp.stepAtStart(opList[i], opi.Demand));
      }else {                        
            resources[opi.vehicle] = 
            // THIS SHOULD BE A SUBSTRACTION (NEGATIVE DEMAND)
            cp.sum(resources[opi.vehicle],
                  cp.stepAtStart(opList[i],opi.Demand));                        
      }
      if(opi.StartOperation){            
        resources[opi.vehicle] = 
        cp.sum(resources[opi.vehicle],
               cp.stepAtStart(opList[i],opi.initialLoad));
      }
}
for(int v = 1; v < nbVeh - 1 ; v++) {
      cp.add(cp.le(resources[v], inst.capacities.get(v)));
}

这是正确的方法吗?有没有一种方法可以模拟车辆内货物的这种波动?我想要模拟一种方法,禁止违反容量限制的车辆的某些粘性排列。

例如,如果我的车辆有10个单位的容量,初始负荷为8个单位,以及两个工序A和B(工序A:在城市1提货4个单位。工序B:在城市2交付5个单位)。我预计排列(A->B)是不允许的,因为它违反了城市1的车辆的容量约束。

EN

回答 1

Stack Overflow用户

发布于 2019-08-14 23:27:00

一个更好的解决方案是为每个物品和每个可能的车辆创建一个可选的间隔变量为装货日期,结束日期和卸货日期,设置其最小尺寸装货和卸货位置之间的时间距离。(别忘了为物品添加车辆的替代选项)

则为每辆车添加的累积约束为:

cp.add(cp.le(cp.sum(pulse(transportv,opi.initialLoad)),inst.capacities.get(V);

这将简化模型声明,并提高求解器的性能,这要归功于加载和卸载日期之间的时间相关性

希望对您有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57450274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档