当我试图了解 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 中使用吗?
=> 无