【问题标题】:Optimist R-Forge project乐观主义者 R-Forge 项目
【发布时间】:2016-09-27 19:28:56
【问题描述】:

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

有什么建议吗?

提前致谢。 爱德华多

【问题讨论】:

    标签: r-forge


    【解决方案1】:

    Optimist R-Forge 项目的“背包”包中提供了原始的 Martello 和 Toth Fortran 例程(而 在“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 书中的其他代码尚未包装在“背包”包中。但如果你有兴趣,它可以很容易地完成。这些额外的例程正在解决装箱、分配和更改问题。

    【讨论】:

    • 在 R-Forge 上,现在有一个新版本 0.3.0 的“背包”包,其中包含函数 binpacking。它包装了 Martello 和 Toth 的 Fortran 代码,用于解决装箱问题。感谢您提供测试报告和其他类型的反馈。
    猜你喜欢
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 2018-01-14
    • 2021-08-02
    • 1970-01-01
    相关资源
    最近更新 更多