2016-09-23 5 views
1

Rコードの一部をScalaに変換する予定で、BBOptimという関数がありました。 SPGのラッパーであると思われますが、数学についての知識はほとんどありません。Scalaに相当するコードは何か分かりません。BBOptimはScalaで同等か代替のものです

たとえば、以下のコードをScalaに変換できますか?あるいはこれに代わる方法がありますか?私は、SpectralProjectedGradientまたはBreezeライブラリのNonLinearMinimizerが使用されていると思われます。

# Use a preset seed so test values are reproducable. 
require("setRNG") 
old.seed <- setRNG(list(kind="Mersenne-Twister", normal.kind="Inversion", 
    seed=1234)) 

rosbkext <- function(x){ 
# Extended Rosenbrock function 
n <- length(x) 
j <- 2 * (1:(n/2)) 
jm1 <- j - 1 
sum(100 * (x[j] - x[jm1]^2)^2 + (1 - x[jm1])^2) 
} 

p0 <- rnorm(500) 
BBoptim(par=p0, fn=rosbkext) 

ありがとうございます。

編集

私だけJVMを使用して制限していますのでScalaからRを呼び出しても可能ではありません。

+0

ちょっとしたこととして、Scala内では常にRを使うことができます。これには 'jvmr'を含む複数の方法があります。アドバイス@Hack-Rのための –

答えて

1

このRライブラリは、spgのラッパーです。これは、スペクトラル投影勾配アルゴリズムです。

TANGO projectによる非線形グラジエント最適化のためのSPG implementationは、Javaを含む多くの言語へのインタフェースを備えたFortran 77で記述されています。すべてのJavaライブラリはScalaで動作します。したがって、これは適切なソリューションでなければなりません。この実装は、Spectral Projected Gradientsにいくつかのacademic articlesの焦点です。

また、Open Optimization LibraryのJava APIをチェックアウトすることもできます。

+0

thx私はTANGOプロジェクトのリンクを見てきましたが、 'Fortran'、' C'、Octave/Matlabのバージョンしかないようです。間違ったソースをダウンロードしていますか?私は 'SPG'を選択した。 – tkrhgch

+0

@tkrhgch実際にはJavaとRにも対応しています。 –

+0

@tkrhgch非線形のプログラミングでは、「TANGOプロジェクトのWebページ:http://www.ime.usp.br/~egbirgin/tango/」と書かれています。プログラミングは ですFortran 77でコード化された問題と、R、AMPL、C/C++、 CUTEr、Java、MATLAB、Octave、Python、およびTCLのインタフェースで記述されています。 "*これは文字通り' BBOptim' R.私はAlgencanメソッドのためのJavaインターフェイスを確実に見ています。オフラインでSPGを見ることができない場合は、著者が自分のページで提供した電子メールかディスカッショングループにpingしてメールを送ります。 –

0

最も慣れ親しの国のScalaではなく、JVMに限定されている場合は、Apache Commons Mathから適切な最適化ルーチンを選ぶのが最も安全です。あなたが使っている正確なものはありませんが、一般的なソルバは、私がそれらに投げたほとんどのクラスの問題ではうまく機能します。適切なボックスの制約を得るには、いくつかの異なるクラスのソリューションを試してみる必要があります。壁の近くで急なペナルティを加え、壁の近くにいる場合は、検索スペースをそれらのサーフェスに制限します。

それ以外の場合は、rScalaを使用してScalaからRを呼び出すのはかなり簡単です。そうすれば、アルゴリズムをまったく変更する必要はありません。 (しかし、あなたはRをインストールしなければなりません)

+0

thx @Rex Kerr。私は** Apache Commons Math **については疑問に思っていましたが、おそらく私が使うことのできる関数を指し示すことは可能でしょうか? 'org.apache.commons.math4.optim.nonlinear.scalar.gradient'が最も近いでしょうか?それともそれだけで依存していますか?私は 'BBOptim'の結果を可能な限り再現できるようにしたいと思います。 – tkrhgch

+0

@tkrhgch - 特定のアルゴリズムを提案するのをためらっています。彼らは共通のインターフェースを持っています。私はいくつか試して、BBOptimや既知の良い値で結果を比較することをお勧めします。 (良い値がわからない場合は、すぐに心配してください!)。 Breezeのオプティマイザを最初に試してみたい方は、それに害はありません。 –

+0

ありがとうございます@レックスカー。あなたが言及したように、私はメソッドを試してみて、結果を比較します。私に指示を与えてくれてありがとう。 – tkrhgch

関連する問題