我已经计算了美国邮政编码级别的空卡车每日供应量和空卡车每日需求的估计值。我想优化供需路线,以最大限度地减少总行驶距离。我将使用该结果来计算每个邮政编码中单位需求所需的平均重新定位里程。
以下是有关该问题的一些附加信息:
- 大约有 29,000 个邮政编码供需。
- 我想改变必须满足的最低要求,但它总是接近 100%。
- 不需要 100% 的最佳解决方案。
- 我想每月在一个 ruby 程序中解决这个问题。
- 求解速度并不是非常重要。
我应该如何表述问题?
我已经计算了美国邮政编码级别的空卡车每日供应量和空卡车每日需求的估计值。我想优化供需路线,以最大限度地减少总行驶距离。我将使用该结果来计算每个邮政编码中单位需求所需的平均重新定位里程。
以下是有关该问题的一些附加信息:
我应该如何表述问题?
既然你说你有所有节点之间的距离,一种可能性是线性规划。制定该计划将是相当直接的。您的目标是最小化,其中是从节点 i 发送到节点 j 的卡车数量,而是距离。您将只有两个约束。第一个约束条件是表明从所有来源到节点 j 的卡车数量大于 j 处的需求。您可以为每个节点的供应制定类似的约束。
线性规划方法也可以保证为您提供全局最优,但上述公式存在一个明显的问题。您的决策变量是每对节点的整数。这会将您的 29,000 个节点变成近 900,000,000 个决策变量,这并不是一个微不足道的计算问题。当然你可以做一些事情,比如删除距离超过某个阈值的对,这可以大大减少问题的大小,但会使实现更加复杂。
另外,对于线性编程,我不知道 ruby 中有哪些接口。我个人学习了使用 glpk(免费求解器)和 pyomo(python 框架)。维基百科页面有一个很好的不同免费库列表。