Working example - parameters for the simulation of a trait#
import fwdpy11
N = 1000
rho = 1000.0
mu_neutral = 0.0
mu_selected = 1e-3
GSSmo = fwdpy11.GaussianStabilizingSelection.single_trait(
[
fwdpy11.Optimum(when=0, optimum=0.0, VS=1.0),
fwdpy11.Optimum(when=10 * N - 200, optimum=1.0, VS=1.0),
]
)
p = {
"nregions": [],
"gvalue": fwdpy11.Additive(2.0, GSSmo),
"sregions": [fwdpy11.GaussianS(0, 1., 1, 0.1)],
"recregions": [fwdpy11.PoissonInterval(0, 1., rho / float(4 * N))],
"rates": (mu_neutral, mu_selected, None),
# Keep mutations at frequency 1 in the pop if they affect fitness.
"prune_selected": False,
"demography": fwdpy11.ForwardDemesGraph.tubes([N], burnin=1),
"simlen": 10 * N,
}
params = fwdpy11.ModelParams(**p)
print(params.asblack())
fwdpy11.ModelParams(
nregions=[],
sregions=[
fwdpy11.GaussianS(
beg=0,
end=1.0,
weight=1.0,
sd=0.1,
h=1.0,
coupled=True,
label=0,
scaling=1.0,
)
],
recregions=[fwdpy11.PoissonInterval(beg=0, end=1.0, mean=0.25, discrete=False)],
rates=fwdpy11.MutationAndRecombinationRates(
neutral_mutation_rate=0.0, selected_mutation_rate=0.001, recombination_rate=None
),
gvalue=fwdpy11.Additive(
scaling=2.0,
gvalue_to_fitness=fwdpy11.GaussianStabilizingSelection(
is_single_trait=True,
optima=[
fwdpy11.Optimum(optimum=0.0, VS=1.0, when=0),
fwdpy11.Optimum(optimum=1.0, VS=1.0, when=9800),
],
),
noise=None,
ndemes=1,
),
demography=fwdpy11.ForwardDemesGraph(
yaml="time_units: generations\ngeneration_time: 1\ndemes:\n- name: deme0\n epochs:\n - {end_time: 0, start_size: 1000}\n",
burnin=1,
burnin_is_exact=False,
round_non_integer_sizes=False,
),
simlen=10000,
prune_selected=False,
allow_residual_selfing=True,
)
Modifying model parameters#
Instances of fwdpy11.ModelParams
are immutable.
To change them, either:
Modify the original
dict
Or, do a round trip through a temporary
dict
.
The first option is straightforward. Let’s see the second in action. We’ll change the simulation length.
temp_dict = params.asdict()
temp_dict["simlen"] *= 2
params = fwdpy11.ModelParams(**temp_dict)
print(params.simlen)
20000