Skip to content

Commit

Permalink
request number of active FADs from fisher daily data when running pol…
Browse files Browse the repository at this point in the history
…icies
nicolaspayette committed Feb 28, 2024
1 parent 29277c3 commit 65198a7
Showing 7 changed files with 83 additions and 28 deletions.
Original file line number Diff line number Diff line change
@@ -46,6 +46,7 @@
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.function.Supplier;
import java.util.logging.Logger;
import java.util.stream.IntStream;
@@ -293,12 +294,20 @@ public Runner<S> writeScenarioToFile(final String outputFileName) {
}

public Runner<S> requestFisherYearlyData() {
return requestFisherYearlyData(__ -> true);
}

public Runner<S> requestFisherYearlyData(final Predicate<String> columnNamePredicate) {
return registerRowProviders(
FISHER_YEARLY_DATA_FILENAME,
fishState -> fishState
.getFishers()
.stream()
.map(fisher -> new TidyFisherYearlyData(fisher.getYearlyData(), fisher.getTagsList().get(0)))
.map(fisher -> new TidyFisherYearlyData(
fisher.getYearlyData(),
columnNamePredicate,
fisher.getTagsList().get(0)
))
.collect(toImmutableList())
);
}
@@ -312,20 +321,27 @@ Runner<S> registerRowProviders(
return this;
}

