# Avoiding for Loop in JuMP

**URL:** <https://discourse.julialang.org/t/avoiding-for-loop-in-jump/98920>\
**Category:** Optimization (Mathematical)\
**Tags:** jump\
**Created:** [May 16, 2023, 9:52am UTC](https://discourse.julialang.org/t/avoiding-for-loop-in-jump/98920 "2023-05-16T09:52:50Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Gagan\_Meena](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gagan_meena/32/49621_2.png) [@Gagan\_Meena](https://discourse.julialang.org/u/Gagan_Meena)\
**Post date:** [May 16, 2023, 9:52am UTC](https://discourse.julialang.org/t/avoiding-for-loop-in-jump/98920/1 "2023-05-16T09:52:50Z")

</div>

Is it possible to avoid for loop for the code given below.

```julia
@expression(JSTEP, Inj[i=1:n, j=1:s], Pg[i,j] - Pdmax[i,j] + PD[i,j] - PC[i,j])
    
for i = 1:r
  f = from[i]
  t = to[i]
  for k =1:s
    Inj[f,k] = Inj[f,k] -f₀[i,k]
    Inj[t,k] = Inj[t,k] + f₀[i,k]
    for j =1:nm_new[i] 
      Inj[f,k] = Inj[f,k] - fnew[i,k,j]
      Inj[t,k] = Inj[t,k] + fnew[i,k,j]
    end
  end
end

@constraint(JSTEP, [i=1:n, j=1:s], Inj[i,j]==0) 

```

---

<div class="post-metadata">

**Author:** ![gdalle](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdalle/32/27854_2.png) [@gdalle](https://discourse.julialang.org/u/gdalle)\
**Post date:** [May 16, 2023, 10:12am UTC](https://discourse.julialang.org/t/avoiding-for-loop-in-jump/98920/2 "2023-05-16T10:12:57Z")

</div>

Why do you want to avoid it, because it is slow? If so, check out the [performace tips on building expressions](https://jump.dev/JuMP.jl/stable/tutorials/getting_started/performance_tips/#Use-macros-to-build-expressions)

---

<div class="post-metadata">

**Author:** ![Gagan\_Meena](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gagan_meena/32/49621_2.png) [@Gagan\_Meena](https://discourse.julialang.org/u/Gagan_Meena)\
**Post date:** [May 16, 2023, 11:13am UTC](https://discourse.julialang.org/t/avoiding-for-loop-in-jump/98920/3 "2023-05-16T11:13:58Z")

</div>

Ok I will check the performance tips.

---

<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 16, 2023, 9:35pm UTC](https://discourse.julialang.org/t/avoiding-for-loop-in-jump/98920/4 "2023-05-16T21:35:04Z")

</div>

I can’t run your code because you haven’t provided a reproducible example. But this might help point you in the right direction:

```plaintext
@expression(JSTEP, Inj[i=1:n, j=1:s], Pg[i,j] - Pdmax[i,j] + PD[i,j] - PC[i,j])
@expression(JSTEP, sum_fnew[i=1:r, k=1:s], sum(fnew[i,k,j] for j in nm_new[i]) + f₀[i,k])
for i in 1:r, k in 1:s
    add_to_expression!(JSTEP, Inj[from[i], k], -1, sum_fnew[i, k])
    add_to_expression!(JSTEP, Inj[to[i], k], sum_fnew[i, k])
end
@constraint(JSTEP, [i=1:n, j=1:s], Inj[i, j] == 0)

```
