我已经写过了,一点思路->第14届“华中杯”数学建模思路, 现在对A题做一些
讲解和代码的编写,抛砖引玉吧。
首先使用一下WPS转换一下文件的格式,CSV是我的最爱
我这里使用的Python,依赖Numpy和Pandas两个库:
可以方便的做一些数据的转换
转换成比较纯粹的格式,然后换个名字,以上就转换结果
使用numpy读取一下
自带的库这个也ok,不过效率不高,你可以感觉到的哪种慢
这就是结果,数据的规模也有了,一共2W+。
这个是它的意思,我们先关注里面不变的量,比如一共有多少货物种类。
也可以这样的去更换头,源文件没有做更换
对文件进行一下概况的计算
可以就关注某一个表头的项目
这里就是写了一个你的订单10需要的货物及其种类
数据都满足的是4位,如果是100,那就是0100,
可以验证一下~
[1]就是0+1=2(我没有算错)就是第二个位置上面,P是种类,后面是数量。
很简单的就是是这样的算出来了一个货物分布的订单和具体的数量,以及总数。
这里要求的是货架数量只有200,也就是种类只有200,也就是说我们不用顾全大局,只要算200以内的就好。
先假设订单数量为T
接着就是比如A的摆放策略就会让N个订单收益,T-N就是现在没有照顾到的
B的策略让M个收益,同样的T-M就是剩下的。
我们的目标就是让T-M最少,让尽可能多的订单被分拣。继续想,订单是由种类和个数制约。
我的策略是这样的,先计算每种货物的个数,那么可以得到,此时的订单里面的哪种货物的数量需要的最多。
一个货物(所需要的数量),也可以得到这个货物要分配的订单:
一个订单是由多个货物主导的,接下来就是从得到的清单。这里就按照我上面的做演示。
记得将索引改变。
得到的数据是这么多,也就是说D0190这个订单需要这么多的货物。
这里注意是要取舍的,要考虑是满足下一级用户的还是说适合工厂的,对于用户来讲是尽可能的拿到货物,但是工厂来说是尽可能地清空货物。举个极端地例子,比如A 30W件货物,B 1件货物都是占用的一样的,所以你要尽可能地要从货物地尾部来分拣。
这里使用绘制一个就从订单1-订单923对应的物品种类数
看下面:
这些地方都是种类特别少地地方.
这里的第一个订单的种类的分布,更加的清晰
注意这里的是要求批次低,这就隐含的要求是尽可能要装到运载极限的的时候。因为题中没有,所以这里你也需要自己标定。
我这里假如是快递的转运,那么就是说全天运转,你就订单数量除以24,取整,这样得到的就是小时转运极限订单。当然你也可以更加的人性化,比如考虑工作时间等。
我的字可太丑了,凑合的看。
选好种类为先,然后计算种类包含的订单,订单内部以数量来排序,算法上面的设计是递归的。
编程时候的便利
尾位置优先,还有计算要按照订单顺序,订单顺序不可以变,但是内部的挑拣顺序可以变。
emmmm写的时候很多细节没有考虑到,但是直播的时候有说:直播录屏
大家可以点击观看。
视频