问题标签 [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 投票
1 回答
399 浏览

fortran - 编译 NLopt Fortran 示例代码时出现语法错误

我正在使用 Simply Fortran(gfortran 编译器)从http://ab-initio.mit.edu/wiki/index.php/NLopt_Tutorial练习 NLopt 示例。NLopt 库包含 libnlopt-0.def、linlopt-0.dll(用 c 编写)和 nlopt.f。这是我的主程序 test.f

它是用 Fortran 77 编写的,每行有 6 个缩进。构建文件会出现此错误:

但是,调用 nlo_add_inequality_constraint 具有正确的参数 #,由 NLopt 参考指示:

任何人都可以找出发生了什么吗?非常感谢!

0 投票
0 回答
117 浏览

python - 在python下使用nlopt从初始点没有解决方案的变化,用于非线性优化

更新:这篇文章中的 ValueError 原始值来自变量下限和上限之外的一些 xi 值,修复后,模型运行但立即以初始值结束。

我正在尝试在pytyon中使用nlopt来解决非线性问题(线性约束和非线性目标),问题是这样的

该模型有 180 个变量和 30 个约束(包括 15 个 lhs 和 15 个 rhs)这里是 python 代码:

以 xi 为起点,求解是即时的,并且始终为下限 lb。求解状态为 4,即“优化停止,因为已达到 xtol_rel 或 xtol_abs(上)”。

任何提示?谢谢。

0 投票
1 回答
86 浏览

c++ - 我可以在 nlopt 中表示一条染色体吗?

I want to find the best solution for a problem. However, the solution(chromosome) is represented as a vector of integers (length unknown).

As far as I know, NLOPT accepts double* as an input. Furthermore, the number of attributes is a constant. So is it possible to wrap around and pass a std::vector<int>?

EDIT - Tiny desciption of the problem:

I have a set of points. I want to sort this point using a heuristic. This heuristic is some what complex. It is the less possible number of crossing lines between them if we draw line between each consecutive points. I was thinking of something close to the gentic algorithm where I can represent the solution as chromosome of the ordered indexes.

I pick NLOPT because I have very successful previous experiment with it. I know it could be solved using many other genetic or bees algorithms libraries. But here I am asking about NLOPT it self.

0 投票
0 回答
146 浏览

c++ - NLopt 整数步长

有没有办法强制nlopt_optimize进入整数步?我试过了

但这似乎没有多大帮助。

使用的算法是 COBYLA

0 投票
0 回答
107 浏览

c++ - 在优胜美地上运行可执行文件时出现 C++ 链接错误

我正在尝试编译网站上给出的示例问题(对于 C++)并且遇到了一个问题:NMead.cpp 是我的程序。我使用 g++ 编译它

g++ -g -O2 -I/usr/local/Cellar/nlopt/2.4.2/include -L/usr/local/Cellar/nlopt/2.4.2/lib -o NMead -lm -lnlopt NMead.cpp -v

生成的消息是:

当我尝试运行生成的可执行文件时:

我收到以下错误:

dyld:库未加载:/usr/local/opt/nlopt/lib/libnlopt_cxx.0.dylib 引用自:/Users/dlekshmi/Documents/workspace/TUTORIALS/./NMead 原因:找不到图像 Trace/BPT 陷阱:5

我怀疑出于某种原因,它正在寻找图书馆的错误位置。我跑了

并且生成的消息表明它确实是:

./NMead:/usr/local/opt/nlopt/lib/libnlopt_cxx.0.dylib(兼容版本9.0.0,当前版本9.2.0)/opt/local/lib/libgcc/libstdc++.6.dylib(兼容版本7.0.0, 当前版本 7.21.0) /usr/lib/libSystem.B.dylib (兼容版本 1.0.0, 当前版本 1213.0.0) /opt/local/lib/libgcc/libgcc_s.1.dylib (兼容版本1.0.0,当前版本 1.0.0)

我是 C++ 和 nlopt 的新手,我不确定我做错了什么。

0 投票
1 回答
292 浏览

julia - NLopt 中 ftol_abs 和 ftol_rel 的意外行为

更新:对于访问此页面的其他任何人,值得看看这个 SO 问题和答案,因为我怀疑那里的解决方案与我在这里遇到的问题有关。

这个问题与我在julia-users mailing list上提出的问题重复,但我还没有在那里得到回复(诚然只有 4 天),所以我想我会在这里问。

我从 Julia 调用 NLopt API,尽管我认为我的问题与 Julia 语言无关。

我正在尝试使用 COBYLA 解决优化问题,但在许多情况下我未能触发停止标准。我的问题相当复杂,但我可以用一个更简单的例子重现问题行为。

具体来说,我尝试x1^2 + x2^2 + 1使用 COBYLA 最小化,并将两者都ftol_rel设置ftol_abs0.5. 我的目标函数包括一个将当前值打印到控制台的语句,因此我可以观察收敛情况。收敛期间打印到控制台的最后五个值是:

我的理解是,这些步骤中的任何一个都应该触发停止标准。所有步骤都小于0.5,所以应该触发ftol_abs。此外,每个值大约是1,并且0.5*1 = 0.5,因此所有步骤也应该触发ftol_rel。事实上,收敛例程中的最后 8 个步骤也是如此。

NLopt 已经存在了一段时间,所以我猜问题在于我对如何ftol_absftol_rel工作的理解,而不是一个错误。

谁能解释为什么没有更早地触发停止标准?

如果它有任何用处,可以使用以下 Julia 代码片段来重现我刚才所说的所有内容:

0 投票
1 回答
381 浏览

matlab - 将 MATLAB 优化函数转换为 julia

我正在尝试将 Matlab fmincon 优化函数转换为 julia。但没有太多的运气。

我认为可以使用 NLopt 或 IPopt。默认示例有效,但是当我尝试更改值时,它似乎没有迭代。

这个工作正常。它给出了 2 个结果和 11 次迭代

这不起作用,它只是给出一个结果和 0 次迭代

这只是给了我一个结果和 0 次迭代。

有人知道我做错了什么吗?

0 投票
1 回答
956 浏览

julia - NLopt SLSQP discards good solution in favour of older, worse solution

I'm solving a standard optimisation problem from Finance - portfolio optimisation. The vast majority of the time, NLopt is returning a sensible solution. However, on rare occasions, the SLSQP algorithm appears to iterate to the correct solution, and then for no obvious reason it chooses to return a solution from about one third of the way through the iterative process that is very obviously suboptimal. Interestingly, changing the initial parameter vector by a very small amount can fix the problem.

I have managed to isolate a relatively simple working example of the behaviour I am talking about. Apologies that the numbers are a bit messy. It was the best I could do. The following code can be cut-and-pasted into a Julia REPL and will run and print values of the objective function and parameters each time NLopt calls the objective function. I call the optimisation routine twice. If you scroll back through the output that is printed by the code below, you'll notice on the first call, the optimisation routine iterates to a good solution with objective function value of 0.0022 but then for no apparent reason goes back to a much earlier solution where the objective function is 0.0007, and returns it instead. The second time I call the optimisation function, I use a slightly different starting vector of parameters. Again, the optimisation routine iterates to the same good solution, but this time it returns the good solution with objective function value of 0.0022.

So, the question: Does anyone know why in the first case SLSQP abandons the good solution in favour of a much poorer one from only about a third of the way through the iterative process? If so, is there any way I can fix this?

Note: I know my covariance matrix is positive-semi-definite, rather than positive definite. This is not the source of the issue. I've confirmed this by altering the diagonal element of the zero row to a small, but significantly non-zero value. The issue is still present in the above example, as well as others that I can randomly generate.

0 投票
1 回答
1800 浏览

r - 在 R 中安装 tar.gz 包时出错

当我尝试从http://ab-initio.mit.edu/nlopt/nlopt-2.4.2.tar.gz安装 R 包nlopt-2.4.2.tar.gz时,使用sudo R CMD INSTALL nlopt-2.4 .2.tar.gz,我收到以下错误:

untar2 中的错误(tarfile、文件、列表、exdir、restore_times):
不支持的条目类型“”</p>

0 投票
1 回答
1604 浏览

python - NLopt 无效参数

我使用带有 python 绑定的 NLopt 库。

当我使用nlopt_algorithm = nlopt.LN_SBPLX它时效果很好。但是,如果我使用nlopt_algorithm = nlopt.GN_DIRECT_L,它会失败并出现错误:

ValueError:nlopt 无效参数

有谁知道这是为什么?我错过了一些论点吗?