slim.simulation.farm module

A Farm is a fundamental agent in this simulation. It has a number of functions:

  • controlling individual cages

  • managing its own finances

  • choose whether to cooperate with other farms belonging to the same organisation

class slim.simulation.farm.Farm(id_: int, cfg: Config, initial_lice_pop: Optional[Dict[str, int]] = None)

Bases: slim.log.LoggableMixin

Define a salmon farm containing salmon cages. Over time the salmon in the cages grow and are subjected to external infestation pressure from sea lice.

Create a farm.

Parameters
  • id – the id of the farm.

  • cfg – the farm configuration

  • initial_lice_pop – if provided, overrides default generated lice population

add_treatment(treatment_type: Treatment, day: datetime.datetime, force=False) bool

Ask to add a treatment. If a treatment was applied too early or if too many treatments have been applied so far the request is rejected.

Note that if at least one cage is eligible for treatment and the conditions above are still respected this method will still return True.

Eligibility depends on the following conditions:

  • the cage should have started by the day treatment is applied

  • the cage should not be fallowing

  • the cage should not be treated by that day with that same type of treatment

  • the lice count should be greater than 1.0 (to prevent spamming)

If force is True, the last three constraints will be ignored.

Parameters
  • treatment_type – the treatment type to apply

  • day – the day when to start applying the treatment

  • force – if True, ignore some eligibility requirement.

Returns

whether the treatment has been added to at least one cage or not.

apply_action(cur_date: datetime.datetime, action: int)

Apply an action

Parameters
  • cur_date – the date when the action was issued

  • action – the action identifier as defined in slim.types.Treatments

disperse_offspring(eggs_by_hatch_date: Dict[datetime.datetime, GenoDistrib], cur_date: datetime.datetime) List[Tuple[List[Dict[datetime.datetime, GenoDistrib]], datetime.datetime]]

DEPRECATED: it shouldn’t be within a farm’s responbility to calculate cage arrivals within other farms.

Allocate new offspring between the farms and cages.

Assumes the lice can float freely across a given farm so that they are not bound to a single cage while not attached to a fish.

Parameters
  • eggs_by_hatch_date – Dictionary of genotype distributions based on hatch date

  • cur_date – Current date of the simulation

disperse_offspring_v2(eggs_by_hatch_date: Dict[datetime.datetime, GenoDistrib], cur_date: datetime.datetime) Tuple[List[Dict[datetime.datetime, GenoDistrib]], datetime.datetime]

Allocate new offspring within the farm

Assumes the lice can float freely across a given farm so that they are not bound to a single cage while not attached to a fish.

Parameters
  • eggs_by_hatch_date – Dictionary of genotype distributions based on hatch date

  • cur_date – Current date of the simulation

distribute_cage_offspring(cage_allocations: List[Dict[datetime.datetime, GenoDistrib]], arrival_time: datetime.datetime)
fallow()
generate_sampling_events()
generate_treatment_event(treatment_type: Treatment, cur_date: datetime.datetime) TreatmentEvent

Generate a new treatment event with the correct efficacy based on the given day and type.

Parameters
  • treatment_type – the type of treatment

  • cur_date – the current date

Returns

the treatment event

get_cage_allocation(ncages: int, eggs_by_hatch_date: Dict[datetime.datetime, GenoDistrib]) List[Dict[datetime.datetime, GenoDistrib]]

Return allocation of eggs for given number of cages.

Parameters
  • ncages – Number of bins to allocate to

  • eggs_by_hatch_date – Dictionary of genotype distributions based on hatch date

Returns

List of dictionaries of genotype distributions based on hatch date per bin

get_cage_arrivals_stats(cage_arrivals: List[Dict[datetime.datetime, GenoDistrib]]) Tuple[int, List[int], List[GenoDistrib]]

Get stats about the cage arrivals for logging

Parameters

cage_arrivals – List of Dictionaries of genotype distributions based on hatch date.

Returns

Tuple representing total number of arrivals, arrival, distribution and genotype distribution by cage

get_cage_pressures(external_inflow: int) List[int]

Get external pressure divided into cages

Parameters

external_inflow – the total external pressure

Returns

List of values of external pressure for each cage

get_farm_allocation(target_farm: int, eggs_by_hatch_date: Dict[datetime.datetime, GenoDistrib]) Dict[datetime.datetime, GenoDistrib]

Return farm allocation of arrivals, that is a dictionary of genotype distributions based on hatch date updated to take into account probability of making it to the target farm.

The probability accounts for interfarm water movement (currents) as well as lice egg survival.

Note: for efficiency reasons this class modifies eggs_by_hatch_date in-place.

Parameters
  • target_farm_id – Farm the eggs are travelling to

  • eggs_by_hatch_date – Dictionary of genotype distributions based on hatch date

Returns

Updated dictionary of genotype distributions based on hatch date

get_gym_space() ObservationSpace
Returns

a Gym space for the agent that controls this farm.

get_profit(cur_date: datetime.datetime) float

Get the current mass of fish that can be resold.

Parameters

cur_date – the current day

Returns

the total profit that can be earned from this farm at the current time

property is_treating
Returns

a list of applied treatments as binary indices

property lice_genomics

Return the overall lice population indexed by geno distribution and stage.

property lice_population

Return the overall lice population in a farm

property num_fish

Return the number of fish across all cages

to_json_dict(**kwargs)
update(cur_date: datetime.datetime, ext_influx: int, ext_pressure_ratios: numpy.ndarray) Tuple[Dict[datetime.datetime, GenoDistrib], float]

Update the status of the farm given the growth of fish and change in population of parasites. Also distribute the offspring across cages.

Parameters
  • cur_date – Current date

  • ext_influx – the amount of lice that enter a cage

  • ext_pressure_ratios – the ratio to use for the external pressure

Returns

a pair of (dictionary of genotype distributions based on hatch date, cost of the update)

update_arrivals(arrivals: Tuple[List[Dict[datetime.datetime, GenoDistrib]], datetime.datetime])