Skip to content

Commit 333b727

Browse files
move Active-FAD limits regulations to its own class
1 parent 62f4030 commit 333b727

File tree

5 files changed

+80
-32
lines changed

5 files changed

+80
-32
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package uk.ac.ox.oxfish.fisher.purseseiner.regulations;
2+
3+
import uk.ac.ox.oxfish.regulations.ForbiddenIf;
4+
import uk.ac.ox.oxfish.regulations.conditions.*;
5+
import uk.ac.ox.oxfish.regulations.quantities.NumberOfActiveFads;
6+
import uk.ac.ox.oxfish.utility.AlgorithmFactory;
7+
import uk.ac.ox.poseidon.regulations.api.Regulations;
8+
9+
import java.util.Map;
10+
11+
public class ActiveFadLimits implements RegulationFactory {
12+
13+
private Map<Integer, ? extends Map<String, Integer>> limitsPerYearAndClass;
14+
15+
@SuppressWarnings("unused")
16+
public ActiveFadLimits() {
17+
}
18+
19+
@SuppressWarnings({"unused", "WeakerAccess"})
20+
public ActiveFadLimits(
21+
final Map<Integer, ? extends Map<String, Integer>> limitsPerYearAndClass
22+
) {
23+
this.limitsPerYearAndClass = limitsPerYearAndClass;
24+
}
25+
26+
@SuppressWarnings("unused")
27+
public Map<Integer, ? extends Map<String, Integer>> getLimitsPerYearAndClass() {
28+
return limitsPerYearAndClass;
29+
}
30+
31+
@SuppressWarnings("unused")
32+
public void setLimitsPerYearAndClass(final Map<Integer, ? extends Map<String, Integer>> limitsPerYearAndClass) {
33+
this.limitsPerYearAndClass = limitsPerYearAndClass;
34+
}
35+
36+
@Override
37+
public AlgorithmFactory<Regulations> get() {
38+
return new ForbiddenIf(
39+
new AllOf(
40+
new ActionCodeIs("DPL"),
41+
new AnyOf(
42+
limitsPerYearAndClass.entrySet().stream().map(yearAndLimits ->
43+
new AllOf(
44+
new InYear(yearAndLimits.getKey()),
45+
new AnyOf(
46+
yearAndLimits.getValue().entrySet().stream().map(classAndLimit ->
47+
new AllOf(
48+
new AgentHasTag("class " + classAndLimit.getKey()),
49+
new NotBelow(new NumberOfActiveFads(), classAndLimit.getValue())
50+
)
51+
)
52+
)
53+
)
54+
)
55+
)
56+
)
57+
);
58+
}
59+
}

POSEIDON/src/main/java/uk/ac/ox/oxfish/fisher/purseseiner/regulations/DefaultEpoRegulations.java

