R Scala中的BBOptim等效物或替代物

R Scala中的BBOptim等效物或替代物,r,scala,mathematical-optimization,R,Scala,Mathematical Optimization,我正计划将一些R代码转换为Scala,并实现了一个名为。它似乎是SPG的包装器,但由于对数学知之甚少,我不知道Scala中的等效代码是什么 例如,是否可以将下面的代码转换为Scala?或者有没有其他办法?我怀疑库中的SpectralProjectedGradient或非线性imimizer可能会被使用 # Use a preset seed so test values are reproducable. require("setRNG") old.seed <- setRNG(list

我正计划将一些
R
代码转换为
Scala
,并实现了一个名为。它似乎是
SPG
的包装器,但由于对数学知之甚少,我不知道
Scala
中的等效代码是什么

例如,是否可以将下面的代码转换为
Scala
?或者有没有其他办法?我怀疑库中的
SpectralProjectedGradient
非线性imimizer
可能会被使用

# 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)
#使用预设种子,以便可复制测试值。
要求(“设置”)

old.seed正如您所提到的,这个R库是光谱投影梯度算法的
spg
的包装器

非线性梯度优化的方法是用Fortran 77编写的,它与包括Java在内的多种语言都有接口。所有Java库都使用Scala,因此这应该是一个合适的解决方案。这一实现是几个关于光谱投影梯度的研究的重点


您还可以查看Java API以了解。如果您仅限于JVM(虽然不是最惯用的Scala),最安全的方法是从中选择合适的优化例程。这里没有您正在使用的精确解算器,但是通用解算器在我所抛出的大多数问题上都能很好地工作。您可能需要尝试几种不同的解决方案来获得一个合适的长方体约束——在墙附近设置一个尖锐的惩罚,然后在墙附近将搜索空间限制在这些曲面上


否则,使用从Scala调用R相当容易。这样你根本不需要改变算法。(但您必须安装R。)

作为一个补充说明,您可以在Scala中始终使用R。有多种方法可以做到这一点,包括建议@Hack-R的
jvmr
.thx。我已经查看了TANGO项目的链接,但它似乎只提供了
Fortran
C
Octave/Matlab
版本。我下载了错误的源吗??我确实选择了
SPG
@tkrhgch实际上它也适用于Java和R。只有一个moment@tkrhgch本文提到了非线性规划问题的“TANGO项目网页:”,用Fortran 77编写,并带有与R、AMPL、C/C++、CUTEr、Java、MATLAB、Octave、Python和TCL的接口它提到这是R中
BBOptim
中使用的确切函数。我肯定看到了Algencan方法的Java接口。如果您没有立即看到SPG,我会按照作者在其页面上提供的电子邮件或ping讨论组给作者发送电子邮件。感谢您的友好和描述性回复。但不幸的是,我找不到你在链接中提到的引用。我看错页了吗?它也没有提到关于R或BBOptim的任何内容。正如你提到的,这是网页吗??我查看了
Algencan
,但它也不包括Java接口。在
自述文件中
说明了
包含了与AMPL、C/C++和CUTEst的接口。
是我用于下载的网页。很抱歉我缺乏知识。thx@Rex-Kerr。我一直在想ApacheCommons的数学问题,但是你能给我指出一个我可能使用的函数吗?
org.apache.commons.math4.optim.nonlinear.scalar.gradient
是否最接近?或者这仅仅取决于你。我希望能够尽可能接近地重现
BBOptim
结果。@tkrhgch-我不太愿意建议任何特定的算法。它们有一个共同的界面;我建议您尝试几种方法,并与BBOptim和/或已知良好值的结果进行比较。(如果你不知道好的价值观,你应该马上开始担心!)。如果你想先试试Breeze的优化器,没什么害处。谢谢@Rex Kerr。正如你提到的,我将尝试这些方法并比较结果。谢谢你给我指点方向。