0

当我试图了解 Julia 实现不同例程以进行优化的方式时,我发现了一个 JuMP 和 NLopt 的组合示例。

以下示例(可在此处找到:https ://github.com/JuliaOpt/NLopt.jl )为您提供最终解决方案,中间没有其他步骤。

虽然这对于简单的问题可能是可以的,但对于一些我们需要看看每次迭代是如何进行的(例如它是否与每次迭代收敛?)

我的问题是:如何修改以下代码以显示每次迭代的次数和错误(我们希望它变得越来越小)?

我希望我说清楚了(代码如下):

using JuMP
using NLopt

m = Model(solver=NLoptSolver(algorithm=:LD_MMA))

a1 = 2
b1 = 0
a2 = -1
b2 = 1

@variable(m, x1)
@variable(m, x2 >= 0)

@NLobjective(m, Min, sqrt(x2))
@NLconstraint(m, x2 >= (a1*x1+b1)^3)
@NLconstraint(m, x2 >= (a2*x1+b2)^3)

setvalue(x1, 1.234)
setvalue(x2, 5.678)

status = solve(m)

println("got ", getobjectiveValue(m), " at ", [getvalue(x1),getvalue(x2)])

顺便说一句:在这里(http://ab-initio.mit.edu/wiki/index.php/NLopt_Algorithms#Nelder-Mead_Simplex)我们可以找到所有可能的NLOpt算法。我想尝试使用 Nelder-Mead 而不是LD_MMA我进入NLOPT_LN_NELDERMEAD,但无济于事。有谁知道所有这些算法的快捷方式。可以在 Julia 中使用吗?

=> 无

4

1 回答 1

2

对于 NLopt 来说,这似乎不是一个可能的选项,但它可以作为一个选项添加到 JuMP 中。您应该在JuMP 问题页面上打开一个问题来询问它。

于 2014-11-23T03:02:18.073 回答