+1-30
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import uk.ac.ox.oxfish.regulations.NamedRegulations;
99
import uk.ac.ox.oxfish.regulations.conditions.*;
1010
import uk.ac.ox.oxfish.regulations.quantities.LastYearlyFisherValue;
11-
import uk.ac.ox.oxfish.regulations.quantities.NumberOfActiveFads;
1211
import uk.ac.ox.oxfish.regulations.quantities.SecondLastYearlyFisherValue;
1312
import uk.ac.ox.oxfish.utility.AlgorithmFactory;
1413
import uk.ac.ox.poseidon.regulations.api.Regulations;
@@ -55,7 +54,7 @@ public static AlgorithmFactory<Regulations> make(final InputPath inputFolder) {
5554
new Not(new AgentHasTag("has_del_license"))
5655
)
5756
),
58-
"Active-FAD limits", makeActiveFadLimits(ACTIVE_FAD_LIMITS),
57+
"Active-FAD limits", new ActiveFadLimits(ACTIVE_FAD_LIMITS),
5958
// Forbid deployments 15 days before closure
6059
"Closure A", new ForbiddenIf(
6160
new AnyOf(
@@ -215,34 +214,6 @@ public static AlgorithmFactory<Regulations> make(final InputPath inputFolder) {
215214
);
216215
}
217216

218-
/**
219-
* TODO: this should be its own factory class
220-
*/
221-
public static ForbiddenIf makeActiveFadLimits(
222-
final Map<Integer, ? extends Map<String, Integer>> activeFadLimits
223-
) {
224-
return new ForbiddenIf(
225-
new AllOf(
226-
new ActionCodeIs("DPL"),
227-
new AnyOf(
228-
activeFadLimits.entrySet().stream().map(yearAndLimits ->
229-
new AllOf(
230-
new InYear(yearAndLimits.getKey()),
231-
new AnyOf(
232-
yearAndLimits.getValue().entrySet().stream().map(classAndLimit ->
233-
new AllOf(
234-
new AgentHasTag("class " + classAndLimit.getKey()),
235-
new NotBelow(new NumberOfActiveFads(), classAndLimit.getValue())
236-
)
237-
)
238-
)
239-
)
240-
)
241-
)
242-
)
243-
);
244-
}
245-
246217
@SuppressWarnings("SameParameterValue")
247218
private static MonthDay addDays(
248219
final MonthDay monthDay,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package uk.ac.ox.oxfish.fisher.purseseiner.regulations;
2+
3+
import uk.ac.ox.oxfish.model.FishState;
4+
import uk.ac.ox.oxfish.utility.AlgorithmFactory;
5+
import uk.ac.ox.poseidon.regulations.api.Regulations;
6+
7+
import java.util.function.Supplier;
8+
9+
public interface RegulationFactory extends Supplier<AlgorithmFactory<Regulations>>, AlgorithmFactory<Regulations> {
10+
@Override
11+
default Regulations apply(final FishState fishState) {
12+
return get().apply(fishState);
13+
}
14+
}

POSEIDON/src/main/java/uk/ac/ox/oxfish/utility/AlgorithmFactories.java

+4
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
import uk.ac.ox.oxfish.fisher.purseseiner.planner.GenerateRandomPlansStrategyFactory;
7070
import uk.ac.ox.oxfish.fisher.purseseiner.planner.PlanningModule;
7171
import uk.ac.ox.oxfish.fisher.purseseiner.planner.factories.*;
72+
import uk.ac.ox.oxfish.fisher.purseseiner.regulations.ActiveFadLimits;
7273
import uk.ac.ox.oxfish.fisher.purseseiner.samplers.*;
7374
import uk.ac.ox.oxfish.fisher.purseseiner.strategies.departing.PurseSeinerDepartingStrategyFactory;
7475
import uk.ac.ox.oxfish.fisher.purseseiner.strategies.destination.GravityDestinationStrategyFactory;
@@ -696,6 +697,9 @@ public class AlgorithmFactories {
696697
));
697698
addFactories(new Factories<>(
698699
Regulations.class,
700+
ImmutableMap.of(
701+
ActiveFadLimits.class, "Active-FAD limits"
702+
),
699703
NamedRegulations.class,
700704
EverythingForbidden.class,
701705
EverythingPermitted.class,

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.google.common.collect.ImmutableMap;
44
import uk.ac.ox.oxfish.experiments.tuna.Policy;
5+
import uk.ac.ox.oxfish.fisher.purseseiner.regulations.ActiveFadLimits;
56
import uk.ac.ox.oxfish.model.scenario.EpoScenario;
67
import uk.ac.ox.oxfish.regulations.NamedRegulations;
78

@@ -12,7 +13,6 @@
1213
import static com.google.common.collect.ImmutableList.toImmutableList;
1314
import static com.google.common.collect.ImmutableMap.toImmutableMap;
1415
import static uk.ac.ox.oxfish.fisher.purseseiner.regulations.DefaultEpoRegulations.ACTIVE_FAD_LIMITS;
15-
import static uk.ac.ox.oxfish.fisher.purseseiner.regulations.DefaultEpoRegulations.makeActiveFadLimits;
1616

1717
public class ActiveFadLimitsPolicies implements PolicySupplier {
1818

@@ -43,7 +43,7 @@ public List<Policy<EpoScenario<?>>> get() {
4343
scenario ->
4444
((NamedRegulations) scenario.getRegulations()).modify(
4545
"Active-FAD limits",
46-
ignored -> makeActiveFadLimits(
46+
ignored -> new ActiveFadLimits(
4747
ImmutableMap.<Integer, Map<String, Integer>>builder()
4848
.putAll(ACTIVE_FAD_LIMITS)
4949
.put(

0 commit comments

Comments
 (0)