有许多商店s
提供a
不同价格的商品。商店可能不提供特定产品。商店可以相互连接(街道)。
任务是找到从(和返回)某个家庭位置的最佳路线(循环),以使总价格最小。总价是物品的价格和店铺之间的距离之和。
每个商店的物品价格都是已知的。无需访问商店即可获取此信息。
制约因素是:
- 买家/旅行者想要购买文章列表,可能是所有文章
- 每件商品至少在一家商店有售
- 商店之间的距离以成本表示,因此在计算一条路线的总成本时,可以简单地将其添加到购买物品的成本中
- 商店可以多次光顾,但这会增加旅行,因此会增加路线的总成本
我使用networkx进行了初始建模,将商店(和家庭)建模为有向图(距离/成本为权重),其中每个节点(商店)都包含其提供的产品的所有价格列表。
我的第一次尝试是创建一个蛮力解决方案,我通过迭代所有简单的循环成功了。然后,对于每个周期,我计算旅行成本和物品成本(即最低价格,因为它们出现在周期的商店中)。
现在上述工作,但不能扩展:枚举所有循环的时间复杂度是O((n+e)(c+1))
n 个节点、e 个边和 c 个基本电路(查找有向图的所有基本电路。DB Johnson,SIAM Journal on Computing 4,否. 1, 77-84, 1975 )。并且周期(电路)的数量增长很快:
# random 'streetlike' shop-graphs
number of shops: 3, cycles: 2
number of shops: 4, cycles: 11
number of shops: 5, cycles: 11
number of shops: 6, cycles: 60
number of shops: 7, cycles: 229
number of shops: 8, cycles: 868
number of shops: 9, cycles: 1399
number of shops: 10, cycles: 61139
number of shops: 11, cycles: 60066
number of shops: 12, cycles: 1246579
number of shops: 13, cycles: 7993420
对于更具可扩展性的问题描述有什么建议吗?我正在考虑动态或线性编程解决方案,但我很想听听想法。
更新:找到关于该主题的完整博士论文:ftp: //tesis.bbtk.ull.es/ccppytec/cp181.pdf