-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBAS7D.cpp
89 lines (65 loc) · 2.58 KB
/
BAS7D.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
// Run: make
// ./BAS7D
// Created by Ben Wooding 6 Jan 2024
#include <iostream>
#include <vector>
#include <functional>
#include "../../src/IMDP.h"
#include <armadillo>
#include <chrono>
using namespace arma;
using namespace std;
/*
################################# PARAMETERS ###############################################
*/
// Set the dimensions
const int dim_x = 7;
const int dim_u = 0;
const int dim_w = 0;
// Define lower bounds, upper bounds, and step sizes
// States
const vec ss_lb = {-0.5, -0.5, -0.5, -0.5,-0.5,-0.5,-0.5};
const vec ss_ub = {0.5, 0.5, 0.5, 0.5,0.5,0.5,0.5};
const vec ss_eta = {0.05, 0.05, 0.5, 0.5,0.5,0.5,0.5};
//standard deviation of each dimension
const vec sigma = {sqrt(1/51.2821), sqrt(1/50.0),sqrt(1/21.7865), sqrt(1/23.5294),sqrt(1/25.1889),sqrt(1/26.5252),sqrt(1/91.7431)};
//dynamics - 1 parameter
auto dynamics = [](const vec& x) -> vec {
vec xx(dim_x);
const mat A = {{0.9678, 0, 0.0036, 0, 0.0036, 0, 0.0036}, {0, 0.9682, 0, 0.0034, 0, 0.0034, 0.0034}, {0.0106, 0, 0.9494, 0, 0, 0, 0}, {0, 0.0097, 0, 0.9523, 0, 0, 0}, {0.0106, 0, 0, 0, 0.9494, 0, 0}, {0, 0.0097, 0, 0, 0, 0.9523, 0}, {0.0106, 0.0097, 0, 0, 0, 0, 0.9794}};
xx = A*x;
return xx;
};
/*
################################# MAIN FUNCTION ##############################################
*/
int main() {
/* ###### create IMDP object ###### */
IMDP mdp(dim_x,dim_u,dim_w);
/* ###### create finite sets for the different spaces ###### */
mdp.setStateSpace(ss_lb, ss_ub, ss_eta);
/*###### save the files ######*/
mdp.saveStateSpace();
/*###### set dynamics and noise ######*/
mdp.setDynamics(dynamics);
mdp.setNoise(NoiseType::NORMAL);
mdp.setStdDev(sigma);
/* ###### calculate abstraction for avoid vectors ######*/
mdp.minAvoidTransitionVector();
mdp.maxAvoidTransitionVector();
/* ###### save avoid vectors ######*/
mdp.saveMinAvoidTransitionVector();
mdp.saveMaxAvoidTransitionVector();
/* ###### calculate abstraction for transition matrices ######*/
mdp.transitionMatrixBounds();
/* ###### save transition matrices ######*/
mdp.saveMinTransitionMatrix();
mdp.saveMaxTransitionMatrix();
/* ###### verification over infinite horizon (true = pessimistic, false = optimistic) ######*/
mdp.infiniteHorizonSafeController(true);
/* ###### verification over finite horizon (true = pessimistic, false = optimistic) ######*/
//mdp.finiteHorizonSafeController(true,10);
/* ###### save controller ######*/
mdp.saveController();
return 0;
}