From d2a044f504749b11818877b2778e0eb6603cc9c1 Mon Sep 17 00:00:00 2001 From: Andy Baxter Date: Wed, 28 May 2025 13:32:51 +0100 Subject: [PATCH 1/9] modifying `Run` and `Setup` cli arguments --- .../simpaths/experiment/SimPathsStart.java | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/main/java/simpaths/experiment/SimPathsStart.java b/src/main/java/simpaths/experiment/SimPathsStart.java index 62b004911..9fd9b2ffb 100644 --- a/src/main/java/simpaths/experiment/SimPathsStart.java +++ b/src/main/java/simpaths/experiment/SimPathsStart.java @@ -47,7 +47,8 @@ public class SimPathsStart implements ExperimentBuilder { private static boolean showGui = true; // Show GUI by default - private static boolean setupOnly = false; + private static boolean doSetup = true; + private static boolean doRun = true; private static boolean rewritePolicySchedule = false; @@ -70,13 +71,13 @@ public static void main(String[] args) { runGUIdialog(); } else { try { - runGUIlessSetup(4); + if (doSetup) runGUIlessSetup(4); } catch (FileNotFoundException f) { System.err.println(f.getMessage()); }; } - if (setupOnly) { + if (!doRun) { System.out.println("Setup complete, exiting."); return; } @@ -115,9 +116,12 @@ private static boolean parseCommandLineArgs(String[] args) { startYearOption.setArgName("year"); options.addOption(startYearOption); - Option setupOption = new Option("Setup", "Setup only"); + Option setupOption = new Option("Setup", "Setup only (no run)"); options.addOption(setupOption); + Option runOption = new Option("Run", "Run only (no setup)"); + options.addOption(runOption); + Option rewritePolicyScheduleOption = new Option("r", "rewrite-policy-schedule",false, "Re-write policy schedule from detected policy files"); options.addOption(rewritePolicyScheduleOption); @@ -135,6 +139,10 @@ private static boolean parseCommandLineArgs(String[] args) { try { CommandLine cmd = parser.parse(options, args); + if(cmd.hasOption("Setup") && cmd.hasOption("Run")) { + throw new ParseException("'Run only' and 'Setup only' options cannot be used together."); + } + if (cmd.hasOption("h")) { printHelpMessage(formatter, options); return false; // Exit without reporting an error @@ -157,7 +165,13 @@ private static boolean parseCommandLineArgs(String[] args) { } if (cmd.hasOption("Setup")) { - setupOnly = true; + doSetup = true; + doRun = false; + } + + if (cmd.hasOption("Run")) { + doRun = true; + doSetup = false; } if (cmd.hasOption("r")) { From 44f64b32a60e17efcdf87c2c06afd2648f6667c8 Mon Sep 17 00:00:00 2001 From: Andy Baxter Date: Wed, 28 May 2025 13:37:23 +0100 Subject: [PATCH 2/9] ensure gui-less run starts up --- src/main/java/simpaths/experiment/SimPathsStart.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/simpaths/experiment/SimPathsStart.java b/src/main/java/simpaths/experiment/SimPathsStart.java index 9fd9b2ffb..4621b8e0b 100644 --- a/src/main/java/simpaths/experiment/SimPathsStart.java +++ b/src/main/java/simpaths/experiment/SimPathsStart.java @@ -94,6 +94,7 @@ public static void main(String[] args) { startYear = Integer.parseInt(valueYear); // start the JAS-mine simulation engine + System.out.println("Starting simulation..."); final SimulationEngine engine = SimulationEngine.getInstance(); MicrosimShell gui = null; if (showGui) { @@ -103,6 +104,9 @@ public static void main(String[] args) { SimPathsStart experimentBuilder = new SimPathsStart(); engine.setExperimentBuilder(experimentBuilder); engine.setup(); + + if (!showGui) + engine.startSimulation(); } private static boolean parseCommandLineArgs(String[] args) { From 6175ceb53d4a1a350ca289ff65a98dd00c3e5280 Mon Sep 17 00:00:00 2001 From: Andy Baxter Date: Wed, 28 May 2025 13:38:30 +0100 Subject: [PATCH 3/9] omit observer for gui-less runs --- src/main/java/simpaths/experiment/SimPathsStart.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/simpaths/experiment/SimPathsStart.java b/src/main/java/simpaths/experiment/SimPathsStart.java index 4621b8e0b..6ce13e2f0 100644 --- a/src/main/java/simpaths/experiment/SimPathsStart.java +++ b/src/main/java/simpaths/experiment/SimPathsStart.java @@ -217,7 +217,7 @@ public void buildExperiment(SimulationEngine engine) { engine.addSimulationManager(model); engine.addSimulationManager(collector); - engine.addSimulationManager(observer); + if (showGui) engine.addSimulationManager(observer); model.setCollector(collector); } From 89c0e35a8d11e577cef27eb810e1f6c8d5f57655 Mon Sep 17 00:00:00 2001 From: Andy Baxter Date: Tue, 27 May 2025 14:45:08 +0100 Subject: [PATCH 4/9] reduce default popsize parameter from 170,000 to 50,000 --- src/main/java/simpaths/model/SimPathsModel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/simpaths/model/SimPathsModel.java b/src/main/java/simpaths/model/SimPathsModel.java index d48751e57..79cec6480 100644 --- a/src/main/java/simpaths/model/SimPathsModel.java +++ b/src/main/java/simpaths/model/SimPathsModel.java @@ -95,7 +95,7 @@ public void setFirstRun(boolean firstRun) { private boolean flagUpdateCountry = false; // set to true if switch between countries @GUIparameter(description = "Simulated population size (base year)") - private Integer popSize = 170000; + private Integer popSize = 50000; @GUIparameter(description = "Simulation first year [valid range 2011-2019]") private Integer startYear = 2011; From 2a1beebd4e5bc55c7f4ad4d258f27773092467cc Mon Sep 17 00:00:00 2001 From: Andy Baxter Date: Wed, 28 May 2025 13:57:20 +0100 Subject: [PATCH 5/9] one doomed test for singlerun.jar --- .github/workflows/SimPathsBuild.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/.github/workflows/SimPathsBuild.yml b/.github/workflows/SimPathsBuild.yml index 1beb3c9ad..1cfc9931c 100644 --- a/.github/workflows/SimPathsBuild.yml +++ b/.github/workflows/SimPathsBuild.yml @@ -43,6 +43,28 @@ jobs: - name: Run integration tests run: mvn verify + run-simpaths-start: + needs: build + runs-on: [ ubuntu-latest ] + steps: + - uses: actions/checkout@v4 + - name: Set up JDK 19 + uses: actions/setup-java@v4 + with: + java-version: '19' + distribution: 'temurin' + - uses: actions/download-artifact@v4 + with: + name: simpaths_jars + path: . + - name: Do one full Setup and Run with SimPathsStart (mimicking GUI run) + run: java -jar singlerun.jar -c UK -s 2017 -g false --rewrite-policy-schedule + - name: Check input db exists + id: check_file + uses: thebinaryfelix/check-file-existence-action@1.0.0 + with: + files: 'input/input.mv.db, input/EUROMODpolicySchedule.xlsx, input/DatabaseCountryYear.xlsx' + run-simpaths-persist-root: needs: build runs-on: [ ubuntu-latest ] From d7fcc5609a31144ab4def069d3566b5a4ba4efec Mon Sep 17 00:00:00 2001 From: Andy Baxter Date: Wed, 28 May 2025 14:36:28 +0100 Subject: [PATCH 6/9] make sure runs start from 2019 in singlerun test --- .github/workflows/SimPathsBuild.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/SimPathsBuild.yml b/.github/workflows/SimPathsBuild.yml index 1cfc9931c..a66a91286 100644 --- a/.github/workflows/SimPathsBuild.yml +++ b/.github/workflows/SimPathsBuild.yml @@ -58,7 +58,7 @@ jobs: name: simpaths_jars path: . - name: Do one full Setup and Run with SimPathsStart (mimicking GUI run) - run: java -jar singlerun.jar -c UK -s 2017 -g false --rewrite-policy-schedule + run: java -jar singlerun.jar -c UK -s 2019 -g false --rewrite-policy-schedule - name: Check input db exists id: check_file uses: thebinaryfelix/check-file-existence-action@1.0.0 From b6fde2313925495e850bee79256f8f7b1087cc6a Mon Sep 17 00:00:00 2001 From: Andy Baxter Date: Wed, 28 May 2025 15:40:13 +0100 Subject: [PATCH 7/9] attempt to detect when single run simulation ends --- src/main/java/simpaths/experiment/SimPathsStart.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/simpaths/experiment/SimPathsStart.java b/src/main/java/simpaths/experiment/SimPathsStart.java index 6ce13e2f0..92c95ba3e 100644 --- a/src/main/java/simpaths/experiment/SimPathsStart.java +++ b/src/main/java/simpaths/experiment/SimPathsStart.java @@ -10,6 +10,7 @@ import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; +import java.util.concurrent.TimeUnit; import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.JInternalFrame; @@ -105,8 +106,16 @@ public static void main(String[] args) { engine.setExperimentBuilder(experimentBuilder); engine.setup(); - if (!showGui) + if (!showGui) { engine.startSimulation(); + while (engine.getRunningStatus()) try { + TimeUnit.SECONDS.sleep(10); + } catch (InterruptedException e) { + System.err.println("Interrupted while waiting for simulation to complete."); + return; + } + System.out.println("Simulation complete."); + } } private static boolean parseCommandLineArgs(String[] args) { From c4c4644b4b5edb2e99ec807fe182830d3d122d59 Mon Sep 17 00:00:00 2001 From: Andy Baxter Date: Wed, 28 May 2025 17:40:58 +0100 Subject: [PATCH 8/9] adding quit statement to finish headless simulation --- src/main/java/simpaths/experiment/SimPathsStart.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/simpaths/experiment/SimPathsStart.java b/src/main/java/simpaths/experiment/SimPathsStart.java index 92c95ba3e..7dcb36f38 100644 --- a/src/main/java/simpaths/experiment/SimPathsStart.java +++ b/src/main/java/simpaths/experiment/SimPathsStart.java @@ -114,7 +114,7 @@ public static void main(String[] args) { System.err.println("Interrupted while waiting for simulation to complete."); return; } - System.out.println("Simulation complete."); + engine.quit(); } } From a17c82992ffeddfcd5fa69f48ecdae2e20688032 Mon Sep 17 00:00:00 2001 From: Andrew Baxter Date: Thu, 29 May 2025 09:27:29 +0100 Subject: [PATCH 9/9] Update src/main/java/simpaths/experiment/SimPathsStart.java Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../java/simpaths/experiment/SimPathsStart.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/main/java/simpaths/experiment/SimPathsStart.java b/src/main/java/simpaths/experiment/SimPathsStart.java index 7dcb36f38..ceaa90722 100644 --- a/src/main/java/simpaths/experiment/SimPathsStart.java +++ b/src/main/java/simpaths/experiment/SimPathsStart.java @@ -108,13 +108,18 @@ public static void main(String[] args) { if (!showGui) { engine.startSimulation(); - while (engine.getRunningStatus()) try { - TimeUnit.SECONDS.sleep(10); - } catch (InterruptedException e) { - System.err.println("Interrupted while waiting for simulation to complete."); - return; + try { + while (engine.getRunningStatus()) { + try { + TimeUnit.SECONDS.sleep(10); + } catch (InterruptedException e) { + System.err.println("Interrupted while waiting for simulation to complete."); + return; + } + } + } finally { + engine.quit(); } - engine.quit(); } }