Optimist R-Forge 项目
Optimist R-Forge project
我正在研究装箱问题,从 Martello 算法的背包代码开始。它用 Old Fortran IV 或 66 代码编写。我在 R-Forge 上发现了一个非常有趣的项目,调用 Optimist(管理员 Hans W. Borchers),通过 R 控制台,你可以调用它用 Fortran 66 编写的子例程,运行 它来检查结果。如果您想用更现代的语言编写代码并检查是否达到相同的结果,这很有用。
我下载了 R x64 3.3.1 和 Optimist 包。
我不知道如何 运行 来自 R 的这个包。我是说:调用 Fortran 中的子例程,输入数据并查看来自 R IDE.
的结果
有什么建议吗?
提前致谢。
爱德华多
原始的 Martello 和 Toth Fortran 例程在 Optimist R-Forge 项目的 'knapsack' 包中可用(not 在 '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 书中的其他代码尚未包含在 'knapsack' 包中。但如果您有兴趣,它可以很容易地完成。这些额外的例程正在解决装箱、分配和找零问题。
我正在研究装箱问题,从 Martello 算法的背包代码开始。它用 Old Fortran IV 或 66 代码编写。我在 R-Forge 上发现了一个非常有趣的项目,调用 Optimist(管理员 Hans W. Borchers),通过 R 控制台,你可以调用它用 Fortran 66 编写的子例程,运行 它来检查结果。如果您想用更现代的语言编写代码并检查是否达到相同的结果,这很有用。 我下载了 R x64 3.3.1 和 Optimist 包。 我不知道如何 运行 来自 R 的这个包。我是说:调用 Fortran 中的子例程,输入数据并查看来自 R IDE.
的结果有什么建议吗?
提前致谢。 爱德华多
原始的 Martello 和 Toth Fortran 例程在 Optimist R-Forge 项目的 'knapsack' 包中可用(not 在 '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 书中的其他代码尚未包含在 'knapsack' 包中。但如果您有兴趣,它可以很容易地完成。这些额外的例程正在解决装箱、分配和找零问题。