4 #include "variable.hpp" 37 double minimum(
void)
const {
40 double maximum(
void)
const {
43 double random(
void)
const {
46 trial = (Beta::random()+0.25)/1.25;
50 double loglike(
const double& steepness)
const {
51 if(steepness<0.6)
return -INFINITY;
52 else return std::log(Beta::pdf(steepness*1.25-0.25));
135 template<
class Mirror>
138 .data(spawners_unfished,
"spawners_unfished")
139 .data(spawners_ma,
"spawners_ma")
140 .data(spawners_ea,
"spawners_ea")
142 .data(recruits_steepness,
"recruits_steepness")
143 .data(recruits_sd,
"recruits_sd")
144 .data(recruits_autocorr,
"recruits_autocorr")
145 .data(recruits_deviations,
"recruits_deviations")
147 .data(spawning_0,
"spawning_0")
148 .data(spawning_1,
"spawning_1")
149 .data(spawning_2,
"spawning_2")
150 .data(spawning_3,
"spawning_3")
152 .data(weight_a,
"weight_a")
153 .data(weight_b,
"weight_b")
155 .data(maturity_inflection,
"maturity_inflection")
156 .data(maturity_steepness,
"maturity_steepness")
158 .data(mortality_mean,
"mortality_mean")
160 .data(growth_rate_1,
"growth_rate_1")
161 .data(growth_rate_2,
"growth_rate_2")
162 .data(growth_assymptote,
"growth_assymptote")
163 .data(growth_stanza_inflection,
"growth_stanza_inflection")
164 .data(growth_stanza_steepness,
"growth_stanza_steepness")
165 .data(growth_age_0,
"growth_age_0")
166 .data(growth_cv_0,
"growth_cv_0")
167 .data(growth_cv_old,
"growth_cv_old")
169 .data(movement_we_ma,
"movement_we_ma")
170 .data(movement_we_ea,
"movement_we_ea")
171 .data(movement_ma_ea,
"movement_ma_ea")
173 .data(movement_length_inflection,
"movement_length_inflection")
174 .data(movement_length_steepness,
"movement_length_steepness")
176 .data(selectivities,
"selectivities")
178 .data(catches,
"catches")
182 using Structure<Parameters>::read;
185 Structure<Parameters>::read(
"parameters/input/parameters.json");
187 recruits_deviations.read(
"parameters/input/recruits_deviations.tsv",
true);
188 selectivities.read(
"parameters/input/selectivities.tsv",
true);
190 catches.read(
"parameters/input/catches.tsv",
true);
192 if(catche.is_na()) catche = 0;
196 using Structure<Parameters>::write;
199 Structure<Parameters>::write(
"parameters/output/parameters.json");
201 recruits_deviations.write(
"parameters/output/recruits_deviations.tsv",
true);
202 selectivities.write(
"parameters/output/selectivities.tsv",
true);
203 catches.write(
"parameters/output/catches.tsv",
true);
205 values().write(
"parameters/output/values.tsv");
213 void set(uint time,
Model& model,
bool catches_apply =
true)
const {
214 uint year = IOSKJ::year(time);
215 uint quarter = IOSKJ::quarter(time);
221 Array<double,Region> props = {
240 model.weight_length_b = weight_b;
244 model.maturity_length_steepness = maturity_steepness;
251 model.growth_rate_2 = growth_rate_2;
252 model.growth_assymptote = growth_assymptote;
253 model.growth_stanza_inflection = growth_stanza_inflection;
254 model.growth_stanza_steepness = growth_stanza_steepness;
255 model.growth_cv_0 = growth_cv_0;
256 model.growth_cv_old = growth_cv_old;
275 model.movement_length_steepness = movement_length_steepness;
278 for(
auto method : methods){
279 for(
auto knot : selectivity_knots){
291 else if(year>=recdev_years.begin() and year<recdev_years.end()){
299 else if(year>=recdev_years.end() and time<=time_now){
313 if(catches_apply and year>=1950 and year<=2014){
314 model.exploit = model.exploit_catch;
315 for(
auto region : regions){
316 for(
auto method : methods){
329 if(year<2005) model.
effort = 0;
330 if(year>=2005 and year<=2014) model.
effort = 100;
339 template<
class Derived>
341 using Polymorph<Derived>::derived;
346 array.reflect(derived());
350 template<
class... Dimensions>
351 Derived& data(Array<
Variable<Fixed>,Dimensions...>& array,
const std::string& name){
372 template<
class Distribution>
374 variable.value = variable.random();
390 template<
class Distribution>
392 if(variable.value>variable.maximum()){
393 variable.value = std::max(variable.maximum()-(variable.value-variable.maximum()),variable.minimum());
395 else if(variable.value<variable.minimum()){
396 variable.value = std::min(variable.minimum()+(variable.minimum()-variable.value),variable.maximum());
406 return Logliker().mirror(*this).loglike;
412 template<
class Distribution>
414 loglike += variable.loglike();
422 std::vector<std::string>
names(
void){
423 return Names().mirror(*this).names;
427 std::vector<std::string> names;
433 array.reflect(*
this);
438 template<
class Distribution>
440 names.push_back(prefix+name+
".value");
450 return Values().mirror(*this).values;
462 array.reflect(*
this);
467 template<
class Distribution>
469 values.add(prefix+name+
".value",variable.value);
482 std::vector<double> values;
484 template<
class Distribution>
486 values.push_back(variable.value);
499 std::vector<double> values;
507 template<
class Distribution>
509 variable.value = values[index];
double recruits_multiplier
Definition: model.hpp:109
Definition: parameters.hpp:36
void initialise(void)
Definition: model.hpp:539
double mortality_mean
Definition: model.hpp:208
double growth_rate_1
Definition: model.hpp:129
Definition: parameters.hpp:452
Variable< TruncatedNormal > maturity_inflection
Definition: parameters.hpp:93
Array< double, RegionFrom, Region > movement_region
Definition: model.hpp:247
Definition: parameters.hpp:387
Variable< Uniform > recruits_sd
Definition: parameters.hpp:60
Array< double, Region > biomass_spawners_unfished
Definition: model.hpp:37
Variable< Fixed > weight_a
Definition: parameters.hpp:87
Parameters & bounce(void)
Definition: parameters.hpp:383
Definition: dimensions.hpp:22
Array< double, Method, SelectivityKnot > selectivity_values
Definition: model.hpp:274
double recruits_sd
Definition: model.hpp:89
void set(uint time, Model &model, bool catches_apply=true) const
Definition: parameters.hpp:213
std::vector< double > vector(void)
Definition: parameters.hpp:477
Parameters & randomise(void)
Definition: parameters.hpp:365
Definition: parameters.hpp:408
Frame values(void)
Definition: parameters.hpp:449
Definition: distributions.hpp:21
double loglike(void)
Definition: parameters.hpp:405
Definition: parameters.hpp:340
Variable< Uniform > movement_we_ma
Definition: parameters.hpp:116
Definition: parameters.hpp:480
Definition: parameters.hpp:369
Definition: parameters.hpp:12
double weight_length_a
Definition: model.hpp:165
std::vector< std::string > names(void)
Definition: parameters.hpp:422
Variable< Uniform > spawners_ma
Definition: parameters.hpp:28
Variable< Uniform > spawning_0
Definition: parameters.hpp:78
double maturity_length_inflection
Definition: model.hpp:186
Variable< Uniform > mortality_mean
Definition: parameters.hpp:99
Definition: distributions.hpp:153
double recruits_steepness
Definition: model.hpp:68
Variable< Uniform > spawners_unfished
Definition: parameters.hpp:18
double movement_length_inflection
Definition: model.hpp:252
Array< Variable< Normal >, RecdevYear > recruits_deviations
Definition: parameters.hpp:73
Array< double, Region, Method > effort
Definition: model.hpp:321
Variable< Uniform > recruits_autocorr
Definition: parameters.hpp:68
bool recruits_variation_on
Definition: model.hpp:84
Definition: parameters.hpp:497
void vector(const std::vector< double > &vector)
Definition: parameters.hpp:494
Array< Variable< Fixed >, Year, Quarter, Region, Method > catches
Definition: parameters.hpp:130
Variable< Fixed > growth_rate_1
Definition: parameters.hpp:104
Array< double, Region, Method > catches
Definition: model.hpp:313
Definition: parameters.hpp:425
Array< double, Quarter > spawning
Definition: model.hpp:47
void reflect(Mirror &mirror)
Definition: parameters.hpp:136
Array< Variable< Uniform >, Method, SelectivityKnot > selectivities
Definition: parameters.hpp:125