2

我想使用该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. 谢谢你的帮助!

4

2 回答 2

1

MathProgBaseNLopt 文档现在有这样一个通过接口使用 JuMP 的示例https://github.com/JuliaOpt/NLopt.jl#tutorial

于 2016-07-29T09:58:24.180 回答
0

NLopt 包括一组用于解决一般非线性优化问题的算法。目前,只实现了非线性、基于导数的接口。所以如果你想解决一个二次问题,你必须通过这个更通用的接口。这当然可以自动完成,但还没有实现。

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

于 2014-11-14T07:04:42.160 回答