问题标签 [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.

0 投票
0 回答
290 浏览

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

我还尝试在这篇文章之后重置堆栈大小:

为什么此 openmp 代码中发生分段错误?

上面的编译和运行正确使用gfortran如下:

当我添加 OpenMP 标志时,它也会编译:

但是,即使在设置后(在 Mac OSX 上运行),我也会收到分段错误

使用回溯进行编译只会显示选项卡错误和 NLOpt 包中未使用的虚拟参数。我不知道如何进行,真的需要并行化这个操作。我是否需要手动进入 NLOpt 例程并使用threadprivate?我似乎找不到关于此的好的文档。欣赏任何见解...

(PS:这是我的第一篇 Stackexchange 帖子。这些年来我一直是一个狂热的读者。对我放轻松!!谢谢!)

0 投票
0 回答
1070 浏览

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(上)”的含义。?

谢谢!约翰

0 投票
1 回答
405 浏览

windows - 在 Windows 上通过 Visual Studio 在 Fortran 项目中使用 Nlopt 库

我一直在我的 Fortran 项目中使用NLopt 库,在 Linux 系统下运行它没有问题。现在我刚刚开始在 Windows 上使用 Visual Studio 来编写我的 Fortran 程序。但是,我在 Windows 上使用 NLopt 库时遇到了一些困难。我在我的计算机上使用 Visual Studio 2013 和 Intel Parallel Studio XE 17。

以下是我所做的以及遇到的问题:

  1. 我从其网站下载了 NLopt 库的 Windows 版本(64 位)。然后我使用开发人员命令提示符来执行 VS,lib /def:libnlopt-0.def \MACHINE:x64并在同一文件夹下创建一个 .lib 和 .exp 文件。

  2. 我在 Visual Studio 中创建了一个 Fortran 项目,并使用了在 Linux 下运行的代码。在 Visual Studio 中,我将 .lib 和 .exp 的路径添加到项目属性的“附加包含目录”和“附加库目录”中。我还在“附加依赖项”中添加了“libnlopt-0.lib”和“libnlopt-0.exp”。

  3. 当我编译项目时,它失败并出现错误:

    /li>
  4. 然后我按照[这里](http://nlopt-discuss.ab-initio.mit.narkive.com/M3vzZMYA/nlopt-linked-to-intel-fortran-compiler-for-windows)的建议并添加/names:lowercase到命令中行,现在它编译得很好,但有一个警告:

    /li>
  5. 虽然它编译得很好,但我仍然无法运行我编译的代码。当我运行它时,我的电脑告诉我This APP cannot run on your PC. To find a version for your PC, check with the software published. 然后显示命令窗口Access denied,然后程序停止。

我真的不知道接下来我该怎么做才能使我的代码正常工作。我知道有很多人在 Windows 中使用 NLopt。

0 投票
1 回答
594 浏览

r - nloptr: lbfgs() 在进行优化时是否需要显式提供梯度函数?

nloptr包中,类似的函数lbfgs()似乎需要一个渐变函数。但如果我不提供渐变功能,它们也可以工作。

我的问题是:是nloptr自动计算梯度函数,还是lbfgs()不需要梯度函数?

如果目标函数很复杂,可以nloptr自动计算梯度函数,还是必须由用户提供?

0 投票
0 回答
199 浏览

r - R:nloptr 包:**linear** 目标函数和 **linear** 约束函数都可以处理,对吧?

我正在使用 nloptr。当我阅读手册时,它说:g(x)并且h(x)是非线性不等式和等式约束。

可以g(x) <=0h(x) = 0分别是线性不等式和等式约束吗?

或者线性约束只是special case非线性约束中的一个?

我注意到:在 auglag() 函数的示例中,heq属于线性等式约束,因此对于nloptr,线性约束应该是可以的。由此,即使对于目标函数,该函数也可以是线性的。如果我的理解不正确,请纠正我。

谢谢。

0 投票
1 回答
252 浏览

python - NLopt最小化特征值,Python

我有矩阵,其中元素可以定义为算术表达式,并编写了 Python 代码来优化这些表达式中的参数,以最小化矩阵的特定特征值。我曾经scipy这样做过,但想知道是否有可能,NLopt因为我想尝试更多它拥有的算法(无衍生变体)。

scipy我会做这样的事情:

在 NLopt 我试过这个:

这将返回:

NLopt 能够处理这个问题吗?

0 投票
0 回答
1123 浏览

r - R:具有等式约束的非线性优化

我有一个TxN矩阵M和一个Nx1 权重向量w,其中sum(w)=1
我需要找到w,它使 中的正元素的数量最大化Mw
如果没有单个w,则 Mw需要最大可能值。

更正式地说,用 -row in 表示M_tt那么M我需要

其中1是 1 的向量,如果为正,则函数I(x)返回,否则返回。1x0

注意:如果将目标函数除以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_EQNLOPT_GN_ISRES

NLopt 求解器状态:-2(NLOPT_INVALID_ARGS:无效参数(例如,下限大于上限,指定了未知算法等)。)

我是 nloptr 的新手,所以我想知道接下来会发生什么。

据我了解,我对f(-33) 的结果是可靠的,容差为 1.0e-7。这个对吗?
我如何说明值是否w是唯一的?
的语法是NLOPT_GN_ISRES什么?
目标f包含一个隐式if条件,我仍然可以使用(数字)梯度吗?
其他软件包(例如阿拉巴马州)是否更擅长此类问题?

更新将起点更改为w.

0 投票
1 回答
906 浏览

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 确实知道共享库在哪里,但它就是无法加载它。请帮忙!

0 投票
3 回答
1583 浏览

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/.

我已经重试了几次,在相关问题上使用了其他几个技巧,但到目前为止没有任何效果,任何提示都将不胜感激。谢谢!

编辑:有人有想法吗?

0 投票
0 回答
55 浏览

eclipse - Eclipse Phortran 中的 NLopt 库导入

我正在使用 Eclipse Phortran 对 Fortran 2008 进行编程。我需要实现 NLopt 优化器并下载NLopt for Windows (64bit)

不幸的是,即使在搜索此论坛和其他论坛之后,我也无法运行库导入。

我有以下由 NLopt 提供的为 Windows 准备的 文件:来自 NLopt 下载的文件

我必须在 Eclipse 中链接哪些文件?正如我在其他线程中发现的那样,我必须在这里实现库和路径: Eclipse library linker 但是,到目前为止我没有尝试过任何工作。如果你能给我一个小教程,那就太好了。