问题标签 [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.
segmentation-fault - 使用 OpenMP 和外部库的 Fortran90 分段错误
我已经上下搜索寻找有关此问题的帮助,尝试了各种解决方案等,但似乎无法追踪问题。我正在尝试并行化一个 do 循环,其中包含对 NLopt 库中优化例程的调用(对于 NLOpt,请参见:http ://ab-initio.mit.edu/wiki/index.php/NLopt )。这是我正在尝试做的一个玩具示例(真正的问题要复杂得多,额外调用更新参数的子例程calfun
):
我已经按照本文档进行了故障排除:
https://software.intel.com/en-us/articles/determining-root-cause-of-sigsegv-or-sigbus-errors
我还尝试在这篇文章之后重置堆栈大小:
上面的编译和运行正确使用gfortran
如下:
当我添加 OpenMP 标志时,它也会编译:
但是,即使在设置后(在 Mac OSX 上运行),我也会收到分段错误
使用回溯进行编译只会显示选项卡错误和 NLOpt 包中未使用的虚拟参数。我不知道如何进行,真的需要并行化这个操作。我是否需要手动进入 NLOpt 例程并使用threadprivate
?我似乎找不到关于此的好的文档。欣赏任何见解...
(PS:这是我的第一篇 Stackexchange 帖子。这些年来我一直是一个狂热的读者。对我放轻松!!谢谢!)
c++ - 即使 {x,f}tol_{rel,abs} 都设置为 0,nloptr 优化也会在 maxeval 步骤之前停止
我正在查看nloptr 手册中给出的示例。
我将代码的最后一部分替换为
也就是说,我将主求解器和局部求解器的 xtol/ftol rel/abs 都更改为 0。注意它们都使用基于梯度的算法。我还将最大步数从 1k 增加到 100k。
然而,求解器在 3k 步处终止得更早。
调用:nloptr(x0 = x0,eval_f = eval_f,lb = lb,ub = ub,eval_g_ineq = eval_g_ineq,eval_g_eq = eval_g_eq,opts = opts)
使用 NLopt 版本 2.4.2 进行最小化
NLopt 求解器状态:3(NLOPT_FTOL_REACHED:优化停止,因为达到了 ftol_rel 或 ftol_abs(上图)。)
迭代次数....:3132 终止条件:xtol_rel:0 ftol_rel:0 ftol_abs:0 xtol_abs:0 maxeval:1e+05 不等式约束数:1 等式约束数:1 目标函数的最优值:17.0140172891563 最优值控制数量:1 4.743 3.82115 1.379408
查看nlopt 的 c++ 实现,这似乎不应该发生。各种公差等级给出的终止条件是严格不等式的。所以我是否遗漏了求解器状态“NLOPT_FTOL_REACHED:优化停止,因为达到了 ftol_rel 或 ftol_abs(上)”的含义。?
谢谢!约翰
windows - 在 Windows 上通过 Visual Studio 在 Fortran 项目中使用 Nlopt 库
我一直在我的 Fortran 项目中使用NLopt 库,在 Linux 系统下运行它没有问题。现在我刚刚开始在 Windows 上使用 Visual Studio 来编写我的 Fortran 程序。但是,我在 Windows 上使用 NLopt 库时遇到了一些困难。我在我的计算机上使用 Visual Studio 2013 和 Intel Parallel Studio XE 17。
以下是我所做的以及遇到的问题:
我从其网站下载了 NLopt 库的 Windows 版本(64 位)。然后我使用开发人员命令提示符来执行 VS,
lib /def:libnlopt-0.def \MACHINE:x64
并在同一文件夹下创建一个 .lib 和 .exp 文件。我在 Visual Studio 中创建了一个 Fortran 项目,并使用了在 Linux 下运行的代码。在 Visual Studio 中,我将 .lib 和 .exp 的路径添加到项目属性的“附加包含目录”和“附加库目录”中。我还在“附加依赖项”中添加了“libnlopt-0.lib”和“libnlopt-0.exp”。
当我编译项目时,它失败并出现错误:
/li>然后我按照[这里](http://nlopt-discuss.ab-initio.mit.narkive.com/M3vzZMYA/nlopt-linked-to-intel-fortran-compiler-for-windows)的建议并添加
/li>/names:lowercase
到命令中行,现在它编译得很好,但有一个警告:虽然它编译得很好,但我仍然无法运行我编译的代码。当我运行它时,我的电脑告诉我
This APP cannot run on your PC. To find a version for your PC, check with the software published
. 然后显示命令窗口Access denied
,然后程序停止。
我真的不知道接下来我该怎么做才能使我的代码正常工作。我知道有很多人在 Windows 中使用 NLopt。
r - nloptr: lbfgs() 在进行优化时是否需要显式提供梯度函数?
在nloptr
包中,类似的函数lbfgs()
似乎需要一个渐变函数。但如果我不提供渐变功能,它们也可以工作。
我的问题是:是nloptr
自动计算梯度函数,还是lbfgs()
不需要梯度函数?
如果目标函数很复杂,可以nloptr
自动计算梯度函数,还是必须由用户提供?
r - R:nloptr 包:**linear** 目标函数和 **linear** 约束函数都可以处理,对吧?
我正在使用 nloptr。当我阅读手册时,它说:g(x)
并且h(x)
是非线性不等式和等式约束。
可以g(x) <=0
和h(x) = 0
分别是线性不等式和等式约束吗?
或者线性约束只是special case
非线性约束中的一个?
我注意到:在 auglag() 函数的示例中,heq
属于线性等式约束,因此对于nloptr
,线性约束应该是可以的。由此,即使对于目标函数,该函数也可以是线性的。如果我的理解不正确,请纠正我。
谢谢。
python - NLopt最小化特征值,Python
我有矩阵,其中元素可以定义为算术表达式,并编写了 Python 代码来优化这些表达式中的参数,以最小化矩阵的特定特征值。我曾经scipy
这样做过,但想知道是否有可能,NLopt
因为我想尝试更多它拥有的算法(无衍生变体)。
在scipy
我会做这样的事情:
在 NLopt 我试过这个:
这将返回:
NLopt 能够处理这个问题吗?
r - R:具有等式约束的非线性优化
我有一个TxN
矩阵M
和一个Nx1
权重向量w
,其中sum(w)=1
。
我需要找到w
,它使 中的正元素的数量最大化Mw
。
如果没有单个w
,则 Mw
需要最大可能值。
更正式地说,用 -row in 表示M_t
,t
那么M
我需要
其中1
是 1 的向量,如果为正,则函数I(x)
返回,否则返回。1
x
0
注意:如果将目标函数除以T
,则和可以被认为是随机变量加权和的频率。
数据可以模拟如下:
目标函数和约束为:
现在在 R 中,一种可能性可能是nloptr:
我得到:
NLopt求解器状态:-4(NLOPT_ROUNDOFF_LIMITED:舍入错误导致优化算法崩溃。在这种情况下,返回的最小值可能仍然有用。
迭代次数......:17530
终止条件:xtol_rel:1e-07 maxeval :1e+05
[...]
目标函数的当前值:-33
控件的当前值:0.5175225 0.1124845 0.1598906 0.2101024
请注意,17530 次迭代远远少于 maxeval (100000)。
我不知道如何正确使用 NLOPT_GN_ISRES
,这可能会提高速度。替换NLOPT_LN_AUGLAG_EQ
为NLOPT_GN_ISRES
:
NLopt 求解器状态:-2(NLOPT_INVALID_ARGS:无效参数(例如,下限大于上限,指定了未知算法等)。)
我是 nloptr 的新手,所以我想知道接下来会发生什么。
据我了解,我对f
(-33) 的结果是可靠的,容差为 1.0e-7。这个对吗?
我如何说明值是否w
是唯一的?
的语法是NLOPT_GN_ISRES
什么?
目标f
包含一个隐式if
条件,我仍然可以使用(数字)梯度吗?
其他软件包(例如阿拉巴马州)是否更擅长此类问题?
更新将起点更改为w
.
r - NLoptr 在 Mac 上安装失败:无法加载共享对象
我正在尝试在 Mac OS High Sierra 上安装软件包 nloptr 以使用许多不错的软件包,例如 lme4,并且我在 Anaconda 中使用 RStudio 和 R 3.4.2。我也安装了NLopt(从NLopt网站下载,不是开发版。我也安装了Xcode命令行工具。但是我仍然无法安装nloptr,并得到这个
我已经在网上搜索了要做什么,并且确实将安装 NLopt 的路径添加到/etc/ldpaths
文件中的 LD_LIBRARY_PATH 中,但我仍然得到同样的错误。是的,我遇到了与Trouble installation nloptr package on R 3.3.0中相同的问题,但我没有找到适用的解决方案,因为提出这个问题的人自己解决了这个问题,我不知道他什么时候说的他说“以root身份安装”。任何人都可以帮忙吗?
另外,在使用 CMake 安装 NLopt 时,我得到了类似的东西,这发生在许多不同的功能上:
这就是没有加载库的原因吗?
顺便说一句,我已经安装了 Rcpp 并对其进行了更新。Rcpp 在我的电脑上工作。
更新:我将默认的 C 和 C++ 编译器更改为从 R 项目下载的 clang4。我再次尝试安装,并得到一个不同的错误:
我试图告诉 R 图书馆在哪里Sys.geteng(DYLD_LIBRARY_PATH = "/usr/local/lib")
,但它没有用。根据我从安装中得到的消息,实际上 R 确实知道共享库在哪里,但它就是无法加载它。请帮忙!
r - 无法在没有 root 权限的集群上安装 nloptr / nlopt
我正在尝试安装(在基于 linux 的集群上)R 包 FactoMineR,它需要 nloptr,而后者又需要 nlopt。仅使用install.packages("nloptr")
不起作用并产生以下错误:
此时 R 冻结并且必须重新启动。因此,我尝试手动安装 nlopt 并按照官方网站上的指南进行操作。我将所有内容都安装在我的主文件夹中,因为我在集群上没有 root 权限。nloptr 安装仍然失败,同样的错误是找不到 nlopt。这个问题似乎是一样的,但使用
仍然产生相同的错误。
该文件夹$HOME/include
包含这些文件:nlopt.f nlopt.h nlopt.hpp
并$HOME/lib64
包含以下内容:cmake/ libnlopt.so@ libnlopt.so.0@ libnlopt.so.0.9.0* pkgconfig/ python2.7/
.
我已经重试了几次,在相关问题上使用了其他几个技巧,但到目前为止没有任何效果,任何提示都将不胜感激。谢谢!
编辑:有人有想法吗?
eclipse - Eclipse Phortran 中的 NLopt 库导入
我正在使用 Eclipse Phortran 对 Fortran 2008 进行编程。我需要实现 NLopt 优化器并下载NLopt for Windows (64bit)。
不幸的是,即使在搜索此论坛和其他论坛之后,我也无法运行库导入。
我有以下由 NLopt 提供的为 Windows 准备的 文件:来自 NLopt 下载的文件
我必须在 Eclipse 中链接哪些文件?正如我在其他线程中发现的那样,我必须在这里实现库和路径: Eclipse library linker 但是,到目前为止我没有尝试过任何工作。如果你能给我一个小教程,那就太好了。