# Using literal 1.0 in JuMP @constraint throws an error

**URL:** <https://discourse.julialang.org/t/using-literal-1-0-in-jump-constraint-throws-an-error/98496>\
**Category:** Optimization (Mathematical)\
**Tags:** jump\
**Created:** [May 8, 2023, 5:32pm UTC](https://discourse.julialang.org/t/using-literal-1-0-in-jump-constraint-throws-an-error/98496 "2023-05-08T17:32:43Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![gmsowers](https://avatars.discourse-cdn.com/v4/letter/g/41988e/32.png) [@gmsowers](https://discourse.julialang.org/u/gmsowers)\
**Post date:** [May 8, 2023, 5:32pm UTC](https://discourse.julialang.org/t/using-literal-1-0-in-jump-constraint-throws-an-error/98496/1 "2023-05-08T17:32:43Z")

</div>

The following code throws an error:

```julia
using JuMP

m = Model()
@variable(m, x)
y = Vector{Any}(undef, 2)
y[1] = @variable(m, base_name=“y1”)
y[2] = 1.0

@constraint(m, sum([x * yi for yi in y]) == 1.0)

ERROR: MethodError: no method matching zero(::Type{AbstractJuMPScalar})
Closest candidates are:
zero(::Union{Type{P}, P}) where P<:Dates.Period at C:\Users\garys.julia\juliaup\julia-1.8.5+0.x64.w64.mingw32\share\julia\stdlib\v1.8\Dates\src\periods.jl:53
zero(::T) where T<:Dates.TimeType at C:\Users\garys.julia\juliaup\julia-1.8.5+0.x64.w64.mingw32\share\julia\stdlib\v1.8\Dates\src\types.jl:450
zero(::LinearAlgebra.Diagonal{T, StaticArraysCore.SVector{N, T}}) where {N, T} at C:\Users\garys.julia\packages\StaticArrays\VLqRb\src\SDiagonal.jl:41
…

```

Replacing `y[2] = 1.0` with `y[2] = one(AffExpr)` produces no errors, as does rewriting the constraint as

```julia
@constraint(m, sum(+, [x * yi for yi in y]) == 1.0)

```

Is this a bug?

---

<div class="post-metadata">

**Author:** ![odow](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/odow/32/28685_2.png) [@odow](https://discourse.julialang.org/u/odow)\
**Post date:** [May 8, 2023, 9:05pm UTC](https://discourse.julialang.org/t/using-literal-1-0-in-jump-constraint-throws-an-error/98496/2 "2023-05-08T21:05:54Z")

</div>

The real fix is that `sum` does not need to take an array:

```plaintext
@constraint(m, sum(x * yi for yi in y) == 1.0)

```

Your error stems from this:

```julia
julia> z = [x * yi for yi in y]
2-element Vector{AbstractJuMPScalar}:
 x*y1
 x

julia> sum(z)
ERROR: MethodError: no method matching zero(::Type{AbstractJuMPScalar})
Closest candidates are:
  zero(::Union{Type{P}, P}) where P<:Dates.Period at /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Dates/src/periods.jl:53
  zero(::GenericQuadExpr) at /Users/oscar/.julia/packages/JuMP/AKvOr/src/quad_expr.jl:113
  zero(::GenericAffExpr) at /Users/oscar/.julia/packages/JuMP/AKvOr/src/aff_expr.jl:200
  ...
Stacktrace:

```

In this case, your vector has an abstract element type, and we can’t figure out how to initialize the summation of an abstract type.

---

<div class="post-metadata">

**Author:** ![gmsowers](https://avatars.discourse-cdn.com/v4/letter/g/41988e/32.png) [@gmsowers](https://discourse.julialang.org/u/gmsowers)\
**Post date:** [May 8, 2023, 9:58pm UTC](https://discourse.julialang.org/t/using-literal-1-0-in-jump-constraint-throws-an-error/98496/3 "2023-05-08T21:58:00Z")

</div>

Thank you.
