Variables
- Input variables
Drawn from random distributions:
Halton sequence (quasi-random, space filling)
Uniform distribution
LogUniform: uniformly distributed in log-space
Normal distribution
Fixed values:
Linear: linearly spaced values
Constant (excluded from the fit)
Special:
ActiveLearning: succesively inserted according to a specified optimization strategy
- Independent variables
The user can bind an independent variable to an output variable, if the simulation outputs a (known) vector over linear supporting points. This dimension is then not considered during fitting, in contrast to full multi- output models. This lowers necessary computing resources and can even enhance the quality of the fit, since complexity of the model is reduced.
- Output variables
Default output is a scalar value, but with the attachment of independent variables, it becomes a vector. In the config file, also several output variables can be defined independently, which leads to multi-output surrogates during fitting. This is useful if the simulation outputs additional variables, e.g. the standard deviation or the derivative of the result.
All single variables are then stored in a VariableGroup , which is the main object for the runner, active learning and surrogates to interact with variables. This class implements efficient methods to get and set values of single variables, as only a view on the true variable objects is stored. Especially important for the active learning workflow, there is never a discrepancy between values of the runner and the surrogate model, as both access the same view.
Examples
Definition of variables inside the profit.yaml configuration file.
ntrain: 100
variables:
# Inputs
a1: Uniform() # Uniform random distribution in [0, 1].
a2: Uniform(0, 1) # Same as 'a1'
b: Normal(0, 1e-2) # Normal distribution with 0 mean and 1e-2 standard deviation.
c1: 0.2 # Constant value.
c2: Constant(0.2) # Same as 'c1'.
d: LogUniform(1e-4, 0.1) # LogUniform distribution.
e: Halton(0, 3) # Quasi-random Halton sequence.
h: Linear(-1, 1) # Linear vector with size of 'ntrain'.
al1: ActiveLearning(1e-4, 1e-1, Log) # Active learning variable with logarithmically distributed search space.
# Independent variable
t: Independent(0, 99, 100) # Linear vector with 100 supporting points.
# Not considered as separate input, but simulation returns vector.
# Outputs
f: Output(t) # Vector output dependent on t.
g: Output # Scalar output.
Variables can be declared as strings as shown above, or with the full dict-like structure:
variables:
a1:
class: Uniform
constraints = [0, 1]
dtype: float
c3:
class: Constant
value: 3
dtype: int
al1:
class: ActiveLearning
distr: Log
constraints: [1e-4, 1e-1]
...
Describing variable placeholders a1 and d inside a simulation input file (.txt and .json).
# Example input file for simulation
path1='./some_path'
parameter1={a1}
parameter2={d}
...
{
"path1": "./some_path",
"parameter1": "{{a1}}",
"parameter2": "{{d}}"
}