Skip to content

Commit 9dde302

Browse files
authored
feat: minimum iterations (#304)
1 parent dcd39fe commit 9dde302

3 files changed

Lines changed: 21 additions & 3 deletions

File tree

core/src/main/java/org/eqasim/core/simulation/termination/EqasimTerminationConfigGroup.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public EqasimTerminationConfigGroup() {
2020
static private final String THRESHOLD = "threshold";
2121
static private final String MODES = "modes";
2222
static private final String HISTORY_FILE = "historyFile";
23+
static private final String MINIMUM_ITERATIONS = "minimumIterations";
2324

2425
private int horizon = 10;
2526
private int smoothing = 20;
@@ -29,6 +30,8 @@ public EqasimTerminationConfigGroup() {
2930

3031
private String historyFile = null;
3132

33+
private int minimumIterations = 0;
34+
3235
@StringGetter(HORIZON)
3336
public int getHorizon() {
3437
return horizon;
@@ -89,6 +92,16 @@ public String getHistoryFile() {
8992
return historyFile;
9093
}
9194

95+
@StringGetter(MINIMUM_ITERATIONS)
96+
public int getMinimumIterations() {
97+
return minimumIterations;
98+
}
99+
100+
@StringSetter(MINIMUM_ITERATIONS)
101+
public void setMinimumIterations(int value) {
102+
this.minimumIterations = value;
103+
}
104+
92105
static public EqasimTerminationConfigGroup getOrCreate(Config config) {
93106
if (!config.getModules().containsKey(GROUP_NAME)) {
94107
config.addModule(new EqasimTerminationConfigGroup());

core/src/main/java/org/eqasim/core/simulation/termination/EqasimTerminationCriterion.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,16 @@ public class EqasimTerminationCriterion implements TerminationCriterion {
1717

1818
private final int firstIteration;
1919
private final int lastIteration;
20+
private final int minimumIteration;
2021

2122
private final TerminationWriter writer;
2223

23-
public EqasimTerminationCriterion(int firstIteration, int lastIteration,
24+
public EqasimTerminationCriterion(int firstIteration, int lastIteration, int minimumIteration,
2425
Map<String, TerminationIndicatorSupplier> indicators, Map<String, TerminationCriterionCalculator> criteria,
2526
TerminationWriter writer) {
2627
this.firstIteration = firstIteration;
2728
this.lastIteration = lastIteration;
29+
this.minimumIteration = minimumIteration;
2830

2931
this.indicators = indicators;
3032
this.criteria = criteria;
@@ -39,7 +41,7 @@ public boolean mayTerminateAfterIteration(int iteration) {
3941

4042
boolean mayTerminate = false;
4143

42-
if (iteration > firstIteration) {
44+
if (iteration > firstIteration && iteration >= minimumIteration) {
4345
// check if we may terminate
4446
TerminationData terminationData = prepareTerminationData(iteration);
4547
history.add(terminationData);

core/src/main/java/org/eqasim/core/simulation/termination/EqasimTerminationModule.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,10 @@ EqasimTerminationCriterion provideEqasimTerminationCriterion(ControllerConfigGro
4242
new TerminationReader(indicators.keySet(), criteria.keySet()).read(historyURL);
4343
}
4444

45-
return new EqasimTerminationCriterion(firstIteration, lastIteration, indicators, criteria, writer);
45+
int minimumIteration = firstIteration + terminationConfig.getMinimumIterations();
46+
47+
return new EqasimTerminationCriterion(firstIteration, lastIteration, minimumIteration, indicators, criteria,
48+
writer);
4649
}
4750

4851
@Provides

0 commit comments

Comments
 (0)