diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html new file mode 100644 index 0000000..390ee12 --- /dev/null +++ b/404.html @@ -0,0 +1,503 @@ + + + +
+ + + + + + + + + + + + + + + + ++
+ + +Sensor placement and informative path planning methods in this package:
+continuous_sgp
: Provides an SGP-based sensor placement approach that is optimized using gradient descentgreedy_sgp
: Provides an SGP-based sensor placement approach that is optimized using a greedy algorithmcma_es
: Provides a genetic algorithm (CMA-ES) based approach that maximizes mutual-information to get sensor placementsgreedy_mi
: Provides a greedy algorithm based approach that maximizes mutual-information to get sensor placementsbo
: Provides a Bayesian optimization based approach that maximizes mutual-information to get sensor placementscontinuous_sgp(num_inducing, X_train, noise_variance, kernel, transform=None, Xu_init=None, Xu_time=None, orientation=False, **kwargs)
+
+Get sensor placement solutions using the Continuous-SGP method
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
num_inducing |
+
+ int
+ |
+
+
+
+ Number of inducing points + |
+ + required + | +
X_train |
+
+ ndarray
+ |
+
+
+
+ (n, d); Unlabeled random sampled training points + |
+ + required + | +
noise_variance |
+
+ float
+ |
+
+
+
+ data variance + |
+ + required + | +
kernel |
+
+ Kernel
+ |
+
+
+
+ gpflow kernel function + |
+ + required + | +
transform |
+
+ Transform
+ |
+
+
+
+ Transform object + |
+
+ None
+ |
+
Xu_init |
+
+ ndarray
+ |
+
+
+
+ (m, d); Initial inducing points + |
+
+ None
+ |
+
Xu_time |
+
+ ndarray
+ |
+
+
+
+ (t, d); Temporal inducing points used in spatio-temporal models + |
+
+ None
+ |
+
orientation |
+
+ bool
+ |
+
+
+
+ If True, a additionl dimension is added to the + inducing points to represent the FoV orientation + |
+
+ False
+ |
+
Returns:
+Name | Type | +Description | +
---|---|---|
sgpr |
+ AugmentedSGPR
+ |
+
+
+
+ Optimized sparse Gaussian process model + |
+
loss |
+ ndarray
+ |
+
+
+
+ Loss values computed during training + |
+
sgptools/models/continuous_sgp.py
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 |
|
GreedySGP
+
+
+Helper class to compute SGP's ELBO/optimization bound for a given set of sensor locations.
+Used by get_greedy_sgp_sol
function to compute the solution sensor placements using the Greedy-SGP method.
Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
num_inducing |
+
+ int
+ |
+
+
+
+ Number of inducing points + |
+ + required + | +
S |
+
+ ndarray
+ |
+
+
+
+ (n, d); Candidate sensor placement locations + |
+ + required + | +
V |
+
+ ndarray
+ |
+
+
+
+ (n, d); Locations in the environment used to approximate the monitoring regions + |
+ + required + | +
noise_variance |
+
+ float
+ |
+
+
+
+ Data noise variance + |
+ + required + | +
kernel |
+
+ Kernel
+ |
+
+
+
+ gpflow kernel function + |
+ + required + | +
Xu_fixed |
+
+ ndarray
+ |
+
+
+
+ (m, d); Inducing points that are not optimized and are always + added to the inducing points set during loss function computation + |
+
+ None
+ |
+
transform |
+
+ Transform
+ |
+
+
+
+ Transform object + |
+
+ None
+ |
+
sgptools/models/greedy_sgp.py
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 |
|
bound(x)
+
+Computes the SGP's optimization bound using the inducing points x
Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
x |
+
+ ndarray
+ |
+
+
+
+ (n, d); Inducing points + |
+ + required + | +
Returns:
+Name | Type | +Description | +
---|---|---|
elbo |
+ float
+ |
+
+
+
+ Evidence lower bound/SGP's optimization bound value + |
+
sgptools/models/greedy_sgp.py
50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 |
|
get_greedy_sgp_sol(num_sensors, candidates, X_train, noise_variance, kernel, transform=None)
+
+Get sensor placement solutions using the Greedy-SGP method. Uses a greedy algorithm to +select sensor placements from a given discrete set of candidates locations.
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
num_sensors |
+
+ int
+ |
+
+
+
+ Number of sensor locations to optimize + |
+ + required + | +
candidates |
+
+ ndarray
+ |
+
+
+
+ (n, d); Candidate sensor placement locations + |
+ + required + | +
X_train |
+
+ ndarray
+ |
+
+
+
+ (n, d); Locations in the environment used to approximate the monitoring regions + |
+ + required + | +
noise_variance |
+
+ float
+ |
+
+
+
+ data variance + |
+ + required + | +
kernel |
+
+ Kernel
+ |
+
+
+
+ gpflow kernel function + |
+ + required + | +
transform |
+
+ Transform
+ |
+
+
+
+ Transform object + |
+
+ None
+ |
+
Returns:
+Name | Type | +Description | +
---|---|---|
Xu |
+ ndarray
+ |
+
+
+
+ (m, d); Solution sensor placement locations + |
+
sgptools/models/greedy_sgp.py
71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 |
|
GreedyMI
+
+
+Helper class to compute mutual information using a Gaussian process for a given set of sensor locations.
+Used by get_greedy_mi_sol
function to compute the solution sensor placements using the Greedy-MI method.
Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
S |
+
+ ndarray
+ |
+
+
+
+ (n, d); Candidate sensor placement locations + |
+ + required + | +
V |
+
+ ndarray
+ |
+
+
+
+ (n, d); Locations in the environment used to approximate the monitoring regions + |
+ + required + | +
noise_variance |
+
+ float
+ |
+
+
+
+ data variance + |
+ + required + | +
kernel |
+
+ Kernel
+ |
+
+
+
+ gpflow kernel function + |
+ + required + | +
transform |
+
+ Transform
+ |
+
+
+
+ Transform object + |
+
+ None
+ |
+
sgptools/models/greedy_mi.py
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 |
|
get_greedy_mi_sol(num_sensors, candidates, X_train, noise_variance, kernel, transform=None, optimizer='naive')
+
+Get sensor placement solutions using the GP-based mutual information approach (submodular objective function). +Uses a greedy algorithm to select sensor placements from a given discrete set of candidates locations.
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
num_sensors |
+
+ int
+ |
+
+
+
+ Number of sensor locations to optimize + |
+ + required + | +
candidates |
+
+ ndarray
+ |
+
+
+
+ (n, d); Candidate sensor placement locations + |
+ + required + | +
X_train |
+
+ ndarray
+ |
+
+
+
+ (n, d); Locations in the environment used to approximate the monitoring regions + |
+ + required + | +
noise_variance |
+
+ float
+ |
+
+
+
+ data variance + |
+ + required + | +
kernel |
+
+ Kernel
+ |
+
+
+
+ gpflow kernel function + |
+ + required + | +
transform |
+
+ Transform
+ |
+
+
+
+ Transform object + |
+
+ None
+ |
+
optimizer |
+
+ str
+ |
+
+
+
+ Name of an optimizer available in the apricot library + |
+
+ 'naive'
+ |
+
Returns:
+Name | Type | +Description | +
---|---|---|
Xu |
+ ndarray
+ |
+
+
+
+ (m, d); Solution sensor placement locations + |
+
sgptools/models/greedy_mi.py
78 + 79 + 80 + 81 + 82 + 83 + 84 + 85 + 86 + 87 + 88 + 89 + 90 + 91 + 92 + 93 + 94 + 95 + 96 + 97 + 98 + 99 +100 +101 +102 +103 +104 +105 |
|
BayesianOpt
+
+
+Class for optimizing sensor placements using Bayesian Optimization
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
X_train |
+
+ ndarray
+ |
+
+
+
+ (n, d); Locations in the environment used to approximate the monitoring regions + |
+ + required + | +
noise_variance |
+
+ float
+ |
+
+
+
+ data variance + |
+ + required + | +
kernel |
+
+ Kernel
+ |
+
+
+
+ gpflow kernel function + |
+ + required + | +
sgptools/models/bo.py
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 +89 +90 +91 +92 +93 +94 |
|
objective(**kwargs)
+
+Computes the objective function (mutual information) for the sensor placement problem
+ +sgptools/models/bo.py
44 +45 +46 +47 +48 +49 +50 +51 |
|
optimize(num_sensors=10, max_steps=100, X_init=None, init_points=10)
+
+Optimizes the sensor placements using Bayesian Optimization without any constraints
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
num_sensors |
+
+ int
+ |
+
+
+
+ Number of sensor locations to optimize + |
+
+ 10
+ |
+
max_steps |
+
+ int
+ |
+
+
+
+ Maximum number of optimization steps + |
+
+ 100
+ |
+
X_init |
+
+ ndarray
+ |
+
+
+
+ (m, d); Initial inducing points + |
+
+ None
+ |
+
init_points |
+
+ int
+ |
+
+
+
+ How many steps of random exploration you want to perform. + Random exploration can help by diversifying the exploration space. + |
+
+ 10
+ |
+
Returns:
+Name | Type | +Description | +
---|---|---|
Xu |
+ ndarray
+ |
+
+
+
+ (m, d); Solution sensor placement locations + |
+
sgptools/models/bo.py
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 +89 +90 +91 +92 +93 +94 |
|
CMA_ES
+
+
+Class for optimizing sensor placements using CMA-ES (a genetic algorithm)
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
X_train |
+
+ ndarray
+ |
+
+
+
+ (n, d); Locations in the environment used to approximate the monitoring regions + |
+ + required + | +
noise_variance |
+
+ float
+ |
+
+
+
+ data variance + |
+ + required + | +
kernel |
+
+ Kernel
+ |
+
+
+
+ gpflow kernel function + |
+ + required + | +
distance_budget |
+
+ float
+ |
+
+
+
+ Distance budget for when treating the inducing points + as waypoints of a path + |
+
+ None
+ |
+
num_robots |
+
+ int
+ |
+
+
+
+ Number of robots, used when modeling + multi-robot IPP with a distance budget + |
+
+ 1
+ |
+
transform |
+
+ Transform
+ |
+
+
+
+ Transform object + |
+
+ None
+ |
+
sgptools/models/cma_es.py
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 + 89 + 90 + 91 + 92 + 93 + 94 + 95 + 96 + 97 + 98 + 99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 |
|
constraint(X)
+
+Constraint function for the optimization problem (constraint to limit the boundary of the region) +Does not work well with CMA-ES as it is a step function and is not continuous
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
X |
+
+ ndarray
+ |
+
+
+
+ (n, d); Current sensor placement locations + |
+ + required + | +
sgptools/models/cma_es.py
61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 |
|
coptimize(num_sensors=10, max_steps=100, tol=1e-11)
+
+Optimizes the SP objective function using CMA-ES with the constraints +to ensure that the sensors are placed within the boundaries of the region
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
num_sensors |
+
+ int
+ |
+
+
+
+ Number of sensor locations to optimize + |
+
+ 10
+ |
+
max_steps |
+
+ int
+ |
+
+
+
+ Maximum number of optimization steps + |
+
+ 100
+ |
+
tol |
+
+ float
+ |
+
+
+
+ Convergence tolerance to decide when to stop optimization + |
+
+ 1e-11
+ |
+
Returns:
+Name | Type | +Description | +
---|---|---|
Xu |
+ ndarray
+ |
+
+
+
+ (m, d); Solution sensor placement locations + |
+
sgptools/models/cma_es.py
166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 |
|
distance_constraint(X)
+
+Constraint function for the optimization problem (constraint to limit the total travel distance) +Does not work well with CMA-ES as it is a step function and is not continuous
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
X |
+
+ ndarray
+ |
+
+
+
+ (n, d); Current sensor placement locations + |
+ + required + | +
sgptools/models/cma_es.py
73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 |
|
doptimize(num_sensors=10, max_steps=100, tol=1e-11)
+
+Optimizes the SP objective function using CMA-ES with a distance budget constraint
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
num_sensors |
+
+ int
+ |
+
+
+
+ Number of sensor locations to optimize + |
+
+ 10
+ |
+
max_steps |
+
+ int
+ |
+
+
+
+ Maximum number of optimization steps + |
+
+ 100
+ |
+
tol |
+
+ float
+ |
+
+
+
+ Convergence tolerance to decide when to stop optimization + |
+
+ 1e-11
+ |
+
Returns:
+Name | Type | +Description | +
---|---|---|
Xu |
+ ndarray
+ |
+
+
+
+ (m, d); Solution sensor placement locations + |
+
sgptools/models/cma_es.py
142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 |
|
objective(X)
+
+Objective function (GP-based Mutual Information)
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
X |
+
+ ndarray
+ |
+
+
+
+ (n, d); Initial sensor placement locations + |
+ + required + | +
sgptools/models/cma_es.py
88 + 89 + 90 + 91 + 92 + 93 + 94 + 95 + 96 + 97 + 98 + 99 +100 +101 +102 +103 +104 |
|
optimize(num_sensors=10, max_steps=5000, tol=1e-11, X_init=None)
+
+Optimizes the SP objective function using CMA-ES without any constraints
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
num_sensors |
+
+ int
+ |
+
+
+
+ Number of sensor locations to optimize + |
+
+ 10
+ |
+
max_steps |
+
+ int
+ |
+
+
+
+ Maximum number of optimization steps + |
+
+ 5000
+ |
+
tol |
+
+ float
+ |
+
+
+
+ Convergence tolerance to decide when to stop optimization + |
+
+ 1e-11
+ |
+
X_init |
+
+ ndarray
+ |
+
+
+
+ (m, d); Initial inducing points + |
+
+ None
+ |
+
Returns:
+Name | Type | +Description | +
---|---|---|
Xu |
+ ndarray
+ |
+
+
+
+ (m, d); Solution sensor placement locations + |
+
sgptools/models/cma_es.py
106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 |
|
update(noise_variance, kernel)
+
+Update GP noise variance and kernel function parameters
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
noise_variance |
+
+ float
+ |
+
+
+
+ data variance + |
+ + required + | +
kernel |
+
+ Kernel
+ |
+
+
+
+ gpflow kernel function + |
+ + required + | +
sgptools/models/cma_es.py
51 +52 +53 +54 +55 +56 +57 +58 +59 |
|
Core modules in this package:
+augmented_gpr
: Provides a Gaussian process model with expand and aggregate functionsaugmented_sgpr
: Provides a sparse Gaussian process model with update, expand, and aggregate functionsosgpr
: Provides a streaming sparse Gaussian process model along with initialization functiontransformations
: Provides transforms to model complex sensor field of views and handle informative path planningProvides a Gaussian process model with expand and aggregate functions
+ + + +AugmentedGPR
+
+
+
+ Bases: GPR
GPR model from the GPFlow library augmented to use a transform object's +expand and aggregate functions on the data points where necessary.
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
data |
+
+ tuple
+ |
+
+
+
+ (X, y) ndarrays with inputs (n, d) and labels (n, 1) + |
+ + required + | +
kernel |
+
+ Kernel
+ |
+
+
+
+ gpflow kernel function + |
+ + required + | +
noise_variance |
+
+ float
+ |
+
+
+
+ data variance + |
+ + required + | +
transform |
+
+ Transform
+ |
+
+
+
+ Transform object + |
+ + required + | +
sgptools/models/core/augmented_gpr.py
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 +89 +90 +91 +92 +93 |
|
Provides a sparse Gaussian process model with update, expand, and aggregate functions
+ + + +AugmentedSGPR
+
+
+
+ Bases: SGPR
SGPR model from the GPFlow library augmented to use a transform object's +expand and aggregate functions on the inducing points where necessary. The object +has an additional update function to update the kernel and noise variance parameters +(currently, the online updates part works only with RBF kernels).
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
data |
+
+ tuple
+ |
+
+
+
+ (X, y) ndarrays with inputs (n, d) and labels (n, 1) + |
+ + required + | +
kernel |
+
+ Kernel
+ |
+
+
+
+ gpflow kernel function + |
+ + required + | +
noise_variance |
+
+ float
+ |
+
+
+
+ data variance + |
+ + required + | +
inducing_variable |
+
+ ndarray
+ |
+
+
+
+ (m, d); Initial inducing points + |
+ + required + | +
transform |
+
+ Transform
+ |
+
+
+
+ Transform object + |
+ + required + | +
inducing_variable_time |
+
+ ndarray
+ |
+
+
+
+ (m, d); Temporal dimensions of the inducing points, + used when modeling spatio-temporal IPP + |
+
+ None
+ |
+
sgptools/models/core/augmented_sgpr.py
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 + 89 + 90 + 91 + 92 + 93 + 94 + 95 + 96 + 97 + 98 + 99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 |
|
elbo()
+
+Construct a tensorflow function to compute the bound on the marginal +likelihood. For a derivation of the terms in here, see the associated +SGPR notebook.
+ +sgptools/models/core/augmented_sgpr.py
116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 |
|
predict_f(Xnew, full_cov=False, full_output_cov=False)
+
+Compute the mean and variance of the latent function at some new points +Xnew. For a derivation of the terms in here, see the associated SGPR +notebook.
+ +sgptools/models/core/augmented_sgpr.py
132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 |
|
update(noise_variance, kernel)
+
+Update SGP noise variance and kernel function parameters
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
noise_variance |
+
+ float
+ |
+
+
+
+ data variance + |
+ + required + | +
kernel |
+
+ Kernel
+ |
+
+
+
+ gpflow kernel function + |
+ + required + | +
sgptools/models/core/augmented_sgpr.py
74 +75 +76 +77 +78 +79 +80 +81 +82 +83 |
|
Provides a streaming sparse Gaussian process model along with initialization function
+ + + +OSGPR_VFE
+
+
+
+ Bases: GPModel
, InternalDataTrainingLossMixin
Online Sparse Variational GP regression model from streaming_sparse_gp
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
data |
+
+ tuple
+ |
+
+
+
+ (X, y) ndarrays with inputs (n, d) and labels (n, 1) + |
+ + required + | +
kernel |
+
+ Kernel
+ |
+
+
+
+ gpflow kernel function + |
+ + required + | +
mu_old |
+
+ ndarray
+ |
+
+
+
+ mean of old |
+ + required + | +
Su_old |
+
+ ndarray
+ |
+
+
+
+ posterior covariance of old |
+ + required + | +
Kaa_old |
+
+ ndarray
+ |
+
+
+
+ prior covariance of old |
+ + required + | +
Z_old |
+
+ ndarray
+ |
+
+
+
+ (m_old, d): Old initial inducing points + |
+ + required + | +
Z |
+
+ ndarray
+ |
+
+
+
+ (m_new, d): New initial inducing points + |
+ + required + | +
mean_function |
+
+ function
+ |
+
+
+
+ GP mean function + |
+
+ None
+ |
+
sgptools/models/core/osgpr.py
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 + 89 + 90 + 91 + 92 + 93 + 94 + 95 + 96 + 97 + 98 + 99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 |
|
maximum_log_likelihood_objective()
+
+Construct a tensorflow function to compute the bound on the marginal +likelihood.
+ +sgptools/models/core/osgpr.py
137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 |
|
predict_f(Xnew, full_cov=False)
+
+Compute the mean and variance of the latent function at some new points +Xnew.
+ +sgptools/models/core/osgpr.py
191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 |
|
update(data)
+
+Configure the OSGPR to adapt to a new batch of data. +Note: The OSGPR needs to be trained using gradient-based approaches after update.
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
data |
+
+ tuple
+ |
+
+
+
+ (X, y) ndarrays with new batch of inputs (n, d) and labels (n, 1) + |
+ + required + | +
sgptools/models/core/osgpr.py
60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 |
|
init_osgpr(X_train, num_inducing=10, lengthscales=1.0, variance=1.0, noise_variance=0.001)
+
+Initialize a VFE OSGPR model with an RBF kernel with +unit variance and lengthcales, and 0.001 noise variance. +Used in the Online Continuous SGP approach.
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
X_train |
+
+ ndarray
+ |
+
+
+
+ (n, d); Unlabeled random sampled training points. + They only effect the initial inducing point locations, + i.e., limits them to the bounds of the data + |
+ + required + | +
num_inducing |
+
+ int
+ |
+
+
+
+ Number of inducing points + |
+
+ 10
+ |
+
lengthscales |
+
+ ndarray or list
+ |
+
+
+
+ Kernel lengthscale of each dimension of the data + |
+
+ 1.0
+ |
+
variance |
+
+ float
+ |
+
+
+
+ Kernel variance + |
+
+ 1.0
+ |
+
noise_variance |
+
+ float
+ |
+
+
+
+ Data variance + |
+
+ 0.001
+ |
+
Returns:
+Name | Type | +Description | +
---|---|---|
online_param |
+ OSGPR_VFE
+ |
+
+
+
+ Initialized online sparse Gaussian process model + |
+
sgptools/models/core/osgpr.py
226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 |
|
Provides transforms to model complex sensor field of views and handle informative path planning
+ + + +IPPTransform
+
+
+
+ Bases: Transform
Transform to model IPP problems
+ + +sampling_rate = 2
sampling_rate > 2
(approx the data collected along the path)num_robots > 1
update_fixed
to freeze the visited waypointsParameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
sampling_rate |
+
+ int
+ |
+
+
+
+ Number of points to sample between each pair of inducing points + |
+
+ 2
+ |
+
distance_budget |
+
+ float
+ |
+
+
+
+ Distance budget for the path + |
+
+ None
+ |
+
num_robots |
+
+ int
+ |
+
+
+
+ Number of robots + |
+
+ 1
+ |
+
Xu_fixed |
+
+ ndarray
+ |
+
+
+
+ (num_robots, num_visited, num_dim); Visited waypoints that don't need to be optimized + |
+
+ None
+ |
+
num_dim |
+
+ int
+ |
+
+
+
+ Dimension of the data collection environment + |
+
+ 2
+ |
+
sensor_model |
+
+ Transform
+ |
+
+
+
+ Transform object to expand each inducing point to |
+
+ None
+ |
+
sgptools/models/core/transformations.py
180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 |
|
aggregate(k)
+
+Applies the aggregation transform to kernel matrices. Checks sensor_model
+ and uses the appropriate aggregation transform.
Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
k |
+
+ tensor
+ |
+
+
+
+ (mp, mp)/(mp, n); Kernel matrix.
+ |
+ + required + | +
Returns:
+Name | Type | +Description | +
---|---|---|
k |
+ tensor
+ |
+
+
+
+ (m, m)/(m, n); Aggregated kernel matrix + |
+
sgptools/models/core/transformations.py
285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 |
|
constraints(Xu)
+
+Computes the distance constraint term that is added to the SGP's optimization function. +Each robot can be assigned a different distance budget.
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
Xu |
+
+ ndarray
+ |
+
+
+
+ Inducing points from which to compute the distance constraints + |
+ + required + | +
Returns:
+Name | Type | +Description | +
---|---|---|
loss |
+ float
+ |
+
+
+
+ distance constraint term + |
+
sgptools/models/core/transformations.py
303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 |
|
distance(Xu)
+
+Computes the distance incured by sequentially visiting the inducing points +ToDo: Change distance from 2d to nd. Currently limited to 2d + to ensure the rotation angle is not included when using + a square FoV sensor.
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
Xu |
+
+ ndarray
+ |
+
+
+
+ Inducing points from which to compute the path lengths + |
+ + required + | +
Returns:
+Name | Type | +Description | +
---|---|---|
dist |
+ float
+ |
+
+
+
+ path lengths + |
+
sgptools/models/core/transformations.py
322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 |
|
expand(Xu, expand_sensor_model=True)
+
+Sample points between each pair of inducing points to form the path
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
Xu |
+
+ ndarray
+ |
+
+
+
+ (num_robots x num_inducing, num_dim); Inducing points in the num_dim dimensional space + |
+ + required + | +
expand_sensor_model |
+
+ bool
+ |
+
+
+
+ Only add the fixed inducing points without other sensor/path transforms, + used for online IPP + |
+
+ True
+ |
+
Returns:
+Name | Type | +Description | +
---|---|---|
Xu |
+ ndarray
+ |
+
+
+
+ Expansion transformed inducing points + |
+
sgptools/models/core/transformations.py
247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 |
|
update_Xu_fixed(Xu_fixed)
+
+Function to update the visited waypoints
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
Xu_fixed |
+
+ ndarray
+ |
+
+
+
+ numpy array (num_robots, num_visited_waypoints, num_dim) + |
+ + required + | +
sgptools/models/core/transformations.py
232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 |
|
SquareHeightTransform
+
+
+
+ Bases: Transform
Non-point Transform to model a height-dependent square FoV. Only works for single robot cases. +ToDo: Convert from single to multi-robot setup and make it compatible with IPPTransform
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
num_points |
+
+ int
+ |
+
+
+
+ Number of points along each side of the FoV + |
+ + required + | +
distance_budget |
+
+ float
+ |
+
+
+
+ Distance budget for the path + |
+
+ None
+ |
+
sgptools/models/core/transformations.py
340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 |
|
expand(Xu)
+
+Applies the expansion transform to the inducing points
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
Xu |
+
+ ndarray
+ |
+
+
+
+ (m, 3); Inducing points in the 3D position space.
+ |
+ + required + | +
Returns:
+Name | Type | +Description | +
---|---|---|
Xu |
+ ndarray
+ |
+
+
+
+ (mp, 2); Inducing points in input space.
+ |
+
sgptools/models/core/transformations.py
358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 |
|
SquareTransform
+
+
+
+ Bases: Transform
Non-point Transform to model a square FoV. Only works for single robot cases. +ToDo: update expand function to handle multi-robot case.
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
length |
+
+ float
+ |
+
+
+
+ Length of the square FoV + |
+ + required + | +
num_side |
+
+ int
+ |
+
+
+
+ Number of points along each side of the FoV + |
+ + required + | +
sgptools/models/core/transformations.py
114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 |
|
expand(Xu)
+
+Applies the expansion transformation to the inducing points
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
Xu |
+
+ ndarray
+ |
+
+
+
+ (1, m, 3); Inducing points in the position and orientation space.
+ |
+ + required + | +
Returns:
+Name | Type | +Description | +
---|---|---|
Xu |
+ ndarray
+ |
+
+
+
+ (mp, 2); Inducing points in input space.
+ |
+
sgptools/models/core/transformations.py
134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 |
|
Transform
+
+
+Base class for transformations of the inducing points, including expansion and aggregation transforms.
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
aggregation_size |
+
+ int
+ |
+
+
+
+ Number of consecutive inducing points to aggregate + |
+
+ None
+ |
+
constraint_weight |
+
+ float
+ |
+
+
+
+ Weight term that controls the importance of the + constraint terms in the SGP's optimization objective + |
+
+ 1.0
+ |
+
sgptools/models/core/transformations.py
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 + 89 + 90 + 91 + 92 + 93 + 94 + 95 + 96 + 97 + 98 + 99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 |
|
aggregate(k)
+
+Applies the aggregation transform to kernel matrices
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
k |
+
+ tensor
+ |
+
+
+
+ (mp, mp)/(mp, n); Kernel matrix.
+ |
+ + required + | +
Returns:
+Name | Type | +Description | +
---|---|---|
k |
+ tensor
+ |
+
+
+
+ (m, m)/(m, n); Aggregated kernel matrix + |
+
sgptools/models/core/transformations.py
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 |
|
constraints(Xu)
+
+Computes the constraint terms that are added to the SGP's optimization function
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
Xu |
+
+ ndarray
+ |
+
+
+
+ Inducing points from which to compute the constraints + |
+ + required + | +
Returns:
+Name | Type | +Description | +
---|---|---|
c |
+ float
+ |
+
+
+
+ constraint terms (eg., distance constraint) + |
+
sgptools/models/core/transformations.py
90 +91 +92 +93 +94 +95 +96 +97 +98 +99 |
|
distance(Xu)
+
+Computes the distance incured by sequentially visiting the inducing points
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
Xu |
+
+ ndarray
+ |
+
+
+
+ Inducing points from which to compute the path length + |
+ + required + | +
Returns:
+Name | Type | +Description | +
---|---|---|
dist |
+ float
+ |
+
+
+
+ path length + |
+
sgptools/models/core/transformations.py
101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 |
|
expand(Xu)
+
+Applies the expansion transform to the inducing points
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
Xu |
+
+ ndarray
+ |
+
+
+
+ Expansion transformed inducing points + |
+ + required + | +
sgptools/models/core/transformations.py
49 +50 +51 +52 +53 +54 +55 |
|
General utilities to support the functionalities of this package:
+data
: Provides utilities to preprocess datasetsgpflow
: Provides utilities to interface with GPflowmetrics
: Provides utilities to quantify the solution qualitymisc
: Provides miscellaneous helper functionstsp
: Provides utilities to run TSP/VRP solverresample_path(waypoints, num_inducing=10)
+
+Function to map path with arbitrary number of waypoints to +inducing points path with fixed number of waypoints
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
waypoints |
+
+ ndarray
+ |
+
+
+
+ (num_waypoints, n_dim); waypoints of path from vrp solver + |
+ + required + | +
num_inducing |
+
+ int
+ |
+
+
+
+ Number of inducing points (waypoints) in the returned path + |
+
+ 10
+ |
+
Returns:
+Name | Type | +Description | +
---|---|---|
points |
+ ndarray
+ |
+
+
+
+ (num_inducing, n_dim); Resampled path + |
+
sgptools/utils/tsp.py
161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 |
|
run_tsp(nodes, num_vehicles=1, max_dist=25, depth=1, resample=None, start_idx=None, end_idx=None)
+
+Method to run TSP/VRP with arbitrary start and end nodes, +and without any distance constraint
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
nodes |
+
+ ndarray
+ |
+
+
+
+ (# nodes, n_dim); Nodes to visit + |
+ + required + | +
num_vehicles |
+
+ int
+ |
+
+
+
+ Number of robots/vehicles + |
+
+ 1
+ |
+
max_dist |
+
+ float
+ |
+
+
+
+ Maximum distance allowed for each path when handling mutli-robot case + |
+
+ 25
+ |
+
depth |
+
+ int
+ |
+
+
+
+ Internal parameter used to track re-try recursion depth + |
+
+ 1
+ |
+
resample |
+
+ int
+ |
+
+
+
+ Each solution path will be resampled to have
+ |
+
+ None
+ |
+
start_idx |
+
+ list
+ |
+
+
+
+ Optionl list of start node indices from which to start the solution path + |
+
+ None
+ |
+
end_idx |
+
+ list
+ |
+
+
+
+ Optionl list of end node indices from which to start the solution path + |
+
+ None
+ |
+
Returns:
+Name | Type | +Description | +
---|---|---|
paths |
+ ndarray
+ |
+
+
+
+ Solution paths + |
+
distances |
+ list
+ |
+
+
+
+ List of path lengths + |
+
sgptools/utils/tsp.py
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 + 89 + 90 + 91 + 92 + 93 + 94 + 95 + 96 + 97 + 98 + 99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 |
|
cont2disc(Xu, candidates, candidate_labels=None)
+
+Map continuous space locations to a discrete set of candidate location
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
Xu |
+
+ ndarray
+ |
+
+
+
+ (m, 2); Continuous space points + |
+ + required + | +
candidates |
+
+ ndarray
+ |
+
+
+
+ (n, 2); Discrete set of candidate locations + |
+ + required + | +
candidate_labels |
+
+ ndarray
+ |
+
+
+
+ (n, 1); Labels corresponding to the discrete set of candidate locations + |
+
+ None
+ |
+
Returns:
+Name | Type | +Description | +
---|---|---|
Xu_x |
+ ndarray
+ |
+
+
+
+ Discrete space points' locations + |
+
Xu_y |
+ ndarray
+ |
+
+
+
+ Labels of the discrete space points. Returned only if |
+
sgptools/utils/misc.py
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 |
|
get_inducing_pts(data, num_inducing, orientation=False, random=False)
+
+Selects a subset of the data points to be used as inducing points. +The default approach uses kmeans to select the subset.
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
data |
+
+ ndarray
+ |
+
+
+
+ (n, 2); Data points to select the inducing points from + |
+ + required + | +
num_inducing |
+
+ int
+ |
+
+
+
+ Number of inducing points + |
+ + required + | +
orientation |
+
+ bool
+ |
+
+
+
+ If True, add an additional dimension to model the sensor + FoV rotation angle + |
+
+ False
+ |
+
random |
+
+ bool
+ |
+
+
+
+ If True, the subset of inducing points are selected randomly + instead of using kmeans + |
+
+ False
+ |
+
Returns:
+Name | Type | +Description | +
---|---|---|
Xu |
+ ndarray
+ |
+
+
+
+ (m, d); Inducing points in the position and orientation space.
+ |
+
sgptools/utils/misc.py
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 |
|
interpolate_path(waypoints, sampling_rate=0.05)
+
+Interpolate additional points between the given waypoints to simulate continuous sensing robots
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
waypoints |
+
+ (n, d)
+ |
+
+
+
+ Waypoints of the robot's path + |
+ + required + | +
sampling_rate |
+
+ float
+ |
+
+
+
+ Distance between each pair of interpolated points + |
+
+ 0.05
+ |
+
Returns:
+Name | Type | +Description | +
---|---|---|
path |
+ ndarray
+ |
+
+
+
+ (p, d) Interpolated path, |
+
sgptools/utils/misc.py
88 + 89 + 90 + 91 + 92 + 93 + 94 + 95 + 96 + 97 + 98 + 99 +100 +101 +102 +103 +104 |
|
plot_paths(paths, candidates=None, title=None)
+
+Function to plot the IPP solution paths
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
paths |
+
+ ndarray
+ |
+
+
+
+ (r, m, 2); |
+ + required + | +
candidates |
+
+ ndarray
+ |
+
+
+
+ (n, 2); Candidate unlabeled locations used in the SGP-based sensor placement approach + |
+
+ None
+ |
+
title |
+
+ str
+ |
+
+
+
+ Title of the plot + |
+
+ None
+ |
+
sgptools/utils/misc.py
64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 |
|
project_waypoints(waypoints, candidates)
+
+Project the waypoints back to the candidate set while retaining the +waypoint visitation order.
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
waypoints |
+
+ (n, d)
+ |
+
+
+
+ Waypoints of the robot's path + |
+ + required + | +
candidates |
+
+ ndarray
+ |
+
+
+
+ (n, 2); Discrete set of candidate locations + |
+ + required + | +
Returns:
+Name | Type | +Description | +
---|---|---|
waypoints |
+ (n, d)
+ |
+
+
+
+ Projected waypoints of the robot's path + |
+
sgptools/utils/misc.py
122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 |
|
gaussian_entropy(K)
+
+Computes GP-based entropy from a kernel matrix
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
K |
+
+ ndarray
+ |
+
+
+
+ (n, n); kernel matrix + |
+ + required + | +
Returns:
+Name | Type | +Description | +
---|---|---|
entropy |
+ float
+ |
+
+
+
+ Entropy computed from the kernel matrix + |
+
sgptools/utils/metrics.py
21 +22 +23 +24 +25 +26 +27 +28 +29 +30 |
|
get_distance(X)
+
+Compute the length of a path (L2-norm)
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
X |
+
+ ndarray
+ |
+
+
+
+ (m, d); Waypoints of a path + |
+ + required + | +
Returns:
+Name | Type | +Description | +
---|---|---|
dist |
+ float
+ |
+
+
+
+ Total path length + |
+
sgptools/utils/metrics.py
159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 |
|
get_elbo(Xu, X_env, noise_variance, kernel, baseline=False)
+
+Computes the ELBO of the SGP, corrected to be positive
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
Xu |
+
+ ndarray
+ |
+
+
+
+ (m, d); Sensing locations + |
+ + required + | +
X_env |
+
+ ndarray
+ |
+
+
+
+ (n, d); Data points used to approximate the bounds of the environment + |
+ + required + | +
noise_variance |
+
+ float
+ |
+
+
+
+ data variance + |
+ + required + | +
kernel |
+
+ Kernel
+ |
+
+
+
+ gpflow kernel function + |
+ + required + | +
baseline |
+
+ bool
+ |
+
+
+
+ If True, the ELBO is adjusted to be positive + |
+
+ False
+ |
+
Returns:
+Name | Type | +Description | +
---|---|---|
elbo |
+ float
+ |
+
+
+
+ ELBO of the SGP + |
+
sgptools/utils/metrics.py
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 |
|
get_kl(Xu, X_env, noise_variance, kernel)
+
+Computes the KL divergence between the SGP and the GP
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
Xu |
+
+ ndarray
+ |
+
+
+
+ (m, d); Sensing locations + |
+ + required + | +
X_env |
+
+ ndarray
+ |
+
+
+
+ (n, d); Data points used to approximate the bounds of the environment + |
+ + required + | +
noise_variance |
+
+ float
+ |
+
+
+
+ data variance + |
+ + required + | +
kernel |
+
+ Kernel
+ |
+
+
+
+ gpflow kernel function + |
+ + required + | +
Returns:
+Name | Type | +Description | +
---|---|---|
kl |
+ float
+ |
+
+
+
+ KL divergence between the SGP and the GP + |
+
sgptools/utils/metrics.py
88 + 89 + 90 + 91 + 92 + 93 + 94 + 95 + 96 + 97 + 98 + 99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 |
|
get_mi(Xu, candidate_locs, noise_variance, kernel)
+
+Computes mutual information between the sensing locations and the candidate locations
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
Xu |
+
+ ndarray
+ |
+
+
+
+ (m, d); Sensing locations + |
+ + required + | +
candidate_locs |
+
+ ndarray
+ |
+
+
+
+ (n, d); Candidate sensing locations + |
+ + required + | +
noise_variance |
+
+ float
+ |
+
+
+
+ data variance + |
+ + required + | +
kernel |
+
+ Kernel
+ |
+
+
+
+ gpflow kernel function + |
+ + required + | +
Returns:
+Name | Type | +Description | +
---|---|---|
mi |
+ float
+ |
+
+
+
+ Mutual information computed using a GP + |
+
sgptools/utils/metrics.py
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 |
|
get_reconstruction(Xu, X_test, noise_variance, kernel)
+
+Computes the GP-based data field estimates with the solution placements as the training set
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
Xu |
+
+ tuple
+ |
+
+
+
+ (ndarray (m, d); ndarray (m, 1)); Sensing locations' input + and corresponding ground truth labels + |
+ + required + | +
X_test |
+
+ ndarray
+ |
+
+
+
+ (n, d); Testing data input locations + |
+ + required + | +
noise_variance |
+
+ float
+ |
+
+
+
+ data variance + |
+ + required + | +
kernel |
+
+ Kernel
+ |
+
+
+
+ gpflow kernel function + |
+ + required + | +
Returns:
+Name | Type | +Description | +
---|---|---|
y_pred |
+ ndarray
+ |
+
+
+
+ (n, 1); Predicted data field estimates + |
+
y_var |
+ ndarray
+ |
+
+
+
+ (n, 1); Prediction variance at each location in the data field + |
+
sgptools/utils/metrics.py
134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 |
|
get_rmse(y_pred, y_test)
+
+Computes the root-mean-square error between y_pred
and y_test
Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
y_pred |
+
+ ndarray
+ |
+
+
+
+ (n, 1); Predicted data field estimate + |
+ + required + | +
y_test |
+
+ ndarray
+ |
+
+
+
+ (n, 1); Ground truth data field + |
+ + required + | +
Returns:
+Name | Type | +Description | +
---|---|---|
rmse |
+ float
+ |
+
+
+
+ Computed RMSE + |
+
sgptools/utils/metrics.py
122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 |
|
get_model_params(X_train, y_train, max_steps=1500, lr=0.01, print_params=True, lengthscales=1.0, variance=1.0, noise_variance=0.1, kernel=None, **kwargs)
+
+Train a GP on the given training set
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
X_train |
+
+ ndarray
+ |
+
+
+
+ (n, d); Training set inputs + |
+ + required + | +
y_train |
+
+ ndarray
+ |
+
+
+
+ (n, 1); Training set labels + |
+ + required + | +
max_steps |
+
+ int
+ |
+
+
+
+ Maximum number of optimization steps + |
+
+ 1500
+ |
+
lr |
+
+ float
+ |
+
+
+
+ Optimization learning rate + |
+
+ 0.01
+ |
+
print_params |
+
+ bool
+ |
+
+
+
+ If True, prints the optimized GP parameters + |
+
+ True
+ |
+
lengthscales |
+
+ float or list
+ |
+
+
+
+ Kernel lengthscale(s), if passed as a list, + each element corresponds to each data dimension + |
+
+ 1.0
+ |
+
variance |
+
+ float
+ |
+
+
+
+ Kernel variance + |
+
+ 1.0
+ |
+
noise_variance |
+
+ float
+ |
+
+
+
+ Data noise variance + |
+
+ 0.1
+ |
+
kernel |
+
+ Kernel
+ |
+
+
+
+ gpflow kernel function + |
+
+ None
+ |
+
Returns:
+Name | Type | +Description | +
---|---|---|
loss |
+ list
+ |
+
+
+
+ Loss values obtained during training + |
+
variance |
+ float
+ |
+
+
+
+ Optimized data noise variance + |
+
kernel |
+ Kernel
+ |
+
+
+
+ Optimized gpflow kernel function + |
+
sgptools/utils/gpflow.py
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 |
|
optimize_model(model, max_steps=2000, kernel_grad=True, lr=0.01, optimizer='tf', method=None, verbose=False, trace_fn=None, convergence_criterion=True, trainable_variables=None, tol=None)
+
+Trains a GP/SGP model
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
model |
+
+ models
+ |
+
+
+
+ GPflow GP/SGP model to train + |
+ + required + | +
max_steps |
+
+ int
+ |
+
+
+
+ Maximum number of training steps + |
+
+ 2000
+ |
+
kernel_grad |
+
+ bool
+ |
+
+
+
+ If False, the kernel parameters will not be optimized + |
+
+ True
+ |
+
lr |
+
+ float
+ |
+
+
+
+ Optimization learning rate + |
+
+ 0.01
+ |
+
optimizer |
+
+ str
+ |
+
+
+
+ Optimizer to use for training ( |
+
+ 'tf'
+ |
+
method |
+
+ str
+ |
+
+
+
+ Optimization method refer to scipy minimize and tf optimizers for full list + |
+
+ None
+ |
+
verbose |
+
+ bool
+ |
+
+
+
+ If true, the training progress will be printed + |
+
+ False
+ |
+
trace_fn |
+
+ str
+ |
+
+
+
+ Function to trace metrics during training.
+ If |
+
+ None
+ |
+
convergence_criterion |
+
+ bool
+ |
+
+
+
+ It True, enables early stopping when the loss plateaus + |
+
+ True
+ |
+
trainable_variables |
+
+ list
+ |
+
+
+
+ List of model variables to train + (can be used to limit training to a subset of variables) + |
+
+ None
+ |
+
tol |
+
+ float
+ |
+
+
+
+ Convergence tolerance to decide when to stop optimization + |
+
+ None
+ |
+
sgptools/utils/gpflow.py
90 + 91 + 92 + 93 + 94 + 95 + 96 + 97 + 98 + 99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 |
|
plot_loss(losses, save_file=None)
+
+Helper function to plot the training loss
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
losses |
+
+ list
+ |
+
+
+
+ list of loss values + |
+ + required + | +
save_file |
+
+ str
+ |
+
+
+
+ If passed, the loss plot will be saved to the |
+
+ None
+ |
+
sgptools/utils/gpflow.py
24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 |
|
get_dataset(dataset_type, dataset_path=None, num_train=1000, num_test=2500, num_candidates=150)
+
+Method to generate/load datasets and preprocess them for SP/IPP. The method uses kmeans to +generate train and test sets.
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
dataset_type |
+
+ str
+ |
+
+
+
+ 'tif' or 'synthetic'. 'tif' will load and proprocess data from a GeoTIFF file. + 'synthetic' will use the diamond square algorithm to generate synthetic elevation data. + |
+ + required + | +
dataset_path |
+
+ str
+ |
+
+
+
+ Path to the dataset file, used only when dataset_type is 'tif'. + |
+
+ None
+ |
+
num_train |
+
+ int
+ |
+
+
+
+ Number of training samples to generate. + |
+
+ 1000
+ |
+
num_test |
+
+ int
+ |
+
+
+
+ Number of testing samples to generate. + |
+
+ 2500
+ |
+
num_candidates |
+
+ int
+ |
+
+
+
+ Number of candidate locations to generate. + |
+
+ 150
+ |
+
Returns:
+Name | Type | +Description | +
---|---|---|
X_train |
+ ndarray
+ |
+
+
+
+ (n, d); Training set inputs + |
+
y_train |
+ ndarray
+ |
+
+
+
+ (n, 1); Training set labels + |
+
X_test |
+ ndarray
+ |
+
+
+
+ (n, d); Testing set inputs + |
+
y_test |
+ ndarray
+ |
+
+
+
+ (n, 1); Testing set labels + |
+
candidates |
+ ndarray
+ |
+
+
+
+ (n, d); Candidate sensor placement locations + |
+
X | + | +
+
+
+ (n, d); Full dataset inputs + |
+
y | + | +
+
+
+ (n, 1); Full dataset labels + |
+
sgptools/utils/data.py
146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 |
|
point_pos(point, d, theta)
+
+Generate a point at a distance d from a point at angle theta.
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
point |
+
+ ndarray
+ |
+
+
+
+ (N, 2); array of points + |
+ + required + | +
d |
+
+ float
+ |
+
+
+
+ distance + |
+ + required + | +
theta |
+
+ float
+ |
+
+
+
+ angle in radians + |
+ + required + | +
Returns:
+Name | Type | +Description | +
---|---|---|
X |
+ ndarray
+ |
+
+
+
+ (N,); array of x-coordinate + |
+
Y |
+ ndarray
+ |
+
+
+
+ (N,); array of y-coordinate + |
+
sgptools/utils/data.py
64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 |
|
prep_synthetic_dataset()
+
+Generates a 50x50 grid of synthetic elevation data using the diamond square algorithm.
+https://github.com/buckinha/DiamondSquare
Args:
+Returns: + X: (n, d); Dataset input features + y: (n, 1); Dataset labels
+ +sgptools/utils/data.py
119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 |
|
prep_tif_dataset(dataset_path)
+
+Load and preprocess a dataset from a GeoTIFF file (.tif file). The input features +are set to the x and y pixel block coordinates and the labels are read from the file. +The method also removes all invalid points.
+Large tif files
+need to be downsampled using the following command:
+gdalwarp -tr 50 50 <input>.tif <output>.tif
Args: + dataset_path (str): Path to the dataset file, used only when dataset_type is 'tif'.
+Returns: + X: (n, d); Dataset input features + y: (n, 1); Dataset labels
+ +sgptools/utils/data.py
81 + 82 + 83 + 84 + 85 + 86 + 87 + 88 + 89 + 90 + 91 + 92 + 93 + 94 + 95 + 96 + 97 + 98 + 99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 |
|
remove_circle_patches(X, Y, circle_patches)
+
+Remove points inside polycircle patchesgons.
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
X |
+
+ (ndarray
+ |
+
+
+
+ (N,); array of x-coordinate + |
+ + required + | +
Y |
+
+ (ndarray
+ |
+
+
+
+ (N,); array of y-coordinate + |
+ + required + | +
polygons |
+
+ list of matplotlib circle patches
+ |
+
+
+
+ Circle patches to remove from the X, Y points + |
+ + required + | +
Returns:
+Name | Type | +Description | +
---|---|---|
X |
+ ndarray
+ |
+
+
+
+ (N,); array of x-coordinate + |
+
Y |
+ ndarray
+ |
+
+
+
+ (N,); array of y-coordinate + |
+
sgptools/utils/data.py
46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 |
|
remove_polygons(X, Y, polygons)
+
+Remove points inside polygons.
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
X |
+
+ (ndarray
+ |
+
+
+
+ (N,); array of x-coordinate + |
+ + required + | +
Y |
+
+ (ndarray
+ |
+
+
+
+ (N,); array of y-coordinate + |
+ + required + | +
polygons |
+
+ list of matplotlib path polygon
+ |
+
+
+
+ Polygons to remove from the X, Y points + |
+ + required + | +
Returns:
+Name | Type | +Description | +
---|---|---|
X |
+ ndarray
+ |
+
+
+
+ (N,); array of x-coordinate + |
+
Y |
+ ndarray
+ |
+
+
+
+ (N,); array of y-coordinate + |
+
sgptools/utils/data.py
27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 |
|
Provides a neural spectral kernel function along with an initialization function
+ + + +NeuralSpectralKernel
+
+
+
+ Bases: Kernel
Neural Spectral Kernel function (non-stationary kernel function). +Based on the implementation from the following repo
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
input_dim |
+
+ int
+ |
+
+
+
+ Number of data dimensions + |
+ + required + | +
active_dims |
+
+ int
+ |
+
+
+
+ Number of data dimensions that are used for computing the covariances + |
+
+ None
+ |
+
Q |
+
+ int
+ |
+
+
+
+ Number of MLP mixture components used in the kernel function + |
+
+ 1
+ |
+
hidden_sizes |
+
+ list
+ |
+
+
+
+ Number of hidden units in each MLP layer. Length of the list determines the number of layers. + |
+
+ [32, 32]
+ |
+
sgptools/kernels/neural_kernel.py
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 + 89 + 90 + 91 + 92 + 93 + 94 + 95 + 96 + 97 + 98 + 99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 |
|
K(X, X2=None)
+
+Computes the covariances between/amongst the input variables
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
X |
+
+ ndarray
+ |
+
+
+
+ Variables to compute the covariance matrix + |
+ + required + | +
X2 |
+
+ ndarray
+ |
+
+
+
+ If passed, the covariance between X and X2 is computed. Otherwise, + the covariance between X and X is computed. + |
+
+ None
+ |
+
Returns:
+Name | Type | +Description | +
---|---|---|
cov |
+ ndarray
+ |
+
+
+
+ covariance matrix + |
+
sgptools/kernels/neural_kernel.py
68 + 69 + 70 + 71 + 72 + 73 + 74 + 75 + 76 + 77 + 78 + 79 + 80 + 81 + 82 + 83 + 84 + 85 + 86 + 87 + 88 + 89 + 90 + 91 + 92 + 93 + 94 + 95 + 96 + 97 + 98 + 99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 |
|
init_neural_kernel(x, y, inducing_variable, Q, n_inits=1, hidden_sizes=None)
+
+Helper function to initialize a Neural Spectral Kernel function (non-stationary kernel function). +Based on the implementation from the following repo
+ + +Parameters:
+Name | +Type | +Description | +Default | +
---|---|---|---|
x |
+
+ ndarray
+ |
+
+
+
+ (n, d); Input training set points + |
+ + required + | +
y |
+
+ ndarray
+ |
+
+
+
+ (n, 1); Training set labels + |
+ + required + | +
inducing_variable |
+
+ ndarray
+ |
+
+
+
+ (m, d); Initial inducing points + |
+ + required + | +
Q |
+
+ int
+ |
+
+
+
+ Number of MLP mixture components used in the kernel function + |
+ + required + | +
n_inits |
+
+ int
+ |
+
+
+
+ Number of times to initalize the kernel function (returns the best model) + |
+
+ 1
+ |
+
hidden_sizes |
+
+ list
+ |
+
+
+
+ Number of hidden units in each MLP layer. Length of the list determines the number of layers. + |
+
+ None
+ |
+
sgptools/kernels/neural_kernel.py
133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 |
|