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 プロジェクトの「knapsack」パッケージで利用できます ( 「adagio」パッケージでは利用できません)。残念ながら、これらの Fortran コードは CRAN を介して配布することはできません。その理由は、GPL と互換性がなく、ACM ライセンスの下で公開されているためです。私は Silvano Martello 教授にライセンスを変更する意思があるかどうか尋ねましたが、彼はそうすることができなかった、またはしたくありませんでした (彼ははっきりと私に言いました)。

手始めに、R または R と RStudio をインストール済みだと思います。R を起動したら、最初にパッケージを 1 回インストールし、R を新たに起動するたびにそれをロードする必要があります:

> install.packages("knapsack", repos="http://R-Forge.R-project.org")
> library(knapsack)

次に、knapsack 関数などでhelporを呼び出すことができます。example現在実装されている機能はknapsacksubsetsumです。ヘルプ ページには、これらのルーチンの適用方法が示されています。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

これで、knapsack 関数を呼び出して結果を表示できます。

> res = knapsack(p, w, cap)
> res
# [1]  1 2 3 4 6

また、subsetsum ルーチンもあります。Martello と Toth の本の他のコードは、まだ「ナップザック」パッケージに包まれていません。しかし、興味があれば簡単にできます。これらの追加ルーチンは、ビンのパッキング、割り当て、および変更作成の問題を解決しています。

于 2016-09-28T13:30:18.303 に答える