求点拨: N 个商品, M 种发货渠道,寻找最优解?

2018-05-23 14:39:56 +08:00
 timchou
实际中遇到一个实际场景,想了半天没想到合适的方式,有没有算法达人点拨下?

场景是电商发货中,每个商品都有多种的发货渠道,每种渠道的价格不同,然后还有各种包裹限制,所以需要综合判断,选择一个最优的发货方式:

1.有 n 个商品,每个商品有:
a.价格 price
b.重量 weight
c.税率 tax

2.有 m 种渠道,每个渠道都有如下几个属性:
a.首重成本 x 元(假设首重指的是 1kg)
b.续重成本 y 元 /kg
c.单个包裹重量上限 L1
d.单个包裹价值上限 L2
e.单个包裹税金上限 L3

现在要对这些商品进行拆分,寻找最优拆分方式,要求:
1.成本价最低
2.单个包裹不能超过上述的限制 L1\L2\L3,也就是说一旦超过后,则需要另外起一个包裹。


最简单的方式是把所有的可能性都摆出来,然后一一计算,选一个最优的,但是 n 和 m 一多的话,计算量就很大。。

不知道有什么合适的算法可以处理这种问题吗?

ps1:
之前还想这么做:m 个渠道就是 m 个 slot,然后对每个商品,计算该商品丢到各个 slot 后,总的成本价分别是多少,然后选择一个最便宜的丢进去,但是实际上这个每个渠道是由首重+续重来确定费用的,因此商品丢到这个 slot 后,可能当前是最便宜的,但是最终结果不一定,比如渠道 1:首重很便宜,但是续重很贵;渠道 2:首重很贵,但是续重很便宜。。
2714 次点击
所在节点    程序员
24 条回复
winglight2016
2018-05-23 19:37:39 +08:00
楼主这个业务规则还是有点模糊:一个商品/包裹,是单独计算费用,还是和其他商品/包裹(同一渠道)合并计算费用?

如果是合并计费,那可就复杂了,毕竟还有价值、税金上限,这个逻辑很难在通用算法中体现出来
winglight2016
2018-05-23 19:54:55 +08:00
忽然发现之前想得复杂了,应该有更简单的方法:
1.排一个表格,包括:1 ~ 10 公斤(假设全渠道重量上限最小值),分别对应 m 个渠道的价格
2.根据这个表格排序渠道优先级(基于全部商品重量)
3.顺序填满 m 个渠道的 slot
可能三个约束值会影响实际排序,不过,这是个权重问题,假设首重和续重的高权重超过 0.9,那就可以忽略吧
startar
2018-05-23 20:18:26 +08:00
典型的线性规划问题。很多回复里自己设计的方案大概率是错的。建议楼主搞本运筹学看看。
cdcx
2018-05-24 13:40:57 +08:00
@startar 现在讨论的问题,不是算不出最优解的问题. 而是如何提高效率的问题.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/457149

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX