@@ -23,8 +23,11 @@ function OptimalControlProblems.steering(::JuMPBackend; nh::Int64=100)
2323 model = JuMP. Model()
2424
2525 @variable(model, u_min <= u[i= 1 : (nh + 1 )] <= u_max, start = 0.0 ) # control
26- @variable(model, x[i= 1 : (nh + 1 ), j= 1 : 4 ], start = gen_x0(i, j)) # state
27- @variable(model, tf, start = 1.0 ) # final time
26+ @variable(model, x1[i= 1 : (nh + 1 )], start = gen_x0(i, 1 )) # state x1
27+ @variable(model, x2[i= 1 : (nh + 1 )], start = gen_x0(i, 2 )) # state x2
28+ @variable(model, x3[i= 1 : (nh + 1 )], start = gen_x0(i, 3 )) # state x3
29+ @variable(model, x4[i= 1 : (nh + 1 )], start = gen_x0(i, 4 )) # state x4
30+ @variable(model, tf, start = 1.0 ) # final time
2831
2932 @expression(model, h, tf / nh) # step size
3033 @objective(model, Min, tf)
@@ -35,18 +38,21 @@ function OptimalControlProblems.steering(::JuMPBackend; nh::Int64=100)
3538 @constraints(
3639 model,
3740 begin
38- con_x1[i= 1 : nh], x[i + 1 , 1 ] == x[i, 1 ] + 0.5 * h * (x[i, 3 ] + x[i + 1 , 3 ])
39- con_x2[i= 1 : nh], x[i + 1 , 2 ] == x[i, 2 ] + 0.5 * h * (x[i, 4 ] + x[i + 1 , 4 ])
40- con_x3[i= 1 : nh],
41- x[i + 1 , 3 ] == x[i, 3 ] + 0.5 * h * (a * cos(u[i]) + a * cos(u[i + 1 ]))
42- con_x4[i= 1 : nh],
43- x[i + 1 , 4 ] == x[i, 4 ] + 0.5 * h * (a * sin(u[i]) + a * sin(u[i + 1 ]))
41+ con_x1[i= 1 : nh], x1[i + 1 ] == x1[i] + 0.5 * h * (x3[i] + x3[i + 1 ])
42+ con_x2[i= 1 : nh], x2[i + 1 ] == x2[i] + 0.5 * h * (x4[i] + x4[i + 1 ])
43+ con_x3[i= 1 : nh], x3[i + 1 ] == x3[i] + 0.5 * h * (a * cos(u[i]) + a * cos(u[i + 1 ]))
44+ con_x4[i= 1 : nh], x4[i + 1 ] == x4[i] + 0.5 * h * (a * sin(u[i]) + a * sin(u[i + 1 ]))
4445 end
4546 )
4647
4748 # Boundary conditions
48- @constraint(model, [j = 1 : 4 ], x[1 , j] == xs[j])
49- @constraint(model, [j = 2 : 4 ], x[nh + 1 , j] == xf[j])
49+ @constraint(model, x1[1 ] == xs[1 ])
50+ @constraint(model, x2[1 ] == xs[2 ])
51+ @constraint(model, x3[1 ] == xs[3 ])
52+ @constraint(model, x4[1 ] == xs[4 ])
53+ @constraint(model, x2[nh + 1 ] == xf[2 ])
54+ @constraint(model, x3[nh + 1 ] == xf[3 ])
55+ @constraint(model, x4[nh + 1 ] == xf[4 ])
5056
5157 return model
52- end
58+ end
0 commit comments