diff --git a/.github/workflows/SimPathsBuild.yml b/.github/workflows/SimPathsBuild.yml index 1beb3c9ad..a66a91286 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 2019 -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 ] diff --git a/src/main/java/simpaths/experiment/SimPathsStart.java b/src/main/java/simpaths/experiment/SimPathsStart.java index 62b004911..ceaa90722 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; @@ -47,7 +48,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 +72,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; } @@ -93,6 +95,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) { @@ -102,6 +105,22 @@ public static void main(String[] args) { SimPathsStart experimentBuilder = new SimPathsStart(); engine.setExperimentBuilder(experimentBuilder); engine.setup(); + + if (!showGui) { + engine.startSimulation(); + 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(); + } + } } private static boolean parseCommandLineArgs(String[] args) { @@ -115,9 +134,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 +157,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 +183,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")) { @@ -199,7 +231,7 @@ public void buildExperiment(SimulationEngine engine) { engine.addSimulationManager(model); engine.addSimulationManager(collector); - engine.addSimulationManager(observer); + if (showGui) engine.addSimulationManager(observer); model.setCollector(collector); } 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;