# JuMP: How to see output of particular variable and indicies?

**URL:** <https://discourse.julialang.org/t/jump-how-to-see-output-of-particular-variable-and-indicies/98505>\
**Category:** Optimization (Mathematical)\
**Tags:** question, jump\
**Created:** [May 8, 2023, 8:52pm UTC](https://discourse.julialang.org/t/jump-how-to-see-output-of-particular-variable-and-indicies/98505 "2023-05-08T20:52:41Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Optimization](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/optimization/32/32462_2.png) [@Optimization](https://discourse.julialang.org/u/Optimization)\
**Post date:** [May 8, 2023, 8:52pm UTC](https://discourse.julialang.org/t/jump-how-to-see-output-of-particular-variable-and-indicies/98505/1 "2023-05-08T20:52:41Z")

</div>

Hi there

Is it possible to ask JuMp to just show some particular indicies of varaiables? For instance let’s say we have a binary variable ` @variable(model, x[i = 2:3, j = 1:2:30, ["A", "B",..."Z"]] >= 0, Bin)` and after solving models we are interested to first knowing if `x[i,j,"C"]` takes value and if so for which combination of `i,j`?

Thanks

---

<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, 8:58pm UTC](https://discourse.julialang.org/t/jump-how-to-see-output-of-particular-variable-and-indicies/98505/2 "2023-05-08T20:58:41Z")

</div>

There’s nothing particular in JuMP for this. Just write a function or loop in Julia.

```julia
for i in 2:3, j in 1:2:30
    if value(x[i, j, "C"]) > 0.5
        # Do something
    end
end

```

You can subset with `x[:, :, "C"]`, so perhaps you could do `value.(x[:, :, "C"]) .> 0.5`.

Or you could use `Containers.rowtable`:

```julia
import DataFrames
df = DataFrames.DataFrame(Containers.rowtable(x; header=[:i, :j, :k, :value]))
df[df[!, :value] .> 0.5, :]

```

---

<div class="post-metadata">

**Author:** ![Optimization](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/optimization/32/32462_2.png) [@Optimization](https://discourse.julialang.org/u/Optimization)\
**Post date:** [May 9, 2023, 6:31am UTC](https://discourse.julialang.org/t/jump-how-to-see-output-of-particular-variable-and-indicies/98505/3 "2023-05-09T06:31:10Z")

</div>

One question: How to fix the `ERROR: Invalid number of column names provided: Got 4, expected 2.` when calling `import DataFrames df = DataFrames.DataFrame(Containers.rowtable(x; header=[:i, :j, :k, :value])) df[df[!, :value] .> 0.5, :]`

I’ve tried ` DataFrames.DataFrame(Containers.rowtable(x; header=[:i, :j, :k]))` but now says `ERROR: Invalid number of column names provided: Got 3, expected 2.`

Even the first one returns a key error. I want to print the value of `i,j`. For instance:

```julia
for i in 2:3, j in 1:2:30
    if value(x[i, j, "C"]) > 0.5
        print((i,j)
    end
end

```

This returns returns a key error. So, for example something similar to this `KeyError: key (2, 10, "C") not found` in the above.

---

<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 9, 2023, 6:39am UTC](https://discourse.julialang.org/t/jump-how-to-see-output-of-particular-variable-and-indicies/98505/4 "2023-05-09T06:39:49Z")

</div>

Your definition of x must be different to what you had above.

It looks like you have one dimension of tuples, instead of three separate dimensions.

---

<div class="post-metadata">

**Author:** ![Optimization](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/optimization/32/32462_2.png) [@Optimization](https://discourse.julialang.org/u/Optimization)\
**Post date:** [May 9, 2023, 7:26am UTC](https://discourse.julialang.org/t/jump-how-to-see-output-of-particular-variable-and-indicies/98505/5 "2023-05-09T07:26:26Z")

</div>

Yes. Could that cause a problem? the way I defined `x` was similar to

```julia
idx = [(i,j,k) for (i,j) in Numbers for k in Letters]
@variable(m, x[idx] >= 0, Bin)

```

---

<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 9, 2023, 9:22am UTC](https://discourse.julialang.org/t/jump-how-to-see-output-of-particular-variable-and-indicies/98505/6 "2023-05-09T09:22:49Z")

</div>

> Could that cause a problem?

Yes. The code you write to index a variable needs to match how you defined it. Your first example needs `x[1, 2, "C"]` and your second example needs `x[(1, 2, "C")]`. The first has three dimensions, and the second has one.

I think you need something like:

```julia
indices = [(i, j) for (i, j, k) in idx if k == "C" && value(x[(i, k, k)]) > 0.5]

```

The `rowtable` example is `Containers.rowtable(x; header=[:idx, :value])`.
