@@ -24,25 +24,26 @@ function quadrotor_test()
2424 itr2 = [(j, xf[j]) for j in 1 : n]
2525
2626 model = Model ()
27- @variable (model, x[1 : (N+ 1 ), 1 : n])
27+ @variable (model, x[1 : (N + 1 ), 1 : n])
2828 @variable (model, u[1 : N, 1 : p])
2929
3030 @constraint (model, start[i in 1 : n], x[1 , i] == x0_val[i], container = container)
3131
32- @constraint (model, [i in 1 : N], x[i+ 1 , 1 ] == x[i, 1 ] + x[i, 2 ] * dt, container = container)
33- @constraint (model, [i in 1 : N], x[i+ 1 , 2 ] == x[i, 2 ] + (u[i, 1 ]) * dt, container = container)
34- @constraint (model, [i in 1 : N], x[i+ 1 , 3 ] == x[i, 3 ] + x[i, 4 ] * dt, container = container)
35- @constraint (model, [i in 1 : N], x[i+ 1 , 4 ] == x[i, 4 ] + (u[i, 2 ]) * dt, container = container)
36- @constraint (model, [i in 1 : N], x[i+ 1 , 5 ] == x[i, 5 ] + x[i, 6 ] * dt, container = container)
37- @constraint (model, [i in 1 : N], x[i+ 1 , 6 ] == x[i, 6 ] + (u[i, 3 ] - g) * dt, container = container)
38- @constraint (model, [i in 1 : N], x[i+ 1 , 7 ] == x[i, 7 ] + u[i, 1 ] * dt, container = container)
39- @constraint (model, [i in 1 : N], x[i+ 1 , 8 ] == x[i, 8 ] + u[i, 2 ] * dt, container = container)
40- @constraint (model, [i in 1 : N], x[i+ 1 , 9 ] == x[i, 9 ] + u[i, 4 ] * dt, container = container)
41-
42- @objective (model, Min,
32+ @constraint (model, [i in 1 : N], x[i + 1 , 1 ] == x[i, 1 ] + x[i, 2 ] * dt, container = container)
33+ @constraint (model, [i in 1 : N], x[i + 1 , 2 ] == x[i, 2 ] + (u[i, 1 ]) * dt, container = container)
34+ @constraint (model, [i in 1 : N], x[i + 1 , 3 ] == x[i, 3 ] + x[i, 4 ] * dt, container = container)
35+ @constraint (model, [i in 1 : N], x[i + 1 , 4 ] == x[i, 4 ] + (u[i, 2 ]) * dt, container = container)
36+ @constraint (model, [i in 1 : N], x[i + 1 , 5 ] == x[i, 5 ] + x[i, 6 ] * dt, container = container)
37+ @constraint (model, [i in 1 : N], x[i + 1 , 6 ] == x[i, 6 ] + (u[i, 3 ] - g) * dt, container = container)
38+ @constraint (model, [i in 1 : N], x[i + 1 , 7 ] == x[i, 7 ] + u[i, 1 ] * dt, container = container)
39+ @constraint (model, [i in 1 : N], x[i + 1 , 8 ] == x[i, 8 ] + u[i, 2 ] * dt, container = container)
40+ @constraint (model, [i in 1 : N], x[i + 1 , 9 ] == x[i, 9 ] + u[i, 4 ] * dt, container = container)
41+
42+ @objective (
43+ model, Min,
4344 lazy_sum (0.5 * R[j] * (u[i, j]^ 2 ) for i in 1 : N, j in 1 : p) +
44- lazy_sum (0.5 * Q[it[2 ]] * (x[it[1 ], it[2 ]] - it[3 ])^ 2 for it in itr1) +
45- lazy_sum (0.5 * Qf[it[1 ]] * (x[N+ 1 , it[1 ]] - it[2 ])^ 2 for it in itr2),
45+ lazy_sum (0.5 * Q[it[2 ]] * (x[it[1 ], it[2 ]] - it[3 ])^ 2 for it in itr1) +
46+ lazy_sum (0.5 * Qf[it[1 ]] * (x[N + 1 , it[1 ]] - it[2 ])^ 2 for it in itr2),
4647 )
4748
4849 return model
@@ -83,32 +84,33 @@ function parametric_genopt_test()
8384 @variable (model, par1 in MOI. Parameter (2.0 ))
8485 @variable (model, par2 in MOI. Parameter (3.0 ))
8586
86- @variable (model, x[1 : (N+ 1 ), 1 : n])
87+ @variable (model, x[1 : (N + 1 ), 1 : n])
8788 @variable (model, u[1 : N, 1 : p])
8889
8990 @constraint (model, start[i in 1 : n], x[1 , i] == x0_val[i], container = container)
9091
91- @constraint (model, [i in 1 : N], x[i+ 1 , 1 ] == x[i, 1 ] + x[i, 2 ] * dt, container = container)
92- @constraint (model, [i in 1 : N], x[i+ 1 , 2 ] == x[i, 2 ] + (u[i, 1 ]) * dt, container = container)
93- @constraint (model, [i in 1 : N], x[i+ 1 , 3 ] == x[i, 3 ] + x[i, 4 ] * dt, container = container)
94- @constraint (model, [i in 1 : N], x[i+ 1 , 4 ] == x[i, 4 ] + (u[i, 2 ]) * dt, container = container)
95- @constraint (model, [i in 1 : N], x[i+ 1 , 5 ] == x[i, 5 ] + x[i, 6 ] * dt, container = container)
96- @constraint (model, [i in 1 : N], x[i+ 1 , 6 ] == x[i, 6 ] + (u[i, 3 ] - g) * dt, container = container)
97- @constraint (model, [i in 1 : N], x[i+ 1 , 7 ] == x[i, 7 ] + u[i, 1 ] * dt, container = container)
98- @constraint (model, [i in 1 : N], x[i+ 1 , 8 ] == x[i, 8 ] + u[i, 2 ] * dt, container = container)
99- @constraint (model, [i in 1 : N], x[i+ 1 , 9 ] == x[i, 9 ] + u[i, 4 ] * dt, container = container)
100-
101- @objective (model, Min,
92+ @constraint (model, [i in 1 : N], x[i + 1 , 1 ] == x[i, 1 ] + x[i, 2 ] * dt, container = container)
93+ @constraint (model, [i in 1 : N], x[i + 1 , 2 ] == x[i, 2 ] + (u[i, 1 ]) * dt, container = container)
94+ @constraint (model, [i in 1 : N], x[i + 1 , 3 ] == x[i, 3 ] + x[i, 4 ] * dt, container = container)
95+ @constraint (model, [i in 1 : N], x[i + 1 , 4 ] == x[i, 4 ] + (u[i, 2 ]) * dt, container = container)
96+ @constraint (model, [i in 1 : N], x[i + 1 , 5 ] == x[i, 5 ] + x[i, 6 ] * dt, container = container)
97+ @constraint (model, [i in 1 : N], x[i + 1 , 6 ] == x[i, 6 ] + (u[i, 3 ] - g) * dt, container = container)
98+ @constraint (model, [i in 1 : N], x[i + 1 , 7 ] == x[i, 7 ] + u[i, 1 ] * dt, container = container)
99+ @constraint (model, [i in 1 : N], x[i + 1 , 8 ] == x[i, 8 ] + u[i, 2 ] * dt, container = container)
100+ @constraint (model, [i in 1 : N], x[i + 1 , 9 ] == x[i, 9 ] + u[i, 4 ] * dt, container = container)
101+
102+ @objective (
103+ model, Min,
102104 lazy_sum (0.5 * R[j] * (u[i, j]^ 2 ) for i in 1 : N, j in 1 : p) +
103- lazy_sum (0.5 * Q[it[2 ]] * (x[it[1 ], it[2 ]] - it[3 ])^ 2 for it in itr1) +
104- lazy_sum (0.5 * Qf[it[1 ]] * (x[N+ 1 , it[1 ]] - it[2 ])^ 2 for it in itr2),
105+ lazy_sum (0.5 * Q[it[2 ]] * (x[it[1 ], it[2 ]] - it[3 ])^ 2 for it in itr1) +
106+ lazy_sum (0.5 * Qf[it[1 ]] * (x[N + 1 , it[1 ]] - it[2 ])^ 2 for it in itr2),
105107 )
106108
107109 return model
108110end
109111
110112function runtests ()
111- @testset " GenOpt extension test" begin
113+ return @testset " GenOpt extension test" begin
112114 @testset " Quadrotor with ExaModels.Optimizer" begin
113115 model = quadrotor_test ()
114116
@@ -117,7 +119,7 @@ function runtests()
117119 optimize! (model)
118120
119121 obj = objective_value (model)
120- @test isapprox (obj, 8.1797 , atol = 1e -3 )
122+ @test isapprox (obj, 8.1797 , atol = 1.0e -3 )
121123
122124 # Verify that FunctionGenerator structure is retained in ExaModels
123125 # (not dismantled into individual scalar constraints).
@@ -146,7 +148,7 @@ function runtests()
146148 optimize! (model)
147149
148150 # Same problem as quadrotor, should give same objective
149- @test isapprox (objective_value (model), 8.1797 , atol = 1e -3 )
151+ @test isapprox (objective_value (model), 8.1797 , atol = 1.0e -3 )
150152 end
151153 end
152154end
0 commit comments