数学模型
通过如上的问题拆解,可以将问题归纳于: 按先进先出原则领取S、G机型上多货道的同种物料
即假设有一种商品按如下的货道分配,批次按FIFO原则求领料顺序,并尽量满足客户的领取数量
机型 | 货道 | 库存 | 批次 |
---|---|---|---|
S | 1 | 5 | 2 |
S | 2 | 3 | 4 |
S | 3 | 2 | 6 |
G | 7 | 5 | 1 |
G | 8 | 5 | 3 |
G | 9 | 8 | 5 |
求解过程
批次排序
机型 | 货道 | 库存 | 批次 |
---|---|---|---|
G | 7 | 5 | 1 |
S | 1 | 5 | 2 |
G | 8 | 5 | 3 |
S | 2 | 3 | 4 |
G | 9 | 8 | 5 |
S | 3 | 2 | 6 |
1.按批次排序使用从上到下的递减库存求货道领料数,即 f(x) = sortMinus(stockOrder) 优先批次保证数量
2.如果不满足,则使用G货道轮流置顶 => stockOrder = [G、…] 求解,保证批次的情况下求满足数量
3.如果不满足,则使用G全置顶倒序 => stockOrder = [G、G、G、S、S、S] 求解,优先满足数量
总结
刚拿到这个需求的时候,既要求要满足批次管理,又要求要满足客户领料数优先,同时要计算出用户可输入的领料数集合。
当把所有条件放一起之后发现很难下手,从满足客户领用优先的角度组合出可领用数来计算,再从中挑选出最优批次看起来最符合需求,然而领用数组合在G机型上,随着货道的增加,会出现型如C42、C43的问题,组合操作成指数级增长,很显然这种方式不可取。所以变换一下思路通过批次找最优解,再遍历1-库存和,就可以得到最优结果,时间复杂度O(n)