我发现这个例子非常有用,它实现了一个DP解决背包问题的代码(向发布者致敬)。您可以点击以下链接查看代码:https://codereview.stackexchange.com/questions/20569/dynamic-programming-solution-to-knapsack-problem。
我试图修改它以在背包中包含物品数量 k 的限制。
我添加了一个第三个参数。
并将重构修改如下:
只要我提供足够数量的选择项,这将始终收敛到所需的k个项目。然而,我相当确定这并没有找到全局最优解的最接近近似值。在一些搜索后阅读的讨论中,涉及添加第三个维度k,并在重建之前考虑约束条件(我认为这将在最佳值评估期间进行)。
有人能提供如何实现这一点的示例吗?理想情况下,一个可行的Python示例会很棒,但我会满足于伪代码。我已经阅读了一些使用符号表示法的指令,但我仍然不确定如何使用k进行约束(除了我在这里做的内容)。
谢谢!
我试图修改它以在背包中包含物品数量 k 的限制。
我添加了一个第三个参数。
def knapsack(items, maxweight, maxitems):
并将重构修改如下:
while i > 0:
if bestvalues[i][j] != bestvalues[i - 1][j] and len(reconstruction) < maxitems:
reconstruction.append(items[i - 1])
j -= items[i - 1][1]
i -= 1
只要我提供足够数量的选择项,这将始终收敛到所需的k个项目。然而,我相当确定这并没有找到全局最优解的最接近近似值。在一些搜索后阅读的讨论中,涉及添加第三个维度k,并在重建之前考虑约束条件(我认为这将在最佳值评估期间进行)。
有人能提供如何实现这一点的示例吗?理想情况下,一个可行的Python示例会很棒,但我会满足于伪代码。我已经阅读了一些使用符号表示法的指令,但我仍然不确定如何使用k进行约束(除了我在这里做的内容)。
谢谢!