仓库管理系统WMS 订单合并中的聚合算法运用
版权所有, 如需转载请保留链接? http://wangbt5191-hotmail-com.iteye.com/blog/1734160
业务需求:在仓库管理系统WMS中, 在订单发货前, 有一个发货拣单作业, 对订单进行分拣, 根据订单中的品类数量从货区获取商品, 在大量订单作业的过程中, 需要对产品品类相似的订单进行聚合, 也就是根据订单间货物的信息进行预先分组以方便分拣人员分拣。
问题分析假如我们有数据:
?
从空间向量上看就是, 有点的坐标是(x, y, z), 去度量该向量与x 轴的余弦值。 所以这个算法又得名空间向量相似度算法。PS:
通过这个我们可以类推下如果一个计算结果和n 个因素相关, 而这n 个因素互相独立又互相关联, 我们可以认为第x 个因素在整个度量体系中算占的权重就是在N维空间里面的向量与第X维夹角的余弦值。?
2. 聚合算法建模聚合算法目前只找到中位算法比较适合我们的这个场景。
网上搜到的复杂的数学公式我就不上了, 这里就以图表加文字描述下它的原理。
假设我们现在 A--> R 18 个元素落在了一个二维平面上。我们要求把他们分成三个组;
1.? 随机选择N个元素作为特征种子元素?? 这里我们假设选择到了J, L, O 这三个元素作为特征种子
2.根据特征种子分划子集??? 遍历集合中除种子以为的元素, 计算当前元素与选择的三个种子的距离。 找到与当前节点距离最短的种子, 然后我们把当前元素划归到这个种子元素所在的子集合,
????
?? 经过一轮的遍历和计算, 我们划出第一轮分组可以如下表示:?
3. 为每个子集寻找特征种子他的做法是在每个子集内部, 计算每个元素到子集内其他元素的距离总和, 然后我们可以找到这样一个元素, 以它为原点, 到其所在子集其他节点的距离最短;
从这里我们可以看到E, C, O目测应该是新的特征种子。
然后我们重复第二步到第三步的循环。
收敛判定:这里我们可以看到我们从第二次划分子集开始, 就开始进行了循环, 那这里有个问题: 我们如何判断我们应该结束循环返回结果了?
这里有两个方案:
1. 暴力指定循环次数
2. 总种子距离比值比较
?? 我们在子集中寻找种子的时候, 记录下每个子集中种子到其他元素的距离和,上图中, 我们这个数值就是 (E分别到A, J, M和N的距离和)? +? (C 分别到D, K, B, L, G 和H的距离和)?? +? ( O 分别到P, Q , F , R 和I? 的距离和)
代码模拟见附件
? 每轮循环分划子集结束后, 如果这个值和上次的比值小于某个给定的阀值, 将停止循环?