2016-09-27 34 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代碼來解決垃圾箱裝箱問題。我很感謝測試報告和其他類型的反饋。 –