ReactNative+TypeScript仿喜马拉雅开发App升级版羌笛何须怨杨柳

#1

download:ReactNative+TypeScript仿喜马拉雅开发App升级版羌笛何须怨杨柳

吴广蓝色纸盒尺寸的设计实践
一.背景
极光包装盒成为潮流logo,get-something App成为年轻潮人的精神归属。特殊的包装材料在消费者中形成了强大的心智,极光蓝等于get-something。
但由于早期的箱尺寸数据是靠人工经验设计的,存在着箱尺寸与商品尺寸匹配度不高的问题,一般会造成以下效果:

纸箱尺寸不合理导致部分商品使用较大的纸箱,造成纸箱采购成本的浪费。
较大的纸箱会增加运输成本。
并且纸箱与商品之间的缝隙过大,可能会造成商品在运输过程中的损坏。

第二,确定计划
考虑到纸箱的投标节奏,以及留在仓库打样、试装、试发货的时间,需要以较快的速度完成建模和计算。
在这件事情上,业务方无法给出一些具体的准则。例如,要计算的综合目标包括运输成本,运输成本包括承运商的配送算法规则及其运费模板。直接把这些因素纳入盒子建模基本上是不可能的。再比如箱子的数量影响采购招标谈判的成本和仓库里的人的效率。这里很难量化,无法直接定义盒量值的评价标准。所以首先要和业务方一起分析产品的现状,明确目标,把所有的问题量化,同时把问题简单化。
2.1问题分析
Sku数据:过去一年出货sku的主数据及其对应的销量,规则中排除的(只考虑纸箱出货的货物,排除分箱包装的货物)和异常值(如sku大小异常)。
纸箱尺寸参数约束:考虑到板材尺寸的合理性(纸箱尺寸下限的定义)和仓库内人员打包的方便性(纸箱尺寸上限的定义),我们确定了纸箱的上下限,形成了百万个组合空间。
箱数约束:排除异形箱,要综合考虑装箱率、采购成本、仓库效率。一般来说,单个仓库的箱子数量不能超过15个。
覆盖范围:在已筛选出纸箱包装的SKU的前提下,接受部分异形、大件物品无法被箱组覆盖,要求覆盖发货订单率> =99%。
基于以上对问题的分析,可以看出,如果有一套K盒计算装箱率的解法,这个问题的复杂度是不错的。但是如果从正面做计算,需要遍历符合条件的SKU的盒子组合,基本上无法在有效时间内计算出结果。
2.2问题简化
2.2.1箱子数量的限制
剔除异形箱,基于仓库的实际情况,预计本次新设计的箱子数量为8~15个。需要综合考虑装箱率、采购成本、仓库效率。箱数增加,装箱率会增加,采购成本也会增加,在仓库的效率会降低。因为这里无法量化,比如给出具体的综合指标,所以决定给出几个版本供业务方选择,而不是作为建模的约束或目标。这相当于直接简化了将M组盒子中的M *固定在一个盒子中的复杂性。在实际开发中,只需要同时使用M个容器来执行计算。
覆盖范围限制
覆盖是一个不等式约束,目前的问题,未覆盖的sku零件分布非常明显,集中在长度、宽度、高度以及超过仓库内搬运便利性上限的一个或多个值。因此,这里,在建模之前确定盒类型的上限和未覆盖的部分。
目标函数的定义
至于采购成本,不言而喻,肯定和纸箱用纸的情况有关。纸箱用纸越小(纸箱展开面积越小),成本越低。
就运输成本而言,基本上3pl是用MAX(抛重,实际重量)法计算的,所以这和纸箱发展区域的优化方向也是正的;
如果将每个3pl运费模板都加入建模,同时需要考虑承运人分配的算法设计,问题会过于复杂,计算量会非常大。现在,很明显,我们只需要优化每张纸的纸张面积。如果一张纸的优化纸箱包装不触及运费模板的范围,运费不变,如果触及,运费成本必然降低。
综上所述,最终考虑的是以装箱率这个间接指标作为目标。装箱率指的是测试(数据集sku总体积/数据集装运箱总体积),这也是产品和业务方熟悉并一直关注的指标。
问题建模
经过上述简化,将目标函数定义为装箱率,将配送订单覆盖率和箱数的约束值放在建模问题之外。

