使用A *解决无界背包

时间:2013-07-21 18:21:35

标签: algorithm computer-science graph-algorithm

我正在努力调和两个看似矛盾的想法:

  1. 无界背包优化问题已知为NP-hard
  2. 我的同事和我认为我们可以使用A *
  3. 在多项式时间内解决它的微小变化

    听起来很疯狂吧?这就是我的想法!

    问题的变化是根据货机必须卸载其部分货物以便将其有效载荷减少到飞机的容量来描述的。因此,有一组物品,每个物品都有一个重量和一个值,以及必须卸载的目标重量 - 优化货物卸载,以便至少移除W重量,并最大限度地减少货物的总价值。考虑无限问题,其中N种不同类型中有任意多项可用。

    建议的解决方案使用一个图表,该图表从一个节点(顶点)开始,表示没有卸载。每个卸载操作都代表一个边缘,因此图表从起点开始指数增长,每个可能的卸载货物组合。目标节点是虚拟聚合,因为具有总权重> =目标的所有组合被认为是目标节点。到目前为止卸载的总重量存储在每个节点中,并用于确定是否已达到目标。每个边的成本是要卸载的项的值。因此,诸如Dijkstra或A *之类的最短路径算法将找到最佳的商品集。

    Dijkstra显然需要指数时间,因为它正在探索所有可能的组合。但是有了可接受的启发式算法,我认为A *应该在多项式时间运行。我认为以下启发式应该有效。对于每种商品,计算“特定值”,即价值与权重的比率。选择具有最高特定价值的商品。作为给定节点的启发式算法,计算仍需要卸载的权重乘以最大特定值。这提供了在目标重量可以通过整数个最佳货物实现的情况下完全正确的估计,或者在所有其他情况下低估了剩余的距离(重量),因为实际的货物数量需要被舍入起来。所以启发式是可以接受的。

    我没有以任何严格的方式证明运行时的复杂性。但是A *的工作方式,它会贪婪地向目标添加项目,快速探索最佳选项,直觉上感觉它应该在N的多项式时间内运行。并且通过适当允许的启发式,解决方案可以保证最佳。< / p>

    这个解决方案有什么问题?我绝对不相信我们通过应用一个众所周知的算法找到了一个新的解决方案来解决一个研究得很好的问题。但这似乎应该有用。

1 个答案:

答案 0 :(得分:2)

这听起来像背包的标准分支和绑定方法。当比率变化时它很好,但当比率相同时,它会转向指数时间的强力。

相关问题