SALib.sample.morris package¶
Submodules¶
SALib.sample.morris.brute module¶
-
class
SALib.sample.morris.brute.
BruteForce
[source]¶ Bases:
SALib.sample.morris.strategy.Strategy
Implements the brute force optimisation strategy
-
brute_force_most_distant
(input_sample, num_samples, num_params, k_choices, num_groups=None)[source]¶ Use brute force method to find most distant trajectories
- Parameters
input_sample (numpy.ndarray) –
num_samples (int) – The number of samples to generate
num_params (int) – The number of parameters
k_choices (int) – The number of optimal trajectories
num_groups (int, default=None) – The number of groups
- Returns
- Return type
list
-
find_maximum
(scores, N, k_choices)[source]¶ Finds the k_choices maximum scores from scores
- Parameters
scores (numpy.ndarray) –
N (int) –
k_choices (int) –
- Returns
- Return type
list
-
find_most_distant
(input_sample, num_samples, num_params, k_choices, num_groups=None)[source]¶ Finds the ‘k_choices’ most distant choices from the ‘num_samples’ trajectories contained in ‘input_sample’
- Parameters
input_sample (numpy.ndarray) –
num_samples (int) – The number of samples to generate
num_params (int) – The number of parameters
k_choices (int) – The number of optimal trajectories
num_groups (int, default=None) – The number of groups
- Returns
- Return type
numpy.ndarray
-
SALib.sample.morris.gurobi module¶
Finds optimal trajectories using a global optimisation method
Example
Run using
>>> optimal_trajectories.py -n=10 -p=esme_param.txt -o=test_op.txt -s=12892 --num-levels=4 --grid-jump=2 --k-choices=4
SALib.sample.morris.local module¶
-
class
SALib.sample.morris.local.
LocalOptimisation
[source]¶ Bases:
SALib.sample.morris.strategy.Strategy
Implements the local optimisation algorithm using the Strategy interface
-
add_indices
(indices, distance_matrix)[source]¶ Adds extra indices for the combinatorial problem.
- Parameters
indices (tuple) –
distance_matrix (numpy.ndarray (M,M)) –
Example
>>> add_indices((1,2), numpy.array((5,5))) [(1, 2, 3), (1, 2, 4), (1, 2, 5)]
-
find_local_maximum
(input_sample, N, num_params, k_choices, num_groups=None)[source]¶ Find the most different trajectories in the input sample using a local approach
An alternative by Ruano et al. (2012) for the brute force approach as originally proposed by Campolongo et al. (2007). The method should improve the speed with which an optimal set of trajectories is found tremendously for larger sample sizes.
- Parameters
input_sample (np.ndarray) –
N (int) – The number of trajectories
num_params (int) – The number of factors
k_choices (int) – The number of optimal trajectories to return
num_groups (int, default=None) – The number of groups
- Returns
- Return type
list
-
get_max_sum_ind
(indices_list, distances, i, m)[source]¶ Get the indices that belong to the maximum distance in distances
- Parameters
indices_list (list) – list of tuples
distances (numpy.ndarray) – size M
i (int) –
m (int) –
- Returns
- Return type
list
-
sum_distances
(indices, distance_matrix)[source]¶ Calculate combinatorial distance between a select group of trajectories, indicated by indices
- Parameters
indices (tuple) –
distance_matrix (numpy.ndarray (M,M)) –
- Returns
- Return type
numpy.ndarray
Notes
This function can perhaps be quickened by calculating the sum of the distances. The calculated distances, as they are right now, are only used in a relative way. Purely summing distances would lead to the same result, at a perhaps quicker rate.
-
SALib.sample.morris.strategy module¶
Defines a family of algorithms for generating samples
The sample a for use with SALib.analyze.morris.analyze
,
encapsulate each one, and makes them interchangeable.
Example
>>> localoptimisation = LocalOptimisation()
>>> context = SampleMorris(localoptimisation)
>>> context.sample(input_sample, num_samples, num_params, k_choices, groups)
-
class
SALib.sample.morris.strategy.
SampleMorris
(strategy)[source]¶ Bases:
object
Computes the optimum k_choices of trajectories from the input_sample.
- Parameters
strategy (
Strategy
) –
-
sample
(input_sample, num_samples, num_params, k_choices, num_groups)[source]¶ Computes the optimum k_choices of trajectories from the input_sample.
- Parameters
input_sample (numpy.ndarray) –
num_samples (int) – The number of samples to generate
num_params (int) – The number of parameters
k_choices (int) – The number of optimal trajectories
num_groups (int) – The number of groups
- Returns
An array of optimal trajectories
- Return type
numpy.ndarray
-
class
SALib.sample.morris.strategy.
Strategy
[source]¶ Bases:
object
Declare an interface common to all supported algorithms.
SampleMorris
uses this interface to call the algorithm defined by a ConcreteStrategy.-
static
check_input_sample
(input_sample, num_params, num_samples)[source]¶ Check the input_sample is valid
- Checks input sample is:
the correct size
values between 0 and 1
- Parameters
input_sample (numpy.ndarray) –
num_params (int) –
num_samples (int) –
-
compile_output
(input_sample, num_samples, num_params, maximum_combo, num_groups=None)[source]¶ Picks the trajectories from the input
- Parameters
input_sample (numpy.ndarray) –
num_samples (int) –
num_params (int) –
maximum_combo (list) –
num_groups (int) –
-
static
compute_distance
(m, l)[source]¶ Compute distance between two trajectories
- Returns
- Return type
numpy.ndarray
-
compute_distance_matrix
(input_sample, num_samples, num_params, num_groups=None, local_optimization=False)[source]¶ Computes the distance between each and every trajectory
Each entry in the matrix represents the sum of the geometric distances between all the pairs of points of the two trajectories
If the groups argument is filled, then the distances are still calculated for each trajectory,
- Parameters
input_sample (numpy.ndarray) – The input sample of trajectories for which to compute the distance matrix
num_samples (int) – The number of trajectories
num_params (int) – The number of factors
num_groups (int, default=None) – The number of groups
local_optimization (bool, default=False) – If True, fills the lower triangle of the distance matrix
- Returns
distance_matrix
- Return type
numpy.ndarray
-
sample
(input_sample, num_samples, num_params, k_choices, num_groups=None)[source]¶ Computes the optimum k_choices of trajectories from the input_sample.
- Parameters
input_sample (numpy.ndarray) –
num_samples (int) – The number of samples to generate
num_params (int) – The number of parameters
k_choices (int) – The number of optimal trajectories
num_groups (int, default=None) – The number of groups
- Returns
- Return type
numpy.ndarray
-
static
Module contents¶
Generate a sample using the Method of Morris
Three variants of Morris’ sampling for elementary effects is supported:
Vanilla Morris
- Optimised trajectories when
optimal_trajectories=True
(using Campolongo’s enhancements from 2007 and optionally Ruano’s enhancement from 2012;
local_optimization=True
)
- Optimised trajectories when
- Groups with optimised trajectories when
optimal_trajectories=True
and the problem definition specifies groups (note that
local_optimization
must beFalse
)
- Groups with optimised trajectories when
At present, optimised trajectories is implemented using either a brute-force approach, which can be very slow, especially if you require more than four trajectories, or a local method based which is much faster. Both methods now implement working with groups of factors.
Note that the number of factors makes little difference, but the ratio between number of optimal trajectories and the sample size results in an exponentially increasing number of scores that must be computed to find the optimal combination of trajectories. We suggest going no higher than 4 from a pool of 100 samples with the brute force approach. With local_optimization = True (which is default), it is possible to go higher than the previously suggested 4 from 100.
-
SALib.sample.morris.
sample
(problem, N, num_levels=4, optimal_trajectories=None, local_optimization=True, seed=None)[source]¶ Generate model inputs using the Method of Morris
Returns a NumPy matrix containing the model inputs required for Method of Morris. The resulting matrix has \((G+1)*T\) rows and \(D\) columns, where \(D\) is the number of parameters, \(G\) is the number of groups (if no groups are selected, the number of parameters). \(T\) is the number of trajectories \(N\), or optimal_trajectories if selected. These model inputs are intended to be used with
SALib.analyze.morris.analyze()
.- Parameters
problem (dict) – The problem definition
N (int) – The number of trajectories to generate
num_levels (int, default=4) – The number of grid levels (should be even)
optimal_trajectories (int) – The number of optimal trajectories to sample (between 2 and N)
local_optimization (bool, default=True) – Flag whether to use local optimization according to Ruano et al. (2012) Speeds up the process tremendously for bigger N and num_levels. If set to
False
brute force method is used, unlessgurobipy
is available
- Returns
sample – Returns a numpy.ndarray containing the model inputs required for Method of Morris. The resulting matrix has \((G/D+1)*N/T\) rows and \(D\) columns, where \(D\) is the number of parameters.
- Return type
numpy.ndarray