VariablesΒΆ
GADMA has several variable classes in gadma.utils
for different types of variables. Variables are used in models and for optimization runs. Base classes are:
ContinuousVariable
- continuous variables.DiscreteVariable
- variable with discrete domain.
To create object one should set name
, domain
and reand_gen (optional):
[1]:
from gadma import *
cont_var = ContinuousVariable('var_name', domain=[-1, 1])
rand_gen = lambda domain: np.random.choice(domain)
disc_var = DiscreteVariable('some_var', domain=['one', 'two', 'three'], rand_gen=rand_gen)
Every variable also has random generator for its valuesa and get_possible_values
, get_bounds
methods.
[2]:
print(f"Random value of cont_var: {cont_var.resample()}")
print(f"Random value of cont_var: {disc_var.resample()}")
Random value of cont_var: 0.8983341063764418
Random value of cont_var: two
There are also special set of variables for demographic parameters with specified default domain and special random generators:
PopulationSizeVariable
- variable for holding populations size.TimeVariable
- variable for holding time migration rate.MigrationVariable
- variable for holding time.SelectionVariable
- variable for holding selection.FractionVariable
- variable for holding fraction.DynamicVariable
- variable for holding dynamic of size change.
The last variable class is discrete variable class.
[3]:
nu = PopulationSizeVariable("nu")
t = TimeVariable("t")
m = MigrationVariable("m")
g = SelectionVariable("g")
f = FractionVariable("f")
d = DynamicVariable("d")
print(f"Domain of PopulationSizeVariable: {nu.domain}")
print(f"Domain of TimeVariable: {t.domain}")
print(f"Domain of MigrationVariable: {m.domain}")
print(f"Domain of SelectionVariable: {g.domain}")
print(f"Domain of FractionVariable: {f.domain}")
print(f"Domain of DynamicVariable: {d.domain}")
Domain of PopulationSizeVariable: [1.e-02 1.e+02]
Domain of TimeVariable: [1.e-15 5.e+00]
Domain of MigrationVariable: [ 0 10]
Domain of SelectionVariable: [1.e-15 1.e+01]
Domain of FractionVariable: [0.001 0.999]
Domain of DynamicVariable: ['Sud' 'Lin' 'Exp']
Variables pool
There is a special class for keeping list of unique variables. All variables in variable pool should have different names otherwise there will be an error.
[4]:
# Create variables for pool
nu = PopulationSizeVariable("nu")
same_nu = PopulationSizeVariable("nu")
t = TimeVariable("t")
# create pool from unique variables
pool = VariablePool([nu, t])
print("Variable pool from variables with unique names was created")
try:
pool.append(same_nu)
except NameError as e:
print("Variable pool was not updates as there is the variable with the same name:\n", e)
Variable pool from variables with unique names was created
Variable pool was not updates as there is the variable with the same name:
VariablePool has already a Variable with the same name (nu).
[ ]: