tick_simulation = function(state, edge_list) {
const new_state = { node_states: state.node_states.slice(0),
time_in_state: state.time_in_state.slice(0),
infection_pathways: []};
for(let i = 0; i < edge_list.length; i++) {
new_state.time_in_state[i] = state.time_in_state[i] + 1;
}
for(let i = 0; i < edge_list.length; i++) {
if(state.node_states[i] == STATES.INFECTED) {
if(state.time_in_state[i] == time_infected) {
new_state.node_states[i] = STATES.RECOVERED;
new_state.time_in_state[i] = 0;
}
for(let j = 0; j < edge_list[i].length; j++) {
if(state.node_states[edge_list[i][j]] == STATES.SUSCEPTIBLE && Math.random() < infection_probability) {
new_state.node_states[edge_list[i][j]] = STATES.INFECTED;
new_state.time_in_state[edge_list[i][j]] = 0;
new_state.infection_pathways.push({
source: i,
target: edge_list[i][j]
});
}
}
}
if(state.node_states[i] == STATES.RECOVERED && state.time_in_state[i] == time_recovered) {
new_state.node_states[i] = STATES.SUSCEPTIBLE;
new_state.time_in_state[i] = 0;
}
}
return new_state;
}