问题标签 [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++ - 在 Visual Studio 2017 中链接 Nlopt-2.4.2 的问题
一些背景故事:我正在尝试让 bolt-lmm 软件在 Windows 机器上编译,因为这将是我所在的研究小组的一个很好的补充。该软件的开发人员只使 linux 静态可执行,但是提供了源代码。我习惯用 R 或 python 编程,这是我第一次接触 C++。
我已经解决了一些问题,但由于某种原因,我无法让 Visual Studio 与Nlopt-2.4.2
.
我下载了它 并按照那里给出的步骤进行安装。
我可以告诉我已经做了同样的事情来将 Nlopt 库链接到项目中,如如何将其他库添加到 Visual Studio 项目中所述?
我仍然收到如下错误:
(这类错误一共12个,还有一个错误链接1120,刚好告诉我有12个未解决的永恒。)
我希望这是足够的信息来提供问题所在的提示。
visual-c++ - 如何设置具有多个不等式约束的 nlopt?
我有几个关于使用非线性约束设置 NLopt 的问题:
- 如果约束的数量大于变量的数量,我们如何
grad[ ]
在约束函数中设置呢?是否有任何(自动)方法可以在不引入拉格朗日乘数的情况下解决问题?
使用拉格朗日多路复用器,我知道我们可以解决问题。但是使用拉格朗日多路复用器必须my_constraint_data
手动获取,难以解决大规模问题。
例如,假设我想最小化函数
受以下约束:
约束 1:c1 = 10-(x1)*(x2) >= 0
约束 2:c2 = ((x1)*(x2)^2)-5 >= 0
约束 3:c3 = (x2)-(x1)*(x2)^3 >= 0
在 NLopt 教程中,我们知道它是约束grad[0] = d(c1)/d(x1)
的grad[1] = d(c2)/d(x2)
梯度。然后,我们设置grad
如下:
问题是如果约束的数量大于变量的数量,我们不知道如何设置grad[ ]
(尤其是对于)。c3
当然,我们可以通过使用拉格朗日多路复用器 (l1, l2, l3) 来解决以下非自动方法的问题,其中
和
同时,将非自动方法应用于大规模问题并不容易,因为它效率低且编程复杂。
- 有什么方法可以使用 NLopt 求解非线性联立方程?(当应用拉格朗日多路复用器时,在约束数大于变量数的情况下,应求解非线性联立方程。)。
我们感谢您的回答。这对我们真的很有帮助。谢谢你的好意。
python - Minimize quadratic function subject to linear equality constraints with SciPy
I have a reasonably simple constrained optimization problem but get different answers depending on how I do it. Let's get the import and a pretty print function out of the way first:
The sample data is very simple:
Here's the constrained optimization (including jacobians). In words, the objective function I want to minimize is just the sum of squared percentage changes from the initial values to final values. The linear equality constraint is simply requiring x.sum()
to equal a constant.
And for comparison, I've re-factored as an unconstrained minimization by using the equality constraint to replace x[0]
with a function of x[1:]
. Note that the unconstrained function is passed x0[1:]
whereas the constrained function is passed x0
.
I then try to minimize in three ways:
- Unconstrained with 'Nelder-Mead'
- Constrained with 'trust-constr' (w/ & w/o jacobian)
- Constrained with 'SLSQP' (w/ & w/o jacobian)
Code:
Here is some simplified output (and of course you can run the code to get the full output):
Notes:
(1) & (2b) are plausible solutions in that they achieve significantly lower objective function values and intuitively we'd expect the variables with larger starting values to move more (both absolutely and in percentage terms) than the smaller ones.
Adding the jacobian to 'trust-const' causes it to get the wrong answer (or at least a worse answer) and also to exceed max iterations. Maybe the jacobian is wrong, but the function is so simple that I'm pretty sure it's correct (?)
'SLSQP' doesn't seem to work w/ or w/o the jacobian supplied, but works very fast and claims to terminate successfully. This seems very worrisome in that getting the wrong answer and claiming to have terminated successfully is pretty much the worst possible outcome.
Initially I used very small starting values and targets (just 1/1,000 of what I have above) and in that case all 5 approaches above work fine and give the same answers. My sample data is still extremely small, and it seems kinda bizarre for it to handle
1,2,..,5
but not1000,2000,..5000
.FWIW, note that the 3 incorrect results all hit the target by adding 1,000 to each initial value -- this satisfies the constraint but comes nowhere near minimizing the objective function (b/c variables with higher initial values should be increased more than lower ones to minimize the sum of squared percentage differences).
So my question is really just what is happening here and why do only (1) and (2b) seem to work?
More generally, I'd like to find a good python-based approach to this and similar optimization problems and will consider answers using other packages besides scipy although the best answer would ideally also address what is going on with scipy here (e.g. is this user error or a bug I should post to github?).
julia - 使用 NLopt 作为 JuMP 的求解器
我正在尝试使用 NLopt 优化函数。
我尝试使用 NLopt.jl 中的示例,但无法修复错误。
我不知道如何使用 with_optimizer。
fortran - 对 nlopt_... 符号的未定义引用
我对 Fortran 相当陌生,这听起来像是一个愚蠢的问题。我在编译作为示例发布在 NLOPT Wiki 中的 Fortran 代码时遇到错误。
我使用以下命令在 Ubuntu 18.04 LTS 中编译:
终端中产生以下错误:
python-3.x - 无法安装 nlopt python 包
我正在尝试安装 python 包 Nlopt,这是半监督学习包semisup-learn的要求。但是在命令行中出现此错误。我检查了 Nlopt 的其他安装问题,但没有找到解决方案。在它的 Github 上没有人提出这个问题,所以看起来我的电脑端出了点问题。谁能告诉我这个错误是什么意思以及如何解决?
我的python版本:3.6.8
python - Nlopt 在 add_inequality_constraint 的 Constraints 函数中没有捕获 ForcedStop
我将 [LikelihoodProfiler]: https://github.com/insysbio/LikelihoodProfiler.jl从 Julia 重写为 Python。我需要为[非线性约束]编写约束函数: https ://nlopt.readthedocs.io/en/latest/NLopt_Python_Reference/#nonlinear-constraints ,就好像我们得到一些我们抛出的值[强制停止异常]:https://nlopt .readthedocs.io/en/latest/NLopt_Python_Reference/# exc Nlopt 必须处理异常并使用特殊代码返回结果。
在 [Julia 它看起来]:https ://github.com/insysbio/LikelihoodProfiler.jl/blob/master/src/cico_one_pass.jl
我尝试将其重写为 python:
但是当我运行它时,我得到nlopt invalid argument,如果相反
我用
我得到nlopt.ForcedStop: Out of the scan bound but in ll 约束
但我预计,Nlopt 会使用特殊代码处理异常并返回优化结果。
c - 使用 NLOPT SLSQP(基于梯度的算法)时 C 中的 NLopt nullptr 异常
Servus Guys 我正在做一个关于使用Nlopt(SLSQP)进行参数识别的项目,我编写了一个测试代码,但是在 3 次迭代之后,编译器总是在 'myfunc'(objectfunction) 中的 'grad' 处抛出关于Nullptr的异常:
'抛出异常:写访问冲突。毕业是nullptr。
,我使用有限差分来计算梯度,因为有限差分可以计算我项目中复杂模型的梯度。
我试图将不同的步长从 1e-8 更改为 1e-6 以获得有限差分,之后代码正常工作,无一例外,我不知道原因,有人可以告诉我吗?
hier 是命令窗口中的结果,步长为 1e-8
grad[0] 是 1.000000 grad[1] 是 1.000000
x[0] 是 1.000000 x[1] 是 1.000000
grad[0] 是 0.600000 grad[1] 是 0.600000
x[0] 是 1.666667 x[1] 是 1.666667
grad[0] 是 0.600000 grad[1] 是 0.600000
x[0] 是 1.666667 x[1] 是 1.666667
之后抛出编译器异常
r - init_nloptr.c:35:19:致命错误:nlopt.h:没有这样的文件或目录
我在 R 中安装 lme4,但出现了上述问题。我看到了 Linux 和 Ubuntu 的答案。我在 Windows 上运行,我收到一条致命错误消息,如图所示。有人可以帮忙吗?
编译终止。
python - 如何在 Python 的 nlopt 中返回增强拉格朗日方法 (LD_AUGLAG) 的拉格朗日乘数和惩罚参数的最终值?
我希望在 Python 的 NLOPT 中使用增强拉格朗日方法 (LD_AUGLAG) 来解决另一个优化策略的子问题。但是,为此,我需要知道拉格朗日乘数的最终值和终止时的惩罚参数。
我查看了 NLOPT 的 Python 版本可用的返回选项,但无法找到这些值的返回选项。
我希望在 opt 对象中可以选择返回拉格朗日乘数的值和终止时使用的惩罚参数。但是,在 NLOPT 中似乎没有这样的选项。