2016-09-27 44 views
0

我正在学习用Martello算法的背包代码开始的bin包装问题。它在旧Fortran IV或66代码中写道。我在R-Forge发现了一个非常有趣的项目,名为Optimist(管理员Hans W. Borchers),通过R控制台,您可以调用它在Fortran 66中编写的子例程并运行它来检查结果。如果你想用更现代的语言编写代码并检查是否达到相同的结果,这是util。 我下载了R x64 3.3.1和Optimist软件包。 我不知道如何从R运行这个包。我说:调用Fortran中的子例程,输入数据并查看R IDE中的结果。Optimist R-Forge项目

有什么建议吗?

提前致谢。 爱德华

回答

0

原始马尔泰洛和托特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) 

然后您可以在例如背包功能上调用helpexample。目前实施的功能是knapsacksubsetsum。帮助页面将向您展示如何应用这些例程。 pw(利润和重量)必须是相等长度的整数值的矢量,与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”的其他代码尚未包装在“背包”包中。但如果你有兴趣,它可以很容易地完成。这些额外的例程正在解决垃圾箱打包,分配和改变问题。

+0

在R-Forge上,现在有一个包含函数'binpacking'的'knapsack'包的新版本0.3.0。它由Martello和Toth包装Fortran代码来解决垃圾箱装箱问题。我很感谢测试报告和其他类型的反馈。 –