问题标签 [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 回答
389 浏览

mathematical-optimization - Python 上使用的 NLOPT 中变量和约束的最大数量是多少?

我猜每个 NLOPT 算法都有不同的尺度。我对 Global Optimizer ISRES 和 Local Optimizer COBYLA 更感兴趣。他们的最大限制是多少?谢谢!

0 投票
0 回答
111 浏览

c++ - 在 C++ 中的 NLOPT 优化过程中调用 digamma() 函数

我使用 Visual Studio 2015 上的NLOPT库来解决涉及多参数目标函数和梯度向量的优化问题。缩短的代码如下所示:

使用NLOPT_LD_LBFGS& 调用boost::math::digamma()-function 会产生以下错误:错误

boost::math::digamma(1.0 + 1.0/x[0])如果我更改为etc ,则不会出现此错误boost::math::digamma(1.0 + 1.0/5.4)。因此,当我取出参数 x[0] 时,它工作正常。当我使用另一个boost::math-function 时会发生同样的错误,但如果我使用它的std::-counterpart 则不会。

问:为什么我不能将boost::math-functions 应用于优化的参数?是否有另一种方法来包含digamma()- 函数(除了使用它的泰勒近似)?

谢谢你的帮助。我可以提供更多细节,但代码很广泛,我想我已经过滤掉了手头的问题。 编辑main()调用上面的函数。

0 投票
1 回答
1756 浏览

python - threading.join() 如何检测超时?

我们正在运行退出一个大的 Python 代码来随机扫描一些物理模型的参数空间(所以,很难给出一个最小的例子,对不起)。评估一个参数点大约需要 300 毫秒,但有时(我不知道为什么)评估突然需要几个小时,这会耗尽我们在计算集群上的 CPU 预算。

因此,我的想法是使用线程来为参数点的每次评估提供最大的运行时间。如果评估需要更长的时间,那么我可以忽略这一点,因为它是不物理的。现在,这似乎不起作用。我在一个新线程中开始计算,将其连接到主线程,超时设置为 1 秒,但主线程仍然继续等待计算终止(这需要比 1 秒长得多的时间)。

这怎么可能?线程如何测量新线程已经运行的时间?不得不说,在评估一个参数点的过程中,我大量使用了 nlopt、numpy 和 scipy。正如我所假设的,其中大部分不是直接用 python 编写的,而是使用一些二进制文件来加速计算。这会影响线程吗(因为函数对它来说是“黑匣子”)?

谢谢!

0 投票
1 回答
150 浏览

c++ - 停止和恢复优化

我正在使用nloptC++ 接口来解决非线性优化问题。

但是,我希望最后一行继续优化,不仅使用最后一个params值,还使用step_size最后使用的值,但我认为我无法访问该值。

我怎样才能实现这样的目标?

0 投票
0 回答
601 浏览

c++ - NLOPT 中的 SLSQP 因高条件数二次函数而失败

我用一个简单的 10D 二次函数对 SLSQP 算法进行基准测试:

f(x) = x_1^2 + 10^6\sum\limits_{i=2}^{D}x_i^2

c++函数是:

令我惊讶的是,SLSQP 对于这个简单的函数失败了,但是如果我将算法切换到nlopt::LD_LBFGS,nlopt 仍然有效地优化了函数。

谁能解释一下为什么 SLSQP 在这个演示功能上失败了?

NLOPT 的版本是 2.4.2(由 给出nlopt::version),下面是完整代码:

0 投票
0 回答
372 浏览

optimization - 使用 NLOPTR 的最小方差投资组合优化

我在 NLOPTR 中使用SLSQP函数来构建使用 34 只低波动性股票的投资组合。股票并不重要。我想要做的是能够对每只股票施加最小重量和最大重量。

hin 函数施加了最小权重约束——从这里可以看出——在投资组合的构建中每个权重必须至少为 1%;这可以通过“(x - 0.01)”看到

我不知道现在如何为函数添加最大约束(比如每只股票最大重量的 15%)以及具有最小约束。因此将具有最小 1% 和最大 15% 的权重约束。

有人可以帮我创建一个最小和一个最大约束。

我运行优化的代码如下:

0 投票
1 回答
963 浏览

r - 带约束的非线性优化

考虑以下数据框:

有以下优化问题:

1

其中 a_i 是矩阵 A 的第 i 行。

我试图用包解决这个问题nloptr。首先是目标函数:

然后是约束:

但是我尝试过的所有求解器都需要梯度,例如:

是否可以计算这个函数的梯度,或者有其他方法可以解决这个问题吗?

谢谢你。

0 投票
1 回答
3125 浏览

r - 为什么我的 NLOPT 优化错误/无法解决?

我难住了。我在 R 中为 NLOPT 制定了一个问题。当前问题解决了 180 个变量和 28 个等式约束

该代码是从问题的更简单版本中重新使用的,在我的脚本的早期版本中,具有 36 个变量和 20 个等式约束,可以立即解决,NLOPT_LD_SLSQP用作算法。

使用 180 个变量的较大版本的问题会立即产生以下结果NLOPT_LD_SLSQP

这让我感到困惑,因为它适用于问题的较小版本。同样,它返回起始值并且实际上并没有完成任何迭代。所以我实现NLOPT_AUGLAG_LD_EQ了,作为主要算法,NLOPT_LD_SLSQP作为局部算法。现在问题无法解决并产生:

如果我降低公差,它只会更快地失败......我将玩具问题放入 Excel 中,看看我是否未能正确制定或者它是否不可行,但它立即解决了。如果你愿意,我可以给你这个文件。我取了 Excel 解决方案值并在 R 中填充了函数,果然我的约束和目标函数似乎很好。

我想知道是否有人可以帮助我解决这个问题。以下是一些代码,将为 R 中的任何人产生问题(经过测试和确认):

现在这里是用 SLSQP 解决的代码:

这是使用 AUGLAG 解决的代码:

最后但并非最不重要的一点是,这是 Excel 生成的可行解决方案:

我的问题是:为什么该模型会为示例代码中实现的每个 SLSQP 和 AUGLAG 算法产生我在此处报告的错误?

会喜欢这里的一些输入。如果您需要任何其他信息,请告诉我!

0 投票
1 回答
455 浏览

c++ - 使用 OpenCV 最小化方程中的矩阵

我需要最小化H以下等式:

在此处输入图像描述

H矩阵在哪里3x3
Pn 是3x1矩阵(点)。
Euclidean()给出 2 点之间的距离。
Dn是实际距离。

我有一个初始估计Hm点(P0 到 Pm)
,我需要优化值,H以使所有m点的误差最小化。(表达式中的所有值都是已知的)我如何使用opencvdlib(或使用 boost/NLopt)来实现它。

0 投票
1 回答
518 浏览

r - 将参数传递给 r 中的 nloptr

我正在使用 'nloptr' 在 r 中优化一个简单的函数,但我很难将参数传递给目标函数。这是我正在使用的代码:

res <- nloptr(x0=Wghts,eval_f = pf.vol,eval_g_ineq=pf.return,opts=list(algorithm="NLOPT_GN_ISRES"), x=Wghts,C=Correl)

(我知道我在这里缺少参数,但我试图突出我不理解的行为)运行它会产生以下错误:

Error in .checkfunargs(eval_f, arglist, "eval_f") : x' passed to (...) in 'nloptr' but this is not required in the eval_f function.

只是想看看会发生什么,我可以尝试在没有 x 参数的情况下运行它:

res <- nloptr(x0=Wghts,eval_f = pf.vol,eval_g_ineq=pf.return,opts=list(algorithm="NLOPT_GN_ISRES"), C=Correl)

这给出了错误:

Error in .checkfunargs(eval_g_ineq, arglist, "eval_g_ineq") : eval_g_ineq requires argument 'x' but this has not been passed to the 'nloptr' function.

因此,包含x会引发一个不必要的错误,而忽略它会引发一个(至少可以理解的)错误,它已被省略。