# SWIR¶

The SWIR model was introduced in 2017 by Lee et al. [1].

In this model, during the epidemics, a node is allowed to change its status from Susceptible (S) to Weakened (W) or Infected (I), then to Removed (R).

The model is instantiated on a graph having a non-empty set of infected nodes.

At time t a node in the state I is selected randomly and the states of all neighbors are checked one by one. If the state of a neighbor is S then this state changes either i) to I with probability kappa or ii) to W with probability mu. If the state of a neighbor is W then the state W changes to I with probability nu. We repeat the above process for all nodes in state I and then changes to R for each associated node.

## Statuses¶

During the simulation a node can experience the following statuses:

Name Code
Susceptible 0
Infected 1
Weakened 2
Removed 3

## Parameters¶

Name Type Value Type Default Mandatory Description
kappa Model float in [0, 1]   True
mu Model float in [0, 1]   True
nu Model float in [0, 1]   True

The initial infection status can be defined via:

• percentage_infected: Model Parameter, float in [0, 1]
• Infected: Status Parameter, set of nodes

The two options are mutually exclusive and the latter takes precedence over the former.

## Methods¶

The following class methods are made available to configure, describe and execute the simulation:

### Configure¶

class ndlib.models.epidemics.SWIRModel.SWIRModel(graph)
SWIRModel.__init__(graph)

Model Constructor

Parameters: graph – A networkx graph object
SWIRModel.set_initial_status(self, configuration)

Set the initial model configuration

Parameters: configuration – a ndlib.models.ModelConfig.Configuration object
SWIRModel.reset(self)

Reset the simulation setting the actual status to the initial configuration.

### Describe¶

SWIRModel.get_info(self)

Describes the current model parameters (nodes, edges, status)

Returns: a dictionary containing for each parameter class the values specified during model configuration
SWIRModel.get_status_map(self)

Specify the statuses allowed by the model and their numeric code

Returns: a dictionary (status->code)

### Execute Simulation¶

SWIRModel.iteration(self)

Execute a single model iteration

Parameters: node_status – if the incremental node status has to be returned. Iteration_id, (optional) Incremental node status (dictionary node->status), Status count (dictionary status->node count), Status delta (dictionary status->node delta)
SWIRModel.iteration_bunch(self, bunch_size)

Execute a bunch of model iterations

Parameters: bunch_size – the number of iterations to execute node_status – if the incremental node status has to be returned. a list containing for each iteration a dictionary {“iteration”: iteration_id, “status”: dictionary_node_to_status}

## Example¶

In the code below is shown an example of instantiation and execution of an SEIR simulation on a random graph: we set the initial set of infected nodes as % of the overall population, a probability of infection of 1%, a removal probability of 0.5% and an incubation period of 5% (e.g. 20 iterations).

import networkx as nx
import ndlib.models.ModelConfig as mc
import ndlib.models.epidemics.SWIRModel as swir

# Network topology
g = nx.erdos_renyi_graph(1000, 0.1)

# Model selection
model = swir.SWIRModel(g)

# Model Configuration
cfg = mc.Configuration()