Skip to content

Commit

Permalink
run evaluator at end of two-punch calibration
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolaspayette committed Apr 4, 2024
1 parent 5bf40a1 commit 5aa8b93
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 42 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,7 @@ public Result calibrate(final GenericOptimization optimizationProblem) {
saveCalibratedScenario(optimizationProblem, solution, calibratedScenarioFile);
writeBounds(optimizationProblem, solution, boundsFile);
return new Result(
runFolder,
calibrationFile,
calibratedScenarioFile,
logFile,
Expand Down Expand Up @@ -390,26 +391,33 @@ public AbstractOptimizer apply(final int populationSize) {
}

public static class Result {
private final Path runFolder;
private final Path calibrationFile;
private final Path calibratedScenarioFile;
private final Path logFile;
private final Path boundsFile;
private final double[] solution;

public Result(
final Path runFolder,
final Path calibrationFile,
final Path calibratedScenarioFile,
final Path logFile,
final Path boundsFile,
final double[] solution
) {
this.runFolder = runFolder;
this.calibrationFile = calibrationFile;
this.calibratedScenarioFile = calibratedScenarioFile;
this.logFile = logFile;
this.boundsFile = boundsFile;
this.solution = solution;
}

public Path getRunFolder() {
return runFolder;
}

@SuppressWarnings("unused")
public Path getCalibrationFile() {
return calibrationFile;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@
import uk.ac.ox.oxfish.maximization.YearlyResultsRowProvider;
import uk.ac.ox.oxfish.model.FishState;
import uk.ac.ox.oxfish.model.data.monitors.loggers.AbundanceFadAttractionEventObserver;
import uk.ac.ox.oxfish.model.data.monitors.loggers.GlobalBiomassLogger;
import uk.ac.ox.oxfish.model.data.monitors.loggers.PurseSeineActionsLogger;
import uk.ac.ox.oxfish.model.data.monitors.loggers.PurseSeineTripLogger;
import uk.ac.ox.oxfish.model.scenario.Scenario;
import uk.ac.ox.oxfish.utility.yaml.FishYAML;

Expand Down Expand Up @@ -57,7 +60,7 @@ public class Evaluator implements JCommanderRunnable {
@Parameter(names = "--track_fads_of_vessels")
private Set<String> vesselsWhoseFadsToTrack = ImmutableSet.of(); //"1779", "453", "1552");
@Parameter(names = {"-r", "--num-runs"})
private int numRuns = Math.min(16, getRuntime().availableProcessors());
private int numRuns = Math.min(8, getRuntime().availableProcessors());
@Parameter(names = {"-y", "--years"})
private int numYearsToRuns = 3;
@Parameter(names = "--parallel")
Expand Down Expand Up @@ -115,7 +118,7 @@ public void run() {
scenario = loadScenario();
break;
case "md":
scenario = new ScenarioExtractor(calibrationFolder)
scenario = new ScenarioExtractor(calibrationFolder, calibrationFolder.resolve(scenarioSource))
.getAndWriteToFile(CALIBRATED_SCENARIO_FILENAME);
break;
default:
Expand Down Expand Up @@ -144,9 +147,9 @@ public void run() {
}

runner
/*.registerRowProvider("sim_action_events.csv", PurseSeineActionsLogger::new)
.registerRowProvider("sim_action_events.csv", PurseSeineActionsLogger::new)
.registerRowProvider("sim_trip_events.csv", PurseSeineTripLogger::new)
.registerRowProvider("sim_global_biomass.csv", GlobalBiomassLogger::new)*/
.registerRowProvider("sim_global_biomass.csv", GlobalBiomassLogger::new)
// turn the following line on or off as needed:
// .registerRowProvider("death_events.csv", DeathEventsRowProvider::new)
.run(numYearsToRuns, 1, runCounter);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,45 +37,12 @@ public class ScenarioExtractor implements Supplier<Scenario> {
private final Path calibrationLogFile;
private final Path calibrationFolder;

public ScenarioExtractor(
final Path calibrationFolder
) {
this(calibrationFolder, Paths.get("calibration_log.md"));
}

public ScenarioExtractor(
final Path calibrationFolder,
final Path calibrationLogFile
) {
this.calibrationLogFile = calibrationLogFile;
this.calibrationFolder = calibrationFolder;
}

public Scenario getAndWriteToFile(final String outputFileName) {
final Scenario scenario = get();
writeScenarioToFile(scenario, outputFileName);
return scenario;
}

@Override
public Scenario get() {
final Path calibrationFilePath = findCalibrationFile(calibrationFolder);
final Path logFilePath = calibrationFolder.resolve(calibrationLogFile);
final double[] solution = new SolutionExtractor(logFilePath).bestSolution().getKey();
final GenericOptimization optimization = GenericOptimization.fromFile(calibrationFilePath);
return makeScenario(optimization, solution);
}

private void writeScenarioToFile(
final Scenario scenario,
final String outputFileName
) {
final File outputFile = calibrationFolder.resolve(outputFileName).toFile();
try (final Writer writer = new FileWriter(outputFile)) {
new FishYAML().dump(scenario, writer);
} catch (final IOException e) {
throw new IllegalStateException("Error while writing file: " + outputFile, e);
}
this.calibrationLogFile = calibrationLogFile;
}

private static Path findCalibrationFile(final Path folder) {
Expand Down Expand Up @@ -117,4 +84,31 @@ private static boolean isCalibrationFile(final Path path) {
throw new IllegalStateException(e);
}
}

public Scenario getAndWriteToFile(final String outputFileName) {
final Scenario scenario = get();
writeScenarioToFile(scenario, outputFileName);
return scenario;
}

@Override
public Scenario get() {
final Path calibrationFilePath = findCalibrationFile(calibrationFolder);
final Path logFilePath = calibrationFolder.resolve(calibrationLogFile);
final double[] solution = new SolutionExtractor(logFilePath).bestSolution().getKey();
final GenericOptimization optimization = GenericOptimization.fromFile(calibrationFilePath);
return makeScenario(optimization, solution);
}

private void writeScenarioToFile(
final Scenario scenario,
final String outputFileName
) {
final File outputFile = calibrationFolder.resolve(outputFileName).toFile();
try (final Writer writer = new FileWriter(outputFile)) {
new FishYAML().dump(scenario, writer);
} catch (final IOException e) {
throw new IllegalStateException("Error while writing file: " + outputFile, e);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ public void run() {
buildLocalCalibrationProblem(globalCalibratorResult.getSolution(), 0.2);
localCalibrationProblem.setRunsPerSetting(2);

new Calibrator(
final Calibrator.Result localCalibratorResult = new Calibrator(
"local",
50,
maxLocalCalls,
Expand All @@ -166,9 +166,10 @@ public void run() {
new Calibrator.ParticleSwarmOptimizationGCPSOInitializer()
).calibrate(localCalibrationProblem);

// TODO run Evaluator and maybe sensitivity
// new Evaluator()

final Evaluator evaluator = new Evaluator();
evaluator.setCalibrationFolder(localCalibratorResult.getRunFolder());
evaluator.setScenarioSource(localCalibratorResult.getCalibratedScenarioFile());
evaluator.run();
}

}

0 comments on commit 5aa8b93

Please sign in to comment.