Hi,
I'm one of the JuMP developers.
I'm confused by your lines like:
gear[j]==1
gear is a decision variable, so this doesn't make sense as written. What
were you intending to do?
Thanks,
Iain
On Friday, September 25, 2015 at 9:12:57 AM UTC-4, NV wrote:
>
> Hi,
> I am new to Julia and would like to run a set of operations repeatedly
> for a finite set of time. I tried to implement the following code:
>
> using JuMP, Ipopt
> Truck = Model(solver=IpoptSolver(print_level=0))
> #Initial Values
> gear_0 = 1
> v_0 = 20
> N_0 = 600
> #Constants:
> i_f = 3.27
> eta_f = 0.95
> eta_t = 0.95
> r_w = 0.52
> gear = 1
> i = [11.27 9.14 7.17 5.81 4.62 3.75 3.01 2.44 1.91 1.55 1.23 1]
> #Discretization
> n = 500
> @defVar(Truck,Δt≥0,start = 1/n)
> @defNLExpr(t_f,Δt*n)
> @defVar(Truck,600<=N[0:n]<=2500)
> @defVar(Truck,1<=gear[0:n]<=12)
> @defVar(Truck,i_t[0:n])
> @addConstraint(Truck,N[0]==N_0)
> @addConstraint(Truck,gear[0]==gear_0)
> @addConstraint(Truck,i_t[0]==i[1])
> @defNLExpr(N[j=0:n],(30*i_t[j]*i_f)/(pi*r_w))
> for j in 1:n
> if(gear[j]==1)
> if(N[j]>=1500)
> gear[j]= 2
> else
> gear[j] = 1
> end
> elseif(gear[j]==2)
> if(N[j]>=1501)
> gear[j] = 3
> elseif(N[j]<=950)
> gear[j]= 1
> else
> gear[j] = 2
> end
> elseif(gear[j]==3)
> if(N[j]>=1502)
> gear[j] = 4
> elseif(N[j]<=960)
> gear[j] = 2
> else
> gear[j] = 3
> end
> elseif(gear[j]==4)
> if(N[j]>=1503)
> gear[j] = 5;
> elseif(N[j]<=970)
> gear[j] = 3
> else
> gear[j] = 4
> end
> elseif(gear[j]==5)
> if(N[j]>=1504)
> gear[j] = 6;
> elseif(N[j]<=980)
> gear[j] = 4
> else
> gear[j] = 5
> end
> elseif(gear[j]==6)
> if(N[j]>=1505)
> gear[j] = 7
> elseif(N[j]<=990)
> gear[j] = 5
> else
> gear[j] = 6
> end
> elseif(gear[j]==7)
> if(N[j]>=1497)
> gear[j] = 8
> elseif(N[j]<=1000)
> gear[j] = 6
> else
> gear[j] = 7
> end
> elseif(gear[j]==8)
> if(N[j]>=1489)
> gear[j] = 9
> elseif(N[j]<=1006)
> gear[j] = 7
> else
> gear[j] = 8
> end
> elseif(gear[j]==9)
> if(N[j]>=1481)
> gear[j] = 10
> elseif(N[j]<=1012)
> gear[j] = 8
> else
> gear[j] = 9
> end
> elseif(gear[j]==10)
> if(N[j]>=1473)
> gear[j] = 11
> elseif(N[j]<=1018)
> gear[j] = 9
> else
> gear[j] = 10
> end
> elseif(gear[j]==11)
> if(N[j]>=1465)
> gear[j] = 12
> elseif(N[j]<=1024)
> gear[j] = 10
> else
> gear[j] = 11
> end
> elseif(gear[j]==12)
> if(N[j]<=1030)
> gear[j] = 11
> else
> gear[j] = 12
> end
> end
> i_t[j] = i[gear[j]]
> end
>
> However, I keep getting the error:
>
> LoadError: TypeError: non-boolean
> (JuMP.GenericRangeConstraint{JuMP.GenericAffExpr{Float64,JuMP.Variable}})
> used in boolean context
> while loading In[52], in expression starting on line 25
>
> in anonymous at no file
>
>
> I am clueless about how I could debug this!
>
>
> Thank you.
>
>