@@ -9,30 +9,26 @@ Q = 5*[1.0 0; 0 1.0]
99R = 3.0
1010x₀ = [3 , 1 ]
1111N = 10
12+ dim_x = 2
13+ dim_u = 1
1214
1315cost (uₖ,xₖ) = quadform (xₖ,Q) + R* square (uₖ)
14- set_constraints (uₖ,xₖ) = [
16+ dynamics (uₖ,xₖ) = A* xₖ + B* uₖ
17+ constraints (uₖ,xₖ) = [
1518 uₖ <= 1 , uₖ >= - 1 ,
1619 xₖ[1 ] <= 3 , xₖ[1 ] >= - 3 ,
1720 xₖ[2 ] <= 2 , xₖ[2 ] >= - 2
1821]
19- dynamics (uₖ,xₖ,xₖplus1) = xₖplus1 == A* xₖ + B* uₖ
20-
21- one_step = one_step_bifunction (cost, set_constraints, A, B)
2222
23+ one_step = one_step_bifunction (dim_x,dim_u,cost, constraints, dynamics)
2324MPC_bifunc = MPC_bifunction (one_step, N)
2425
25- us = [Variable (1 ) for i in 1 : N]
26- # x1 = Variable(2)
27- # x1 = repeat([1],2)
26+ us = [Variable (1 ) for i in 1 : N- 1 ]
2827x_N = Variable (2 )
29- # x_N = zeros(2)
3028
3129MPC_prob = to_cvx (MPC_bifunc, us, x₀, x_N)
3230
33- # fix!(x1, repeat([1], 2))
3431solve! (MPC_prob, SCS. Optimizer)
35- o = MPC_prob. optval
3632
3733function simulate (A, B, x₀, us, N)
3834 x = x₀
@@ -41,3 +37,28 @@ function simulate(A, B, x₀, us, N)
4137 end
4238 return x
4339end
40+
41+ # ## Compare to hand written implementation
42+ xs = Variable (2 , N)
43+ us = Variable (1 , N- 1 )
44+
45+ constraints = Constraint[
46+ xs[:, i+ 1 ] == A* xs[:,i] + B* us[:,i] for i in 1 : N- 1
47+ ]
48+
49+ for i in 1 : N- 1
50+ push! (constraints, xs[:,i][1 ] <= 3 )
51+ push! (constraints, xs[:,i][1 ] >= - 3 )
52+ push! (constraints, xs[:,i][2 ] <= 2 )
53+ push! (constraints, xs[:,i][2 ] >= - 2 )
54+ push! (constraints, us[:,i] <= 1 )
55+ push! (constraints, us[:,i] >= - 1 )
56+ end
57+
58+ push! (constraints, xs[:,1 ] == x₀)
59+
60+ objective = sum ([quadform (xs[:,i], Q) + R* square (us[:,i]) for i in 1 : N- 1 ])
61+
62+ prob = minimize (objective, constraints)
63+
64+ solve! (prob, SCS. Optimizer)
0 commit comments