2016-09-27 29 views
0

Martelloアルゴリズムのナップザックコードで始まるビンのパッキング問題を抱えています。それはOld Fortran IVまたは66のコードで書いています。私はR-ForgeのOptimist(管理者Hans W. Borchers)という非常に興味深いプロジェクトを、RコンソールでFortran 66で書かれたサブルーチンを呼び出して実行して結果を確認できることを発見しました。これは、より現代的な言語でコードを記述し、同じ結果に到着しているかどうかをチェックしたい場合に便利です。 R x64 3.3.1とOptimistパッケージをダウンロードしました。 Rからこのパッケージを実行する方法がわかりません。私は言っています:Fortranでサブルーチンを呼び出し、データを入力し、R IDEから結果を表示します。オプティミストR-Forgeプロジェクト

提案がありますか?

ありがとうございます。

エドゥアルド

答えて

0

原マーテロとTothのFortranのルーチンは、オプティR-フォージプロジェクト(および「アダージョ」パッケージでない)の「ナップサック」パッケージで入手可能です。残念ながら、これらの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と呼ぶことができます。現時点で実装されている関数は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コードをラップします。レポートやその他のフィードバックをテストすることに感謝します。 –

関連する問題