其中S_i代表Sku_i的销售量,R_i代表SKU _ I的推荐包装率
推荐的箱型应满足内部间隙大于最小值的要求,最小的箱型从箱型组中选取,即

箱子的大小要满足至少能附上运单的要求,不能太影响仓库人员的装箱效率。

同时我们按照长>宽>高的顺序清理SKU,定义纸箱长>宽>高。

最后,我们要求盒子的长度、宽度和高度数据为整数,即

第三,优化算法
3.1一般解决方法概述
对于这种优化问题,通常主要包括精确解算法和启发式算法:
精度的方法主要是用单纯形法(线性规划)或者一些迭代法(非线性规划)结合分支定界法来寻找我们想要的整数解。方法如果精确问题是线性规划问题,可用单纯形法在可行域的顶点找到全局最优解,用微分法或有限次迭代找到接近最优解的非线性规划。由于不是多项式时间求解方法,在大规模例子中往往不可行。
启发式算法,如遗传算法、蚁群算法、进化算法和智能算法,是针对常见问题的。它可以作为几乎任何问题的黑匣子。启发式算法,说白了就是一种定向穷举的方法。在计算资源有限的情况下,需要根据问题场景和模型的特点选择合理的邻域结构或运行机制,在全局搜索能力和局部搜索能力之间进行权衡。启发式算法通常需要给定的初始解;另外,算法不能保证在多项式时间内收敛,但往往可以控制迭代次数。

3.2精确求解法

线性规划

对于线性规划问题,其可行解的集合是凸集或无界域,基本可行解对应于凸集的顶点。通过凸集的性质得出最优解会在凸集的顶点上,然后通过遍历和重新排序得到最优解。但当顶点过多时,需要用单纯形法来寻找线性规划的最优解。

非线性规划

如果目标函数或约束条件中含有非线性函数,例如当前问题中目标函数的装箱率有非线性因素,这类规划问题就是非线性规划问题。一般来说,求解非线性规划问题比求解规划问题要困难得多。与单纯形法这种求解线性规划的通用方法不同,非线性规划没有通用算法,每种方法都有自己特定的适用范围。

整数规划

因为要求输出结果是整数,所以需要用分支定界法求解。
分支定界法的核心思想是分支和剪枝。当不考虑解必须是整数的条件时,用单纯形法可以得到最优解,但这个解往往不全是整数,所以用剪枝的方法一点一点缩小范围,直到解是整数解。
从图中可以看出,在初始化阶段,需要给出输出的全局上界和下界。如果能采用一些启发式的方法,获得一个稍微好一点的上界和下界,作为导入的初始解,那就最好了。如果没有,可以先设置为正负无穷大。
然后进入主循环,通过求解整数规划(线性规划)的连续松弛问题得到子问题的上界;问题分解可以帮助拆分整数规划问题,也可以帮助我们得到下界。

3.3元启发式方法
这种算法以遗传算法为代表,适用于以下场景:

神经网络超参数优化
一些具有固定结构和特征的组合优化问题
一些机理模型难以建立的黑箱优化问题。
多目标优化问题

遗传算法

基本概念

基因:可行解的元素
染色体:染色体是一个可行的解决方案。
交叉:多个染色体被切断,拼接成新的染色体。
突变:修改染色体的某些基因。
副本:最后一条染色体的完整遗传副本。

在算法的初始阶段,它会随机产生一组可行解,即第一代染色体。
然后用适应度函数计算每个染色体的适应度,根据适应度计算每个染色体在下一次进化中被选中的概率。
通过“杂交”,产生N-M条染色体。
然后,杂交后产生的N-M染色体发生变异。
然后通过“复制”生成m染色体;
重复2~5次。

