原始马尔泰洛和托特Fortran例程在乐天派R-Forge项目(和不在“柔板”封装)的“背包”封装。不幸的是,这些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
还有子集例程。 “Martello”和“Toth”的其他代码尚未包装在“背包”包中。但如果你有兴趣,它可以很容易地完成。这些额外的例程正在解决垃圾箱打包,分配和改变问题。
在R-Forge上,现在有一个包含函数'binpacking'的'knapsack'包的新版本0.3.0。它由Martello和Toth包装Fortran代码来解决垃圾箱装箱问题。我很感谢测试报告和其他类型的反馈。 –