如何在R中使用NLopt 2.4.2旧版本以复现代码结果
问题描述
我尝试复现一段使用nloptr函数的代码,当前使用的NLopt版本为2.7.1,输出结果如下:
# optimization result opt_result Call: nloptr(x0 = theta_init, eval_f = obj, eval_grad_f = grad, lb = lb, ub = ub, opts = opts) Minimization using NLopt version 2.7.1 NLopt solver status: 4 ( NLOPT_XTOL_REACHED: Optimization stopped because xtol_rel or xtol_abs (above) was reached. ) Number of Iterations....: 15 Termination conditions: xtol_rel: 0.001 maxeval: 10000 Number of inequality constraints: 0 Number of equality constraints: 0 Optimal value of objective function: 121997.975378908 Optimal value of controls: 10.04425 52.50066 1 0.218371
但原代码使用的是NLopt 2.4.2版本,我希望切换至该旧版本以得到完全一致的计算结果,请问是否有可行方法?
可行解决方案
以下是切换到NLopt 2.4.2版本的具体方法:
安装对应版本的
nloptr包
NLopt 2.4.2对应的R包版本是nloptr_1.2.2.2,先从CRAN归档页面下载该版本的源码包(.tar.gz格式),然后在R中执行本地安装命令:install.packages("本地路径/nloptr_1.2.2.2.tar.gz", repos=NULL, type="source")安装前需确保本地有编译环境:Windows需安装Rtools,macOS需安装Xcode命令行工具,Linux需安装gcc等基础编译依赖。
防止包被自动更新
安装完成后,为避免后续更新时覆盖旧版本,可设置跳过nloptr的更新:update.packages(ask = TRUE, exclude = "nloptr")也可以全局设置优先使用源码包安装(避免自动拉取最新二进制包):
options(pkgType = "source")验证版本切换成功
重启R会话后,加载包并检查NLopt版本:library(nloptr) print(nloptr:::nloptr_version())若输出结果为
2.4.2,则说明版本切换完成。特殊情况处理
如果编译源码包时出现依赖问题,可手动下载NLopt 2.4.2的C++源码,编译安装到系统后,再重新安装对应的nloptrR包。
内容的提问来源于stack exchange,提问作者Jorge Paredes
相关产品推荐
相关产品推荐

