元の 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 関数などでhelp
orを呼び出すことができます。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
これで、knapsack 関数を呼び出して結果を表示できます。
> res = knapsack(p, w, cap)
> res
# [1] 1 2 3 4 6
また、subsetsum ルーチンもあります。Martello と Toth の本の他のコードは、まだ「ナップザック」パッケージに包まれていません。しかし、興味があれば簡単にできます。これらの追加ルーチンは、ビンのパッキング、割り当て、および変更作成の問題を解決しています。