如何将NLopt求解器与MathProgBase一起使用?

时间:2014-11-11 09:27:52

标签: julia nlopt

我想使用MathProgBase界面来制定优化问题。此外,我想使用开源解算器,例如NLopt(或任何其他)。

https://github.com/JuliaOpt/NLopt.jl#using-with-mathprogbase处的文档提到NLopt可以通过MathProgBase进行调用。不幸的是,我找不到一个万无一失的例子。另一方面,MathProgBase未提及NLopt。所以让我们试试吧。这是代码:

using NLopt, MathProgBase
quadprog([0., 0., 0.],[2. 1. 0.; 1. 2. 1.; 0. 1. 2.],[1. 2. 3.; 1. 1. 0.],'>',[4., 1.],-Inf,Inf,NLoptSolver(algorithm=:NLOPT_AUGLAG))

我收到以下错误消息:

`loadproblem!` has no method matching loadproblem!(::NLoptMathProgModel, ::Array{Float64,2}, ::Array{Float64,1}, ::Array{Float64,1}, ::Array{Float64,1}, ::Array{Float64,1}, ::Array{Float64,1}, ::Symbol)
while loading In[1], in expression starting on line 2

 in quadprog at /Users/harmeling/.julia/v0.3/MathProgBase/src/HighLevelInterface/quadprog.jl:46

怎么了?我也可以使用任何其他开源解算器。对我来说重要的是使用MathProgBase调用约定,例如quadprog。谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

NLopt文档现在有一个通过MathProgBase接口https://github.com/JuliaOpt/NLopt.jl#tutorial

使用JuMP的示例

答案 1 :(得分:0)

NLopt包含一系列用于解决一般非线性优化问题的算法。目前,只实现了非线性derivative-based interface。因此,如果您想解决二次问题,则必须通过这个更通用的界面。这当然可以自动完成,但尚未实现。

对于quadprog,Ipopt将是一个比NLopt更强大的求解器。 Ipopt目前支持线性接口和非线性接口,但还不支持二次接口。我打算很快实现这一点。