# JuMP Dot Product/Norm/NLobjective

I’ve run into a number of issues with quadratic objectives in JuMP. A simple example is:

``````m = Model(solver = CplexSolver())
@variable(m, w[1:10])
@expression(m, dotproduct, sum(w[i]*w[i] for i = 1:10))
``````

If I try to make the dotproduct squared the objective with `@objective(m, Min, dotproduct^2)` I get an error

``````ERROR: *(::QuadExpr,::QuadExpr) is not defined. Are you trying to build a nonlinear problem? Make sure you use @NLconstraint/@NLobjective.
Stacktrace:
[2] literal_pow(::Base.#^, ::JuMP.GenericQuadExpr{Float64,JuMP.Variable}, ::Type{Val{2}}) at ./intfuncs.jl:208
[3] macro expansion at ./REPL.jl:97 [inlined]
[4] (::Base.REPL.##1#2{Base.REPL.REPLBackend})() at ./event.jl:73
``````

If I try it with `@NLobjective(m, Min, dotproduct^2)`, I get the error

``````ERROR: MethodError: no method matching parseNLExpr_runtime(::JuMP.Model, ::JuMP.GenericQuadExpr{Float64,JuMP.Variable}, ::Array{ReverseDiffSparse.NodeData,1}, ::Int64, ::Array{Float64,1})
Closest candidates are:
parseNLExpr_runtime(::JuMP.Model, !Matched::Number, ::Any, ::Any, ::Any) at /home/paul/.julia/v0.6/JuMP/src/parsenlp.jl:196
parseNLExpr_runtime(::JuMP.Model, !Matched::JuMP.Variable, ::Any, ::Any, ::Any) at /home/paul/.julia/v0.6/JuMP/src/parsenlp.jl:202
parseNLExpr_runtime(::JuMP.Model, !Matched::JuMP.NonlinearExpression, ::Any, ::Any, ::Any) at /home/paul/.julia/v0.6/JuMP/src/parsenlp.jl:208
...
Stacktrace:
[1] macro expansion at ./REPL.jl:97 [inlined]
[2] (::Base.REPL.##1#2{Base.REPL.REPLBackend})() at ./event.jl:73
``````

Aren’t those the only two ways to add the objectives?

Could you try with `@NLexpression` and `@NLobjective`?

Note that you ought to also be able to just do `w⋅w`, though I’m not completely sure that `@NLexpression` and `@NLobjective` will cooperate with that.

I think your problem is that `dotproduct^2` is not quadratic since `dotproduct` is quadratic.

It seemed to work with `@NLexpression` and `@NLobjective`

ExpandingMan: Yes, the dot product only works with the linear expression and objective right now which is why I had to write it the other way