public Runner<S> requestFisherDailyData() {
public Runner<S> requestFisherDailyData(final Predicate<String> columnNamePredicate) {
return registerRowProviders(
FISHER_DAILY_DATA_FILENAME,
fishState -> fishState
.getFishers()
.stream()
.map(fisher -> new TidyFisherDailyData(fisher.getDailyData(), fisher.getTagsList().get(0)))
.map(fisher -> new TidyFisherDailyData(
fisher.getDailyData(),
columnNamePredicate,
fisher.getTagsList().get(0)
))
.collect(toImmutableList())
);
}

@SuppressWarnings({"WeakerAccess", "unused"})
public Runner<S> requestYearlyData() {
return registerRowProvider(YEARLY_DATA_FILENAME, fishState -> new TidyYearlyData(fishState.getYearlyDataSet()));
public Runner<S> requestYearlyData(final Predicate<String> columnNamePredicate) {
return registerRowProvider(YEARLY_DATA_FILENAME, fishState -> new TidyYearlyData(
fishState.getYearlyDataSet(),
columnNamePredicate
));
}

public Runner<S> registerRowProvider(
Original file line number Diff line number Diff line change
@@ -25,6 +25,7 @@
import uk.ac.ox.oxfish.model.data.collectors.TimeSeries;

import java.util.List;
import java.util.function.Predicate;

import static java.lang.Math.toIntExact;

@@ -33,8 +34,12 @@ public class TidyFisherDailyData extends TidyTimeSeries<TimeSeries<Fisher>> {
private static final List<String> HEADERS = ImmutableList.of("ves_no", "step", "variable", "value", "unit");
private final String boatId;

public TidyFisherDailyData(final TimeSeries<Fisher> fisherDailyData, final String boatId) {
super(fisherDailyData);
public TidyFisherDailyData(
final TimeSeries<Fisher> fisherDailyData,
final Predicate<String> columnNamePredicate,
final String boatId
) {
super(fisherDailyData, columnNamePredicate);
this.boatId = boatId;
}

@@ -44,7 +49,10 @@ public List<String> getHeaders() {
}

@Override
List<Object> makeRow(final DataColumn column, final int index) {
List<Object> makeRow(
final DataColumn column,
final int index
) {
return ImmutableList.of(
boatId, // boat_id
index, // step
Original file line number Diff line number Diff line change
@@ -25,6 +25,7 @@
import uk.ac.ox.oxfish.model.data.collectors.TimeSeries;

import java.util.List;
import java.util.function.Predicate;

import static java.lang.Math.toIntExact;

@@ -33,8 +34,12 @@ public class TidyFisherYearlyData extends TidyTimeSeries<TimeSeries<Fisher>> {
private static final List<String> HEADERS = ImmutableList.of("ves_no", "year", "variable", "value", "unit");
private final String boatId;

public TidyFisherYearlyData(final TimeSeries<Fisher> fisherYearlyData, final String boatId) {
super(fisherYearlyData);
public TidyFisherYearlyData(
final TimeSeries<Fisher> fisherYearlyData,
final Predicate<String> columnNamePredicate,
final String boatId
) {
super(fisherYearlyData, columnNamePredicate);
this.boatId = boatId;
}

@@ -44,7 +49,10 @@ public List<String> getHeaders() {
}

@Override
List<Object> makeRow(final DataColumn column, final int index) {
List<Object> makeRow(
final DataColumn column,
final int index
) {
return ImmutableList.of(
boatId, // boat_id
index + 1, // year
Original file line number Diff line number Diff line change
@@ -24,25 +24,37 @@

import java.util.Collection;
import java.util.List;
import java.util.function.Predicate;

import static com.google.common.collect.ImmutableList.toImmutableList;
import static java.util.stream.IntStream.range;

public abstract class TidyTimeSeries<T extends TimeSeries<?>> implements RowProvider {

private final T timeSeries;
private final Predicate<String> columnNamePredicate;

TidyTimeSeries(final T timeSeries) {
TidyTimeSeries(
final T timeSeries,
final Predicate<String> columnNamePredicate
) {
this.timeSeries = timeSeries;
this.columnNamePredicate = columnNamePredicate;
}

@Override
public Iterable<? extends Collection<?>> getRows() {
return timeSeries.getColumns().stream().flatMap(column ->
range(0, column.size()).mapToObj(index -> makeRow(column, index))
).collect(toImmutableList());
return timeSeries
.getColumns()
.stream()
.filter(column -> columnNamePredicate.test(column.getName()))
.flatMap(column -> range(0, column.size()).mapToObj(index -> makeRow(column, index)))
.collect(toImmutableList());
}

abstract List<Object> makeRow(DataColumn column, int index);
abstract List<Object> makeRow(
DataColumn column,
int index
);

}
Original file line number Diff line number Diff line change
@@ -24,13 +24,17 @@
import uk.ac.ox.oxfish.model.data.collectors.TimeSeries;

import java.util.List;
import java.util.function.Predicate;

public class TidyYearlyData extends TidyTimeSeries<TimeSeries<?>> {

private static final List<String> HEADERS = ImmutableList.of("year", "variable", "value", "unit", "y_label");

public TidyYearlyData(final TimeSeries<?> timeSeries) {
super(timeSeries);
public TidyYearlyData(
final TimeSeries<?> timeSeries,
final Predicate<String> columnNamePredicate
) {
super(timeSeries, columnNamePredicate);
}

@Override
@@ -39,7 +43,10 @@ public List<String> getHeaders() {
}

@Override
List<Object> makeRow(final DataColumn column, final int index) {
List<Object> makeRow(
final DataColumn column,
final int index
) {
return ImmutableList.of(
index + 1, // year
column.getName(), // variable
2 changes: 1 addition & 1 deletion epo/epo_inputs
20 changes: 12 additions & 8 deletions epo/src/main/java/uk/ac/ox/poseidon/epo/policies/PolicyRuns.java
Original file line number Diff line number Diff line change
@@ -32,21 +32,19 @@
import java.util.List;
import java.util.Map.Entry;
import java.util.logging.Logger;
import java.util.stream.IntStream;

import static com.google.common.collect.ImmutableList.toImmutableList;
import static com.google.common.collect.ImmutableMap.toImmutableMap;
import static java.util.stream.Collectors.toList;

public class PolicyRuns {

private static final Logger logger = Logger.getLogger(PolicyRuns.class.getName());

public static void main(final String[] args) {
final Path baseFolder = Paths.get(System.getProperty("user.home"), "workspace", "tuna", "np");
final Path baseFolder = Paths.get(
System.getProperty("user.home"), "workspace", "epo_calibration_runs", "runs"
);
final Path baseScenario = baseFolder.resolve(Paths.get(
"calibrations",
"2023-12-20/cenv0729/2023-12-26_18.01.39_local",
"2024-02-13", "cenv0729", "2024-02-17_06.26.53_local",
"calibrated_scenario.yaml"
));
final Path baseOutputFolder = Paths.get(
@@ -55,16 +53,19 @@ public static void main(final String[] args) {
final List<Integer> yearsActive = ImmutableList.of(2023);
final ImmutableList<Double> proportions = ImmutableList.of(0.75, 0.50, 0.25, 0.10, 0.0);
final ImmutableMap<String, List<Policy<EpoScenario<?>>>> policies = ImmutableMap.of(
/*
"global_object_set_limits", new GlobalObjectSetLimit(
yearsActive,
// 8729 FAD + 4003 OFS in 2022:
proportions.stream().map(p -> (int) (p * (8729 + 4003))).collect(toList())
),
*/
"fad_limits", new ActiveFadLimitsPolicies(
yearsActive,
2022,
proportions
),
)
/*
"fad_limits_fine", new ActiveFadLimitsPolicies(
yearsActive,
2022,
@@ -84,6 +85,7 @@ public static void main(final String[] args) {
-120,
ImmutableList.of(5, 15, 30)
)
*/
)
.entrySet()
.stream()
@@ -92,7 +94,7 @@ public static void main(final String[] args) {
entry -> entry.getValue().getWithDefault()
));

final int numberOfRunsPerPolicy = 2;
final int numberOfRunsPerPolicy = 1;
final int numberOfPolicies = policies.values().stream().mapToInt(List::size).sum();
logger.info(String.format(
"About to run %d policies %d times (%d total runs)",
@@ -113,6 +115,8 @@ public static void main(final String[] args) {
.setPolicies(entry.getValue())
.setParallel(true)
.setWriteScenarioToFile(true)
.requestFisherDailyData(columnName -> columnName.equals("Number of active FADs"))
.requestFisherYearlyData()
.registerRowProvider("yearly_results.csv", YearlyResultsRowProvider::new);
if (!policyName.equals("fad_limits_fine")) {
runner

0 comments on commit 65198a7

Please sign in to comment.