# How to turn a dot into simple scaler expressions for nonlinear optimization using JUMP

**URL:** <https://discourse.julialang.org/t/how-to-turn-a-dot-into-simple-scaler-expressions-for-nonlinear-optimization-using-jump/90776>\
**Category:** Optimization (Mathematical)\
**Tags:** question, jump, optimization\
**Created:** [November 24, 2022, 8:19pm UTC](https://discourse.julialang.org/t/how-to-turn-a-dot-into-simple-scaler-expressions-for-nonlinear-optimization-using-jump/90776 "2022-11-24T20:19:18Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![elliot000319](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/elliot000319/32/36789_2.png) [@elliot000319](https://discourse.julialang.org/u/elliot000319)\
**Post date:** [November 24, 2022, 8:19pm UTC](https://discourse.julialang.org/t/how-to-turn-a-dot-into-simple-scaler-expressions-for-nonlinear-optimization-using-jump/90776/1 "2022-11-24T20:19:18Z")

</div>

I want to turn the dot notation in this code to simple scaler operations for NLconstraint.  
I’ve checked the examples in JUMP’s documentation, but I could not get it to work.  
The following is the part that’s causing the issue.

```julia
    @NLobjective(model, Min, 
    100 * sum(position[:, end].^2)+ sum(velocity[:, end].^2))

    # Initial conditions:
    @NLconstraint(model, position[:, 1] .== initial_position)
    @NLconstraint(model, velocity[:, 1] .== initial_velocity)
    @NLconstraint(model, angle[1] .== initial_angle)

    optimize!(model)
    return value.(position), value.(velocity), value.(acceleration), value.(angle)

```

Here’s the entire optimizer function.

```julia
function run_mpc(initial_position, initial_velocity, initial_angle)
    
    model = Model(Ipopt.Optimizer)

    Δt = 0.1
    num_time_steps = 20 # Change this -> Affects Optimization
    max_acceleration_Thr = 10 # Max Thrust / Mass
	max_pitch_angle = 90
	accel_g = 1.635 # 1/6 of Earth G

    @variables model begin
        position[1:2, 1:num_time_steps]
        velocity[1:2, 1:num_time_steps]
		acceleration[1:2, 1:num_time_steps]
		-max_pitch_angle <= angle[1:num_time_steps] <= max_pitch_angle
		-max_acceleration_Thr <= accel_Thr[1:num_time_steps] <= max_acceleration_Thr
    end

    # Dynamics constraints
	@NLconstraint(model, [i=2:num_time_steps, j=[1]], acceleration[j, i] == accel_Thr[i-1]*sind(angle[i-1]))
	
	@NLconstraint(model, [i=2:num_time_steps, j=[2]], acceleration[j, i] == accel_Thr[i-1]*cos(angle[i-1])-accel_g)
	
    @NLconstraint(model, [i=2:num_time_steps, j=1:2],
                velocity[j, i] == velocity[j, i - 1] + (acceleration[j, i - 1]) * Δt)
    @NLconstraint(model, [i=2:num_time_steps, j=1:2],
                position[j, i] == position[j, i - 1] + velocity[j, i - 1] * Δt)

    # Cost function: minimize final position and final velocity
	# For Moving to [-2,0] with min. vertical velocity,
	# sum(([-2,0]-position[:, end]).^2)+ sum(velocity[[2], end].^2)
    @NLobjective(model, Min, 
        100 * sum(position[:, end].^2)+ sum(velocity[:, end].^2))

    # Initial conditions:
    @NLconstraint(model, position[:, 1] .== initial_position)
    @NLconstraint(model, velocity[:, 1] .== initial_velocity)
	@NLconstraint(model, angle[1] .== initial_angle)

    optimize!(model)
    return value.(position), value.(velocity), value.(acceleration), value.(angle)
end;

```

---

<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:** [November 24, 2022, 8:40pm UTC](https://discourse.julialang.org/t/how-to-turn-a-dot-into-simple-scaler-expressions-for-nonlinear-optimization-using-jump/90776/2 "2022-11-24T20:40:31Z")

</div>

If the constraint is linear or quadratic, you can use `@constraint`. That should work for these cases.

Otherwise you need an explicit sum like `sum(position[i, num_time_steps] for i in 1:2)`.

For the last part, use a collection

```julia
@constraint(model, [i=1:2], position[i, 1] == initial_position[i])

```
