使用docplex求解调度问题时如何将step_at_end方法生效时间延后指定时长
实现方案
最优实现方式直接调用step_at_end原生支持的偏移参数即可,无需额外新增变量或约束,求解性能最优。
step_at_end方法完整参数为model.step_at_end(区间变量, 步长值, 偏移量=0),第三个参数默认为0,即步长在区间结束时立即生效,你只要把需要延后的时长x传入该参数即可实现延后计入库存的需求。
修改后的代码如下:
# DELAY为需要延后的时长,支持固定整数或数值表达式 DELAY = x for wo in workorder_list: for quantity, material_id in wo['output']: stock[material_id] += model.step_at_end(workorders[wo['id']], quantity, DELAY)
如果你的延后时长是随工单动态变化的变量,也可以额外构造一个长度为0的虚拟区间,设置其开始时间为原工单结束时间加动态延迟,再对这个虚拟区间调用step_at_start方法添加步长即可,不过固定延迟场景下原生参数的方案是最优选择。
内容的提问来源于stack exchange,提问作者RMat
相关产品推荐
相关产品推荐

