# Defining constraint over dense and sparse constraint

**URL:** <https://discourse.julialang.org/t/defining-constraint-over-dense-and-sparse-constraint/128030>\
**Category:** Optimization (Mathematical)\
**Tags:** jump\
**Created:** [April 13, 2025, 6:48pm UTC](https://discourse.julialang.org/t/defining-constraint-over-dense-and-sparse-constraint/128030 "2025-04-13T18:48:31Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![danrib07](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/danrib07/32/212751_2.png) [@danrib07](https://discourse.julialang.org/u/danrib07)\
**Post date:** [April 13, 2025, 6:48pm UTC](https://discourse.julialang.org/t/defining-constraint-over-dense-and-sparse-constraint/128030/1 "2025-04-13T18:48:31Z")

</div>

Hi! I have a question regarding the definition of constraints including both dense and sparse variables. In the example below, I am trying to define the constraint x\_{ij} + y\_{ij} \leq 0 \quad \forall \quad i \in \mathcal{M},j \in \mathcal{N}. However, we know from the `data_matrix` that some y\_{ij} are automatically forced to be zero. I know that I would be able to define the variable `y` over all indices of both sets and fix the zero valued entries using `fix` function as described in the [docs](https://jump.dev/JuMP.jl/stable/tutorials/getting_started/getting_started_with_sets_and_indexing/#Fix-unused-variables). However, if I define the variables as I have done below, what is the best way to write the constraint without having to use if-else blocks to determine which y\_{ij} entries are nonzero?

```julia
using JuMP

M = 5
N = 3
data_matrix = rand((0,1),(M,N))
M_set = 1:M
N_set = 1:N

model = Model()

@variable(model, y[i = M_set, j = N_set; data_matrix[i,j] > 0])
@variable(model, x[i = M_set, j = N_set])

# write constraint x[i,j] + y[i,j] <= 0

for i in M_set, j in N_set
    if haskey(y, (i,j))
        @constraint(model, x[i,j] + y[i,j] <= 0)
    else
        @constraint(model, x[i,j] <= 0)
    end
end
print(model)

```

---

<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:** [April 13, 2025, 9:06pm UTC](https://discourse.julialang.org/t/defining-constraint-over-dense-and-sparse-constraint/128030/2 "2025-04-13T21:06:41Z")

</div>

Hi @danrib07,

This might give you some ideas:

```julia
using JuMP

M, N = 5, 3
data_matrix = rand(Bool, (M, N))

model = Model()
@variable(model, x[i in 1:M, j in 1:N])
@variable(model, y[i in 1:M, j in 1:N; data_matrix[i,j]])

# Option 1
for i in 1:M, j in 1:N
    @constraint(model, x[i,j] + (data_matrix[i,j] ? y[i,j] : 0) <= 0)
end

# Option 2
@constraint(model, [i in 1:M, j in 1:N; data_matrix[i,j]], x[i,j] + y[i,j] <= 0)
@constraint(model, [i in 1:M, j in 1:N; !data_matrix[i,j]], x[i,j] <= 0)

```

---

<div class="post-metadata">

**Author:** ![danrib07](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/danrib07/32/212751_2.png) [@danrib07](https://discourse.julialang.org/u/danrib07)\
**Post date:** [April 13, 2025, 10:42pm UTC](https://discourse.julialang.org/t/defining-constraint-over-dense-and-sparse-constraint/128030/3 "2025-04-13T22:42:49Z")

</div>

Thank you!
