对于车辆路径问题,要求客户需求点的需求量不大于货车的载重量(这里不考虑体积因素)。当然超过了载重量就直接送货剩下部分参与配送,因此首先要将直送的部分去除。每个客户点的需求可能由许多票订单组成,很自然的想到这是0-1背包问题,一辆或多辆货车看作一个背包,一次性装的货物价值竟可能大,假设各货物的价值都为1,0-1背包问题的目标函数就是一次直送要完成竟可能多的订单。0-1背包问题通常有两种解法:分支定界法和动态规划法,动态规划法利用迭代过程适于编程,因此翻出运筹学书重新看了下动态规划,网上找了段Java代码,很轻松地就把问题解决了。例如货物中{1,3,5,7,9},车辆载重为12,最优解为{1,3,7},这里货物总重只有11,然而白白浪费了1个单位的运能。因此,我就思考需要修改0-1背包问题的目标函数,不再是完成竟可能多票订单,而是货车的运能利用率最高,貌似现在变成了一个一般的最优化问题,不再是0-1背包问题了。中午躺在床上就思考现在该怎么解,显然首先需要对货物需求排序,上例已有序了,排序以后首先需找是否有刚好满足载重12的方案(首先加入1,载重剩余11,在表内2分查找是否存在11,存在即停止,不存在再加入3,载重剩余8,2分查找是否存在8,依此类推),存在就找到最优解,不存在再考虑使用0-1背包问题解法。显然对于上面的例子,最优解是两辆车分别{3,9}和{5,7},运能都充分利用,最后剩1个单位重量货物加入配送。由此,我才忽然想到一个最简单的方法,也就是首先将所有的货物需求加权得25,25除以12取余数,余数为1,即1个单位货物参与车辆路径问题配送。其他24个单位直送,本例正好两个都是12。若分别为11和13怎么办?当然此时问题关键不再是11与13的问题了。而是实际情况,实际中经常一票货物拆做几次运送,也就是说一票货物有很多小包装,13拆成12+1不存在任何问题。此时,这个问题就很明了了,只要算出余数就可以了。一个很简单的问题结果被我想复杂了。
记得以前看过的一个例子。肥皂厂经常会有小概率的肥皂盒没有装入肥皂,出厂前需要把空肥皂盒找出。一个国营肥皂厂老总让电子系博士去解决这个问题,博士花了几个月设计了一套一百多万元的设备成功的解决了问题;一个民营肥皂厂的老总丢给一个工人300块钱,粗暴的说:“明天你要不把问题解决了就滚回家,拜来上班”。第二天,工人花了100元不到买了个风扇,空盒子经过风扇就吹走了,有肥皂的盒子顺利进入下一环节,因此问题也解决了。
有位西方古人说过书读多了就不聪明了。有时很怅惘,感觉高二以前的我很聪明,高二以后渐渐将自己思维程式化。如何创新,如何不致思维僵化,有很多需要思考的。
2362

被折叠的 条评论
为什么被折叠?



