在经历了负荷约束、自动扣减等算法后,基本上可以满足自动辅助排程的了,但是在实际订单测试过程中,当第一张工单的订单量小于日产能很多的时候,也就是剩下的产能放到第二张工单在计算的时候就有问题了,直接按日产能乘以剩下负荷了,而不考虑生产任务二的订单量了;
所以此时需要在加上约束,通过函数的运算,发现错误发生在这一步:
(1-(SUM(F$3:F3/$D$3:$D3)))*$D4,根据上面的分析问题的结果,需要这步的运算结果与订单对比,也就是800与生产任务2的订单数量500对比,当800大于500的时候返回订单数的累计排程。
更改这类超多约束的公式的时候,有一个小技巧就是记住每一段代表的约束,这样可以通过IF函数选择参数来快速判断属于哪一下约束,截至到现在,几个约束如下:
1. 负荷约束:AND((SUM(F$3:F3/$D$3:$D3))0),理解为负荷必须是大于0小于等于1,等1代表满负荷,小于1大于0表示未排满负荷;
2. 剩下负荷运算:(1-(SUM(F$3:F3/$D$3:$D3)))*$D4,当第一个生产任务未排满的时候,通过减负后乘对应的产能来判断新排程;
记好了上面的两个模组公式后,就可以再次对这些公式写模组引用了,我们继续把上面的长公式进行更改
=IF((1-(SUM(F$3:F3/$D$3:$D3)))*$D4>$C4-SUM($E4:E4),$C4-SUM($E4:E4),(1-(SUM(F$3:F3/$D$3:$D3)))*$D4)
更改完后,发现原来的负荷约束其实可以不用写了,因为通过负荷1减去结果,相当于考虑了负荷了,所以更新完后这个最终版本的公式应该是代码相对比较短的一个自动排程了
实际的排程是有休息的,所以我们需求把工作日历,加上工作日历,把未来排程上的日期是否出勤用0和1代表,1代表出勤,0代表休息,再用查找引用函数引用过来,就可以实际休息日不排产的效果。
新建一个工作页面,把工作日历定义好。再把对应的公式更改为F3=IF($D3
F4=IF((1-(SUM(F$3:F3/$D$3:$D3)))*$D4>$C4-SUM($E4:E4),$C4-SUM($E4:E4),(1-(SUM(F$3:F3/$D$3:$D3)))*$D4)*VLOOKUP(F$2,工作日历!$A:$B,2,0),就实现了这个功能了;
到了这里,已经把自动排程辅助的公式全部设计完了,优点是全部自动,缺点也是非常多。
1. 不支持工单分拆,必须连续排程;
2. 每天的排程必须是100% 的负荷,不允许有负荷剩下
3. 调整不方便
以上问题,再开一个专题来探讨。
我是古哥:
从事制造行业18年,在企业运营、供应链管理、智能制造系统等方面具有丰富的实战经验。企业智能化,柔性化计划运营管理专家,擅长通过企业流程优化规范,企业管理、导入计划运营提升企业效率;对提高企业准时交货率,降低企业库存,输出智能制造人才有丰富的经验。学习PMC生产计划,关注古哥计划!
领取专属 10元无门槛券
私享最新 技术干货