1
+ using LinearAlgebra, LazySets
2
+ using IntervalMDP, IntervalSySCoRe
3
+
4
+
5
+ function building_automation_system (; sampling_time= 0.1 )
6
+ # TODO : Control?
7
+ f (x, u) = [x[1 ] + x[2 ] * sampling_time, x[2 ] + (- x[1 ] + (1 - x[1 ])^ 2 * x[2 ]) * sampling_time + u[1 ]]
8
+
9
+ w_variance = [0.2 , 0.2 ]
10
+ w_stddev = sqrt .(w_variance)
11
+
12
+ dyn = LinearAdditiveNoiseDynamics (f, 2 , 0 , AdditiveDiagonalGaussianNoise (w_stddev))
13
+
14
+ initial_region = EmptySet (2 )
15
+ reach_region = Hyperrectangle (; low= [- 1.4 , - 2.9 ], high= [- 0.7 , - 2.0 ])
16
+ avoid_region = EmptySet (2 )
17
+
18
+ sys = System (dyn, initial_region, reach_region, avoid_region)
19
+
20
+ return sys
21
+ end
22
+
23
+ function building_automation_system_decoupled (; state_split= (50 , 50 ), input_split= 10 )
24
+ sys = c ()
25
+
26
+ X = Hyperrectangle (; low= [- 3.0 , - 3.0 ], high= [3.0 , 3.0 ])
27
+ state_abs = StateUniformGridSplit (X, state_split)
28
+
29
+ U = Hyperrectangle (; low= [- 1.0 ], high= [1.0 ])
30
+ input_abs = InputLinRange (U, input_split)
31
+
32
+ target_model = DecoupledIMDP ()
33
+
34
+ mdp, reach, avoid = abstraction (sys, state_abs, input_abs, target_model)
35
+
36
+ return mdp, reach, avoid
37
+ end
38
+
39
+ function main ()
40
+ mdp, reach, avoid = van_der_pol_decoupled (; state_split= (50 , 50 ), input_split= 10 )
41
+
42
+ prop = FiniteTimeReachAvoid (reach, avoid, 6 )
43
+ spec = Specification (prop, Optimistic, Minimize)
44
+ prob = Problem (mdp, spec)
45
+
46
+ V_unsafety, k, res = value_iteration (prob)
47
+ V_safety = 1.0 .- V_unsafety
48
+ end
0 commit comments