Skip to content

Commit 91bd40a

Browse files
add global object set limits policies
1 parent 946850f commit 91bd40a

File tree

6 files changed

+81
-4
lines changed

6 files changed

+81
-4
lines changed

POSEIDON/src/main/java/uk/ac/ox/oxfish/regulations/quantities/YearlyCounter.java

+4
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ public class YearlyCounter implements AlgorithmFactory<Quantity> {
1414
public YearlyCounter() {
1515
}
1616

17+
public YearlyCounter(final String name) {
18+
this.name = new StringParameter(name);
19+
}
20+
1721
public YearlyCounter(final StringParameter name) {
1822
this.name = name;
1923
}

POSEIDON/src/main/java/uk/ac/ox/oxfish/regulations/quantities/YearlyGatherer.java

+4
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ public class YearlyGatherer implements AlgorithmFactory<Quantity> {
1414
public YearlyGatherer() {
1515
}
1616

17+
public YearlyGatherer(final String name) {
18+
this.name = new StringParameter(name);
19+
}
20+
1721
public YearlyGatherer(final StringParameter name) {
1822
this.name = name;
1923
}

epo/src/main/java/uk/ac/ox/poseidon/epo/ActiveFadLimitsPolicies.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,19 @@
88
import java.util.List;
99
import java.util.Map;
1010
import java.util.Map.Entry;
11-
import java.util.function.Supplier;
1211

1312
import static com.google.common.collect.ImmutableList.toImmutableList;
1413
import static com.google.common.collect.ImmutableMap.toImmutableMap;
1514
import static uk.ac.ox.oxfish.fisher.purseseiner.DefaultEpoRegulations.ACTIVE_FAD_LIMITS;
1615
import static uk.ac.ox.oxfish.fisher.purseseiner.DefaultEpoRegulations.makeActiveFadLimits;
1716

18-
public class ActiveFadLimitsPolicies implements Supplier<List<Policy<EpoScenario<?>>>> {
17+
public class ActiveFadLimitsPolicies implements PolicySupplier {
1918

2019
private final int referenceYear;
2120
private final int yearToModify;
2221
private final List<Double> proportionsOfCurrentLimits;
2322

24-
public ActiveFadLimitsPolicies(
23+
ActiveFadLimitsPolicies(
2524
final int referenceYear,
2625
final int yearToModify,
2726
final List<Double> proportionsOfCurrentLimits
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package uk.ac.ox.poseidon.epo;
2+
3+
import uk.ac.ox.oxfish.experiments.tuna.Policy;
4+
import uk.ac.ox.oxfish.model.scenario.EpoScenario;
5+
import uk.ac.ox.oxfish.regulations.ForbiddenIf;
6+
import uk.ac.ox.oxfish.regulations.NamedRegulations;
7+
import uk.ac.ox.oxfish.regulations.conditions.ActionCodeIs;
8+
import uk.ac.ox.oxfish.regulations.conditions.AllOf;
9+
import uk.ac.ox.oxfish.regulations.conditions.AnyOf;
10+
import uk.ac.ox.oxfish.regulations.conditions.NotBelow;
11+
import uk.ac.ox.oxfish.regulations.quantities.YearlyGatherer;
12+
13+
import java.util.List;
14+
15+
import static com.google.common.collect.ImmutableList.toImmutableList;
16+
17+
public class GlobalObjectSetLimit implements PolicySupplier {
18+
19+
private final List<Integer> limits;
20+
21+
public GlobalObjectSetLimit(final List<Integer> limits) {
22+
this.limits = limits;
23+
}
24+
25+
@Override
26+
public List<Policy<EpoScenario<?>>> get() {
27+
return limits
28+
.stream()
29+
.map(limit ->
30+
new Policy<EpoScenario<?>>(
31+
"Global limit of %d object sets",
32+
scenario ->
33+
((NamedRegulations) scenario.getRegulations())
34+
.modify(
35+
"Global object-set limits",
36+
ignored -> new ForbiddenIf(
37+
new AllOf(
38+
new AnyOf(
39+
new ActionCodeIs("FAD"),
40+
new ActionCodeIs("OFS")
41+
),
42+
new NotBelow(
43+
new YearlyGatherer("Number of FAD sets"),
44+
limit
45+
)
46+
)
47+
)
48+
)
49+
)
50+
)
51+
.collect(toImmutableList());
52+
}
53+
}

epo/src/main/java/uk/ac/ox/poseidon/epo/PolicyRuns.java

+8-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import java.nio.file.Path;
1212
import java.nio.file.Paths;
1313

14+
import static java.util.stream.Collectors.toList;
15+
1416
public class PolicyRuns {
1517

1618
public static void main(final String[] args) {
@@ -21,11 +23,16 @@ public static void main(final String[] args) {
2123
"calibrated_scenario.yaml"
2224
));
2325
final Path baseOutputFolder = baseFolder.resolve(Paths.get("policy_runs"));
26+
final ImmutableList<Double> proportions = ImmutableList.of(1.0, 0.75, 0.50, 0.25, 0.10, 0.0);
2427
ImmutableMap.of(
28+
"global_object_set_limits", new GlobalObjectSetLimit(
29+
// 8729 FAD + 4003 OFS in 2022
30+
proportions.stream().map(p -> (int) (p * (8729 + 4003))).collect(toList())
31+
),
2532
"fad_limits", new ActiveFadLimitsPolicies(
2633
2022,
2734
2023,
28-
ImmutableList.of(1.0, 0.75, 0.50, 0.25, 0.10, 0.0)
35+
proportions
2936
)
3037
)
3138
.entrySet()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package uk.ac.ox.poseidon.epo;
2+
3+
import uk.ac.ox.oxfish.experiments.tuna.Policy;
4+
import uk.ac.ox.oxfish.model.scenario.EpoScenario;
5+
6+
import java.util.List;
7+
import java.util.function.Supplier;
8+
9+
public interface PolicySupplier extends Supplier<List<Policy<EpoScenario<?>>>> {
10+
}

0 commit comments

Comments
 (0)