Skip to content

MultiCategory Variable #47

@giovannic

Description

@giovannic

Create an optimised variable to represent individuals who could be in a combination of states.

So we can have something like:

vaccinated_with = MulitCategory$new(
  c('AstraZeneca', 'Pfizer', 'Moderna'),
  matrix(FALSE, ncol=3, nrow=population) # initialise with a boolean matrix of shape (category, population)
)

vaccination_process <- function(timestep) {
  ...
  # add a new vaccine without overwriting existing vaccines
  vaccinated_with$queue_update(vaccine_type, vaccinated_population)
  ...
}

waning_process <- function(timestep) {
  ...
  # remove vaccine after it's no longer effective
  vaccinated_with$queue_removal(vaccine_type, vaccinated_population)
  ...
}

immunity_process <- function(timestep) {
  ...
  # do something with patients who have been vaccinated with a combination
  az <- vaccinated_with$get_index_of('AstraZeneca')
  pf <- vaccinated_with$get_index_of('Pfizer')
  both <- az$and(pf) # bitset and operator
  ...
}

This kind of behaviour requires bitset. Which is currently WIP. Issue to track

TODO:

  • A MultiCategory C++ class, you could draw inspiration from CategoricalVariable
  • queue_update logic allows for a client to have a new category without removing their existing one
  • add queue_removal logic so clients can explicitly remove a category
  • update logic executes updates and removals preserving FIFO queue order
  • expose the C++ class to R in src/variable.cpp
  • expose an R6 class to the client, you could draw inspiration from CategoricalVariable

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestmediumWe have estimated that the issue should take an average amount of development time (2 points)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions