我想使用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
。谢谢你的帮助!
答案 0 :(得分:1)
NLopt文档现在有一个通过MathProgBase
接口https://github.com/JuliaOpt/NLopt.jl#tutorial
答案 1 :(得分:0)
NLopt包含一系列用于解决一般非线性优化问题的算法。目前,只实现了非线性derivative-based interface。因此,如果您想解决二次问题,则必须通过这个更通用的界面。这当然可以自动完成,但尚未实现。
对于quadprog
,Ipopt将是一个比NLopt更强大的求解器。 Ipopt目前支持线性接口和非线性接口,但还不支持二次接口。我打算很快实现这一点。