四。特定建模
4.1数据分析
首先粗略看一下过去一年发货的SKU的长宽高主数据及其销售分布。这是我们盒子设计的基础数据。同时,考虑到仓库实际操作的效率和采购的成本,箱子的种类和数量不能太大,否则会增加仓库包装工取箱的难度,采购成本也会相应增加。
在这一步中,考虑到当前盒型的A/B首先要准确,同时建模参数增加8~15个类型也增加了计算复杂度,所以决定固定这个盒型的值。首先假设N种类型的盒子是固定的,每种盒子类型有长、宽、高三个数,即输出3 * N个参数。
接下来,我们来定义商品SKU和盒子的长度>宽度>高度。首先,我们通过对长度、宽度和高度、异常值等进行排序来清理上一年的数据。例如,当12个盒子固定时,我们通过k-means将SKU和盒子在长度、宽度和高维度上聚类成12组。

做这种聚类分析,一方面根据实际情况,比如通过结合结合面的单个大小来定义盒子大小的下限,再通过结合盒子覆盖的下限来定义盒子大小的上限;
另一方面,每个簇的最大值可以作为盒型的初始化值(实际需要是加5mm作为间隙)。
4.2制约因素和目标
对于业务约束,只需要将货物装入箱子,留有空隙,在箱子数量确定的情况下,还需要确定每组箱子的长度>宽度>高度,即

目标是最大包装率,即
定义计算平均值缓存§:
'‘目标函数。输入程序,返回总距离。
cal_total_distance(np.arange(数字点))
‘’’
total_r = 0
对于npd中的行:
r = [-1] 盒号
对于范围内的I(box _ num):
if(第[0]行
r[I]= row[4]/(p[3 * I]
p[3 * I+1]* p[3 * I+2])
total_r += max® * row[3]
打印(总计_r)
return -total_r / sum_cnt
复制代码
4.3结论
最后几个版本并行运行,打包率以不同的方式增加,平均纸张面积明显下降。
最终1203方案被选为工程方的输出,装箱率提高了5.49%,平均单位纸张面积节省了7.6%,平均单位运费减少了0.06元。

五、彩蛋——用遗传算法画出诺诺
在这篇文章中,我在相关资料中发现了一些脑洞,将几个彩色的三角形组装成图像。
在这里,我试图用60个三角形来画诺诺。
效果大致如下:

优化算法中介绍了遗传算法的一般流程,那么画这个NONO和盒子设计有什么区别呢?
在箱体设计中,需要根据装箱率指标计算箱体尺寸。因此,在定义适应度函数时,我们只需要取最大化装箱率这个指标。所以这里我们只需要将目标函数定义为不同颜色和大小的透明三角形的组装结果与目标图片的相似度。
5.1健身功能
首先,我们需要找到一种方法来量化透明三角形组成的图与目标NONO图之间的差异或相似性。那么我们如何定义相似性呢?图像相似度是某个颜色空间(如RGB、HSV)中值向量的相似度。每个点的差值的最小和更接近期望的目标图案。常用的评价函数如MSE、RMSE、PSNR、ERGAS、SAM等。
下图显示了一些图像噪声方法的各种相似性评价方法的相似性结果。“原始”栏显示原始图像与其自身相比的得分。
这里选择ERGAS作为我们适应度函数的基础。

5.2选择
在这里,轮盘赌方法不一定用于做出选择。具有最高适应度函数的解以95%的概率被选择,其他解以5%的概率被随机选择。
如果random.random() < 0.95:
‘选择基因的来源亲本,有95%的几率从最好的祖先中随机抽取’
poly_a = random.choice(多边形[:1])
poly_b = random.choice(多边形[1:5])
否则:
选择基因的来源亲本,从所有祖先中随机抽取5%‘’
poly_a = random.choice(多边形)
poly_b =随机选择(多边形)
复制代码
5.3交叉和变异
这里,随机数也用于以高概率从父类继承分配的基因,并以低概率修改基因值。坐标交叉变化大致如下,颜色交叉变化也一样。