最初的 Martello 和 Toth Fortran 例程在 Optimist R-Forge 项目的“背包”包中提供(而不是在“adagio”包中)。不幸的是,这些 Fortran 代码不能通过 CRAN 分发。原因是它们是在 ACM 许可下发布的,与 GPL 不兼容。我问 Silvano Martello 教授是否愿意更改许可证,但他不能或不想这样做(正如他明确告诉我的那样)。
给你一个开始:我猜你已经安装了 R,或者更好的是,R 和 RStudio。当你启动 R 时,首先你必须安装一次包并在每次重新启动 R 时加载它:(你需要有一个可用的 Fortran 编译器,但我想你有。)
> install.packages("knapsack", repos="http://R-Forge.R-project.org")
> library(knapsack)
然后你可以调用help
或example
打开,例如,背包函数。目前实现的功能是knapsack
和subsetsum
。帮助页面将向您展示如何应用这些例程。p
和w
(利润和权重)必须是等长整数值的向量,具有p[i]/w[i]
严格递减的序列:
> p = c(15, 100, 90, 60, 40, 15, 10, 1)
> w = c( 2, 20, 20, 30, 40, 30, 60, 10)
> cap = 102
现在您可以调用背包函数并显示结果:
> res = knapsack(p, w, cap)
> res
# [1] 1 2 3 4 6
还有subsetsum 例程。Martello 和 Toth 书中的其他代码尚未包装在“背包”包装中。但如果你有兴趣,它可以很容易地完成。这些额外的例程正在解决装箱、分配和更改问题。