Skip to content

Commit

Permalink
further wip
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolaspayette committed Jan 31, 2025
1 parent 753c87f commit 42ac771
Show file tree
Hide file tree
Showing 22 changed files with 492 additions and 152 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ public class DefaultFishingBehaviourFactory<C extends Content<C>>
private VesselScopeFactory<? extends FishingGear<C>> fishingGear;
private VesselScopeFactory<? extends Hold<C>> hold;
private VesselScopeFactory<? extends Supplier<Fisheable<C>>> fisheableSupplier;
private BehaviourFactory<?> afterFishingBehaviour;

@Override
protected Fishing<C> newInstance(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public SteppableAction nextAction(
final Vessel vessel,
final LocalDateTime dateTime
) {
return new Action(vessel, dateTime, fishingGear.nextDuration());
return new Action(vessel, dateTime, fishingGear.getDurationSupplier().get());
}

@Getter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,33 @@

package uk.ac.ox.poseidon.agents.behaviours.strategy;

public class ThereAndBackBehaviourFactory {
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import uk.ac.ox.poseidon.agents.behaviours.BehaviourFactory;
import uk.ac.ox.poseidon.agents.vessels.Vessel;
import uk.ac.ox.poseidon.core.Simulation;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class ThereAndBackBehaviourFactory extends BehaviourFactory<ThereAndBack> {

private BehaviourFactory<?> fishingDestinationBehaviour;
private BehaviourFactory<?> fishingBehaviour;
private BehaviourFactory<?> travellingBehaviour;

@Override
protected ThereAndBack newInstance(
final Simulation simulation,
final Vessel vessel
) {
return new ThereAndBack(
fishingDestinationBehaviour.get(simulation, vessel),
fishingBehaviour.get(simulation, vessel),
travellingBehaviour.get(simulation, vessel)
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/*
* POSEIDON: an agent-based model of fisheries
* Copyright (c) 2025 CoHESyS Lab [email protected]
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/

package uk.ac.ox.poseidon.agents.vessels;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import uk.ac.ox.poseidon.core.Factory;
import uk.ac.ox.poseidon.core.Simulation;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class VesselScopeFactoryDecorator<C> extends VesselScopeFactory<C> {
private Factory<C> delegate;

@Override
protected C newInstance(
final Simulation simulation,
final Vessel vessel
) {
return delegate.get(simulation);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,11 @@
import uk.ac.ox.poseidon.biology.Fisheable;

import java.time.Duration;
import java.util.function.Supplier;

public interface FishingGear<C extends Content<C>> {

Duration nextDuration();
Supplier<Duration> getDurationSupplier();

Bucket<C> fish(Fisheable<C> fisheable);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,30 +19,28 @@

package uk.ac.ox.poseidon.agents.vessels.gears;

import lombok.Getter;
import uk.ac.ox.poseidon.biology.Bucket;
import uk.ac.ox.poseidon.biology.Fisheable;
import uk.ac.ox.poseidon.biology.biomass.Biomass;

import java.time.Duration;
import java.util.function.Supplier;

import static uk.ac.ox.poseidon.core.utils.Preconditions.checkUnitRange;

@Getter
public class FixedBiomassProportionGear implements FishingGear<Biomass> {

private final double proportion;
private final Duration duration;
private final Supplier<Duration> durationSupplier;

public FixedBiomassProportionGear(
final double proportion,
final Duration duration
final Supplier<Duration> durationSupplier
) {
this.proportion = checkUnitRange(proportion, "proportion");
this.duration = duration;
}

@Override
public Duration nextDuration() {
return duration;
this.durationSupplier = durationSupplier;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,24 +23,29 @@
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import uk.ac.ox.poseidon.agents.vessels.Vessel;
import uk.ac.ox.poseidon.agents.vessels.VesselScopeFactory;
import uk.ac.ox.poseidon.core.Factory;
import uk.ac.ox.poseidon.core.GlobalScopeFactory;
import uk.ac.ox.poseidon.core.Simulation;

import java.time.Duration;
import java.util.function.Supplier;

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class FixedBiomassProportionGearFactory
extends GlobalScopeFactory<FixedBiomassProportionGear> {
extends VesselScopeFactory<FixedBiomassProportionGear> {

private double proportion;
private Factory<? extends Duration> duration;
private Factory<? extends Supplier<Duration>> durationSupplier;

@Override
protected FixedBiomassProportionGear newInstance(final Simulation simulation) {
return new FixedBiomassProportionGear(proportion, duration.get(simulation));
protected FixedBiomassProportionGear newInstance(
final Simulation simulation,
final Vessel vessel
) {
return new FixedBiomassProportionGear(proportion, durationSupplier.get(simulation));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,17 @@

package uk.ac.ox.poseidon.agents.vessels.hold;

import uk.ac.ox.poseidon.agents.vessels.Vessel;
import uk.ac.ox.poseidon.agents.vessels.VesselScopeFactory;
import uk.ac.ox.poseidon.biology.Content;
import uk.ac.ox.poseidon.core.Factory;
import uk.ac.ox.poseidon.core.Simulation;

public class InfiniteHoldFactory<C extends Content<C>> implements Factory<InfiniteHold<C>> {
public class InfiniteHoldFactory<C extends Content<C>> extends VesselScopeFactory<InfiniteHold<C>> {
@Override
public InfiniteHold<C> get(final Simulation simulation) {
protected InfiniteHold<C> newInstance(
final Simulation simulation,
final Vessel vessel
) {
return new InfiniteHold<>();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,17 @@

package uk.ac.ox.poseidon.agents.vessels.hold;

import uk.ac.ox.poseidon.agents.vessels.Vessel;
import uk.ac.ox.poseidon.agents.vessels.VesselScopeFactory;
import uk.ac.ox.poseidon.biology.Content;
import uk.ac.ox.poseidon.core.Factory;
import uk.ac.ox.poseidon.core.Simulation;

public class VoidHoldFactory<C extends Content<C>> implements Factory<VoidHold<C>> {
public class VoidHoldFactory<C extends Content<C>> extends VesselScopeFactory<VoidHold<C>> {
@Override
public VoidHold<C> get(final Simulation simulation) {
protected VoidHold<C> newInstance(
final Simulation simulation,
final Vessel vessel
) {
return new VoidHold<>();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/*
* POSEIDON: an agent-based model of fisheries
* Copyright (c) 2024 CoHESyS Lab [email protected]
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/

package uk.ac.ox.poseidon.core.suppliers;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import uk.ac.ox.poseidon.core.GlobalScopeFactory;
import uk.ac.ox.poseidon.core.Simulation;

import java.util.function.BooleanSupplier;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class ConstantBooleanSupplierFactory extends GlobalScopeFactory<BooleanSupplier> {

public static final ConstantBooleanSupplierFactory ALWAYS_TRUE =
new ConstantBooleanSupplierFactory(true);

public static final ConstantBooleanSupplierFactory ALWAYS_FALSE =
new ConstantBooleanSupplierFactory(false);

private boolean value;

@Override
protected BooleanSupplier newInstance(final Simulation simulation) {
return () -> value;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/*
* POSEIDON: an agent-based model of fisheries
* Copyright (c) 2025 CoHESyS Lab [email protected]
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/

package uk.ac.ox.poseidon.core.suppliers;

import uk.ac.ox.poseidon.core.Factory;
import uk.ac.ox.poseidon.core.time.DurationFactory;
import uk.ac.ox.poseidon.core.utils.ConstantSupplierFactory;

import java.time.Duration;
import java.util.function.Supplier;

public class ConstantDurationSuppliers {
public static final Factory<Supplier<Duration>> ONE_DAY_DURATION_SUPPLIER =
new ConstantSupplierFactory<>(new DurationFactory(1, 0, 0, 0));
public static final Factory<Supplier<Duration>> ONE_HOUR_DURATION_SUPPLIER =
new ConstantSupplierFactory<>(new DurationFactory(1, 0, 0, 0));
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class FixedIntSupplierFactory extends GlobalScopeFactory<IntSupplier> {
public class ConstantIntSupplierFactory extends GlobalScopeFactory<IntSupplier> {

private int value;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* POSEIDON: an agent-based model of fisheries
* Copyright (c) 2024 CoHESyS Lab [email protected]
* Copyright (c) 2025 CoHESyS Lab [email protected]
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Expand All @@ -17,21 +17,18 @@
*
*/

package uk.ac.ox.poseidon.core.time;
package uk.ac.ox.poseidon.core.suppliers;

import lombok.RequiredArgsConstructor;

import java.time.Duration;
import java.util.function.Supplier;

@RequiredArgsConstructor
public class DurationSupplier implements Supplier<Duration> {

private final Supplier<Long> secondsSupplier;
public class ConstantSupplier<T> implements Supplier<T> {
private final T value;

@Override
public Duration get() {
return Duration.ofSeconds(secondsSupplier.get());
public T get() {
return null;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/*
* POSEIDON: an agent-based model of fisheries
* Copyright (c) 2025 CoHESyS Lab [email protected]
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/

package uk.ac.ox.poseidon.core.suppliers;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import uk.ac.ox.poseidon.core.Factory;
import uk.ac.ox.poseidon.core.GlobalScopeFactory;
import uk.ac.ox.poseidon.core.Simulation;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class ConstantSupplierFactory<T> extends GlobalScopeFactory<ConstantSupplier<T>> {

private Factory<T> value;

@Override
protected ConstantSupplier<T> newInstance(final Simulation simulation) {
return new ConstantSupplier<>(value.get(simulation));
}
}
Loading

0 comments on commit 42ac771

Please sign in to comment.