问题标签 [nlopt]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 如何在 Rcpp 包中直接从 nloptr 包中调用 C 函数?
我正在使用 RcppArmadillo 创建一个包含 c++ 代码的 R 包。其中一个功能需要优化一个功能。目前,我将nloptr::nloptr
函数导入c++,然后用它来优化函数。代码在这里:https ://github.com/daijiang/phyr/blob/master/src/pglmm_gaussian.cpp#L267-L282 ;也是第 244-245 行。
因为 的主干nloptr::nloptr
是用 C 编写的,所以在 c++ 中调用 R 函数似乎不是最好的方法,并且可能会减慢速度。理想情况下,我们应该直接在 c++ 文件中调用它的 C 函数。但鉴于我对 c/c++ 的经验非常有限,我不知道该怎么做。谁能帮我这个?谢谢!
url - Travis-CI 错误:安装 nloptr pkg(r pkg 检查)
我尝试使用 travis-ci 来检查我的 r 包是否正确。我的包应该导入 r pkg nloptr
。并且 travis-ci 将在 "r": "oldrel" 分支中给出错误。我在这里显示错误:
c++ - 在 cpp 中使用带有 nlopt 库的目标函数
所以我试图用nlopt库解决一个非线性方程。我创建了一个名为 Optimizer 的类。在这个类中,我试图构建我需要的所有函数(目标函数、约束)。我的目标函数定义如下:
现在我想调用一个方法 Optimizer::optimize(),然后设置 nlopt 算法启动的所有约束和要求。我在用着:
这是我得到一个编译错误的地方,我无法解释。
参数类型不匹配:函数类型中的参数数量不兼容
我尽量坚持使用教程,但为什么会出现这个错误?
r - NLopt / nloptr 设置和输出
我有两个关于NLopt的问题和一个关于NLoptnloptr
的 R 接口的问题。在具体方法上,我的目标是基于梯度的方法,例如“BFGS”。
非线性选择:
- 你如何选择终止标准?特别是,您如何决定是专注于 xtol、ftol 还是两者兼而有之,然后您将如何决定您选择的特定值/值。
- NLopt 状态“NLOPT_SUCCESS = 1(通用成功返回值。)”是什么意思?如果既没有达到 xtol 也没有达到 ftol 怎么能成功终止呢?
nloptr
:
- 如何将梯度的数量 M 更改为“记住”先前“L-BFGS”优化步骤中的“记忆”?我找不到原始
C
代码中使用的“nlopt_set_vector_storage”。
r - 在 R 中复制 GRG 非线性优化
我正在尝试使用 nloptr 从 R 中的 excel 求解器中复制 GRG 非线性优化问题,但结果与它相去甚远。有没有人尝试过同样的方法?
我也尝试了solnp,但没有运气。请分享包信息以获得与 excel GRG 非线性优化相同的结果。
c++ - 关于点到线的非线性优化
我正在尝试通过 nlopt c++ 库解决非线性优化问题。但结果似乎与matlab不同。优化问题如下:
我在 3-D 坐标 $l_i(x, y, z)$ 中有多个相交线。我想找到一个点 $(x_0, y_0, z_0)$ 来最小化从该点到所有这些线的距离。也就是说,... 问题的详细描述在图片中。
python - 为什么 NLopt 找不到全局最小值?
我正在使用NLopt(python 包装器)对Egg holder 函数进行全局优化(范围 x_i = [-512, 512]。
我正在使用 GN_ORIG_DIRECT 无梯度算法,这是一种全局优化算法。我发现我的优化在最小值 (-935.337) 处停止,接近 Egg holder 函数页面上提到的全局最小值(谷)(对于 x,y = 512、404.2319,最小值 = -959.647)。如果我使用任何随机猜测(远离甚至接近全局最小值),算法将稳定在 -935.337。如果我使用接近全局最小值的初始猜测,但使用局部最小值算法,那么只有算法收敛到全局最小值。这表明该算法可以找到全局最小值。我不知道出了什么问题。我错过了什么吗?
图中绿点(左)是全局最小值,靠近它的红点(右)是优化后找到的。背景中的点是远离两者的初始猜测。
任何人都可以提出这样的问题可能是什么原因?我没有使用任何约束。
感谢您的建议!
编辑:我尝试了其他 1 个变量函数,我可以找到最小值。我还尝试了Drop-Wave函数,算法收敛到正确的值。
r - 将数据传递给 Rcpp 中的 nlopt?
这是一个相当简单的问题,但我还没有在网上找到答案。
希望我的最新尝试,这是最新的编译器输出:注意:候选函数不可行:没有已知的从 'double (unsigned int, const double *, void *, void )' 到 'nlopt_func' 的转换(又名 'double ( )(unsigned int, const double *, double *, void *)') 用于第二个参数
从这个错误中,我推测我现在正在正确包装或“类型转换”数据参数以及参数向量。第三个输入(梯度)之间的差异让我感到困惑。正如我所说的无梯度优化程序。
这是一个带有常数和变量的简单线性回归:
r - 带有 Rcpp 和 nloptr 的 R 包
我一直在构建一个运行 RcppParallel 并从 cpp 并行调用 nloptr 的 r 包。目前,由于找不到“nloptrAPI.h”文件,该包将无法构建。
构建日志输出: * 检查 R 代码中的依赖关系... 注意 Imports 字段中的命名空间不是从以下位置导入的:'RcppArmadillo''nloptr'</p>
我的问题是是否有一个简单的解决方法。或者,如果我必须重写函数以从 cpp 版本调用“nlopt”并将“makevars”文件添加到包中。
src 仅包含我编写的函数和生成的 RcppExports。
binary - 以 .a 和 .la 结尾的文件是什么意思?
我知道文件结尾对于 linux 上二进制文件的功能并不重要,但我想知道我从Nlopt遇到的两个文件结尾的含义
libnlopt.a 和 libnlopt.la 知道这些结尾是什么意思吗?我找到了这个资源,但它没有列出提到的结尾。
我想知道,因为我想弄清楚 libnlopt.a 是否是用 -fPIC 构建的,因为按照这里的第一个答案,库不是用 -fPIC 构建的,这很奇怪,因为在构建时我添加了选项到 ./configure(由 nlopt 提供)--with-pic。所以我想知道文件结尾是否意味着我必须走不同的路线才能确定它是否是用 -fPIC 构建的?