0

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

有什么建议么?

预先感谢。爱德华多

4

1 回答 1

0

最初的 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)

然后你可以调用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

还有subsetsum 例程。Martello 和 Toth 书中的其他代码尚未包装在“背包”包装中。但如果你有兴趣,它可以很容易地完成。这些额外的例程正在解决装箱、分配和更改问题。

于 2016-09-28T13:30:18.303 回答