From 9d89c2d14f5d832b6a1e2da006c04cf4b246667c Mon Sep 17 00:00:00 2001 From: Andy Baxter Date: Thu, 21 Nov 2024 15:24:01 +0000 Subject: [PATCH 1/4] reads in parameter args --- src/main/java/simpaths/experiment/SimPathsMultiRun.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/simpaths/experiment/SimPathsMultiRun.java b/src/main/java/simpaths/experiment/SimPathsMultiRun.java index f54ce2ba6..c41e1b63c 100644 --- a/src/main/java/simpaths/experiment/SimPathsMultiRun.java +++ b/src/main/java/simpaths/experiment/SimPathsMultiRun.java @@ -47,6 +47,7 @@ public class SimPathsMultiRun extends MultiRun { private static Map modelArgs; private static Map innovationArgs; private static Map collectorArgs; + private static Map parameterArgs; public static String configFile = "default.yml"; // other working variables @@ -302,6 +303,12 @@ private static boolean parseYamlConfig(String[] args) { continue; } + // Read in parameter arguments - to be handled differently as no Parameters object + if ("parameter_args".equals(key)) { + parameterArgs = (Map) value; + continue; + } + // Use reflection to dynamically set the field based on the key updateLocalParameters(key, value); } From 1662a916a8666a7ad69c6ebbebb32887126e284c Mon Sep 17 00:00:00 2001 From: Andy Baxter Date: Thu, 21 Nov 2024 15:26:10 +0000 Subject: [PATCH 2/4] update parameters (when building model) --- src/main/java/simpaths/experiment/SimPathsMultiRun.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/simpaths/experiment/SimPathsMultiRun.java b/src/main/java/simpaths/experiment/SimPathsMultiRun.java index c41e1b63c..364f9f387 100644 --- a/src/main/java/simpaths/experiment/SimPathsMultiRun.java +++ b/src/main/java/simpaths/experiment/SimPathsMultiRun.java @@ -401,6 +401,9 @@ private static Object convertToType(Object value, Class targetType) { @Override public void buildExperiment(SimulationEngine engine) { + if (parameterArgs != null) + updateParameters(parameterArgs); + SimPathsModel model = new SimPathsModel(Country.getCountryFromNameString(countryString), startYear); if (persist_population) model.setPersistPopulation(true); if (persist_root) model.setPersistDatabasePath("./input/input"); From 195d870ede80ee74c438fb468c650dbed1da5b5f Mon Sep 17 00:00:00 2001 From: Andy Baxter Date: Mon, 14 Apr 2025 20:58:59 +0100 Subject: [PATCH 3/4] parse parameter config arguments --- .../simpaths/experiment/SimPathsMultiRun.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/main/java/simpaths/experiment/SimPathsMultiRun.java b/src/main/java/simpaths/experiment/SimPathsMultiRun.java index 364f9f387..49b305b32 100644 --- a/src/main/java/simpaths/experiment/SimPathsMultiRun.java +++ b/src/main/java/simpaths/experiment/SimPathsMultiRun.java @@ -378,6 +378,40 @@ public static void updateParameters(Object object, Map args) { } } + // Specifically for updating parameters when no object called - i.e. Parameters.java + public static void updateParameters(Map parameter_args) { + + for (Map.Entry entry : parameter_args.entrySet()) { + String key = entry.getKey(); + Object value = entry.getValue(); + + switch (key) { + default: + try { + Field field = Parameters.class.getDeclaredField(key); + field.setAccessible(true); + + // Determine the field type + Class fieldType = field.getType(); + + // Convert the YAML value to the field type + Object convertedValue = convertToType(value, fieldType); + + // Set the field value + field.set(Parameters.class, convertedValue); + + field.setAccessible(false); + } catch (NoSuchFieldException | IllegalAccessException e) { + // Handle exceptions if the field is not found or inaccessible + e.printStackTrace(); + } + + } + + } + + } + private static Object convertToType(Object value, Class targetType) { // Convert the YAML value to the target type if (int.class.equals(targetType)) { From cdd2ce7ffc3bc5b90ff7a733ea9ad8edf518bffd Mon Sep 17 00:00:00 2001 From: Andy Baxter Date: Thu, 21 Nov 2024 15:22:41 +0000 Subject: [PATCH 4/4] de-finalise some potential changing parameters --- src/main/java/simpaths/data/Parameters.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/simpaths/data/Parameters.java b/src/main/java/simpaths/data/Parameters.java index fb7f40eb8..9815aa3a9 100644 --- a/src/main/java/simpaths/data/Parameters.java +++ b/src/main/java/simpaths/data/Parameters.java @@ -263,8 +263,8 @@ else if(numberOfChildren <= 5) { //public static int MAX_AGE_IN_EDUCATION;// = MAX_AGE;//30; // Max age a person can stay in education //Cannot set here, as MAX_AGE is not known yet. Now set to MAX_AGE in buildObjects in Model class. //public static int MAX_AGE_MARRIAGE;// = MAX_AGE;//75; // Max age a person can marry //Cannot set here, as MAX_AGE is not known yet. Now set to MAX_AGE in buildObjects in Model class. - private static final int MIN_START_YEAR = 2011; //Minimum allowed starting point. Should correspond to the oldest initial population. - private static final int MAX_START_YEAR = 2021; //Maximum allowed starting point. Should correspond to the most recent initial population. + private static int MIN_START_YEAR = 2011; //Minimum allowed starting point. Should correspond to the oldest initial population. + private static int MAX_START_YEAR = 2021; //Maximum allowed starting point. Should correspond to the most recent initial population. public static int startYear; public static int endYear; private static final int MIN_START_YEAR_TESTING = 2019; @@ -276,7 +276,7 @@ else if(numberOfChildren <= 5) { public static final boolean FLAG_SINGLE_MOTHERS = true; public static boolean flagUnemployment = false; - public static final int BASE_PRICE_YEAR = 2015; // Base price year of model parameters + public static int BASE_PRICE_YEAR = 2015; // Base price year of model parameters public static double PROB_NEWBORN_IS_MALE = 0.5; // Must be strictly greater than 0.0 and less than 1.0