my_gspn <- create_PN(places = data.frame(id=c("s1","s2","s3","h1","h2"),label=c("Stage 1","Stage 2","Stage 3","healing","Healthy")),
transitions = data.frame(id=c("I","GW","h","D","E","F"),label=c("Incubation","Get Worse","heal","D","E","F")),
flows = data.frame(from=c("s1","I" ,"s2","GW","h" ,"s1","h1","D" ,"s2","h1","E" ,"s3","h1","F" ),
to =c("I" ,"s2","GW","s3","h1", "D","D" ,"h2", "E","E" ,"h2", "F","F" ,"h2")))
GSPN <- create_marked_PN(my_gspn,"s1","h2")
visNetwork_from_PN(my_gspn)
# Function to discretize a CTMC given a time step
discretize_CTMC <- function(Q, dt) {
# Q: Continuous-time transition rate matrix
# dt: Time step for discretization
n_states <- nrow(Q)
P <-(Q * dt)
P_discrete <- matrix(0, nrow = n_states, ncol = n_states)
for (i in 1:n_states) {
for (j in 1:n_states) {
P_discrete[i, j] <- P[i, j] + (i == j)
}
}
return(P_discrete)
}
# Define parameters for the continuous-time Markov chain
heal = 11
Inc = 3
GW = 10
# Create the continuous-time transition rate matrix
Q <- matrix(data = c(-1/Inc-1/heal, 1/Inc , 0 , 1/heal,
0 , -1/GW-1/heal, 1/GW , 1/heal,
0 , 0 , -1/heal, 1/heal,
0 , 0 , 0 , 0 ), nrow = 4, byrow = TRUE)
# Discretize the continuous-time Markov chain using a time step
dt <- 1 # Time step (1 day)
P_discrete <- discretize_CTMC(Q, dt)
# define CTMC
CTMC= new("markovchain",states=c("1","2","3","H"),
transitionMatrix=P_discrete, name="Stages")
initialState = c(1,0,0,0)
probFever=c(0.1,0.5,0.8,0)
#show(CTMC)
plot(CTMC,package="diagram")

timesteps <- 76
dis.df <- data.frame( "timestep" = numeric(),
"S1" = numeric(), "S2" = numeric(), "S3" = numeric(),
"H" = numeric(), "PF" = numeric(), stringsAsFactors=FALSE)
for (i in 0:timesteps) {
dis.df[nrow(dis.df) + 1, 1:5] <- as.list(c(i,round(as.numeric(initialState * CTMC ^ i),3)))
dis.df[i+1, 6] <- t(as.vector(dis.df[i + 1, 2:5],mode = "numeric")) %*% probFever
}
#dis.df
#plot(dis.df$timestep,dis.df$S1)
#points(dis.df$timestep,dis.df$S2, col="yellow")
#points(dis.df$timestep,dis.df$S3, col="red")
#points(dis.df$timestep,dis.df$H, col="green")
#points(dis.df$timestep,dis.df$PF, col="blue")
What is the probability that the place Healthy is empty after 12
days for different discretization time steps (e.g. 2, 1, 0.5, 0.25,
0.1)?
# Define time steps
time_steps <- c(2, 1, 0.5, 0.25, 0.1)
# Initialize results data frame
results <- data.frame("Time Step" = numeric(),
"Probability Healthy empty after 12 days" = numeric(),"tp Get Worse on day 9" = numeric(), "tp Heal after 12 days" = numeric(), stringsAsFactors = FALSE)
# Loop through different time steps
for (dt in time_steps) {
# Discretize the continuous-time Markov chain using the current time step
P_discrete <- discretize_CTMC(Q, dt)
# Create the Markov chain object
CTMC <- new("markovchain", states = c("1", "2", "3", "H"),
transitionMatrix = P_discrete, name = "Stages")
# Calculate
prob_NotHealthy12 <- 1-as.numeric(initialState * CTMC ^ 12)[4] # oder um genau zu sein sum(as.numeric(initialState * CTMC ^ 12)[1:3])
tp_GW9 <- as.numeric(initialState * CTMC ^ 9)[2] * 1/10 # pi_2 * beta, also state bei dem GW aktiviert mal dist von GW
tp_h12 <- sum(as.numeric(initialState * CTMC ^ 12)[1:3]) * 1/11 # heal so lange active wie healthy nicht erreicht
# Record the results
results[nrow(results)+1,]=c(dt, round(prob_NotHealthy12,3),round(tp_GW9,3),round(tp_h12,3))
}
# Display the results
results[,1:2]
## Time.Step Probability.Healthy.empty.after.12.days
## 1 2.00 0.090
## 2 1.00 0.319
## 3 0.50 0.572
## 4 0.25 0.759
## 5 0.10 0.896
What is the throughput of transition Get Worse on the 9th day for
different discretization time steps (e.g. 2, 1, 0.5, 0.25, 0.1)?
results[,c(1,3)]
## Time.Step tp.Get.Worse.on.day.9
## 1 2.00 0.002
## 2 1.00 0.020
## 3 0.50 0.041
## 4 0.25 0.040
## 5 0.10 0.023
What is the throughput of transition Heal after 12 days for
different discretization time steps (e.g. 2, 1, 0.5, 0.25, 0.1)?
results[,c(1,4)]
## Time.Step tp.Heal.after.12.days
## 1 2.00 0.008
## 2 1.00 0.029
## 3 0.50 0.052
## 4 0.25 0.069
## 5 0.10 0.081
LS0tDQp0aXRsZTogIkFETSBBc3NpZ25tZW50IDMiDQphdXRob3I6ICJEb21pbmlrIERpZWRyaWNoIg0KZGF0ZTogImByIFN5cy5EYXRlKClgIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNvZGVfZm9sZGluZzogaGlkZSANCi0tLQ0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KbGlicmFyeShwZXRyaW5ldFIpDQpsaWJyYXJ5KG1hcmtvdmNoYWluKQ0KYGBgDQoNCmBgYHtyIHdhcm5pbmc9RkFMU0V9DQpteV9nc3BuIDwtIGNyZWF0ZV9QTihwbGFjZXMgPSBkYXRhLmZyYW1lKGlkPWMoInMxIiwiczIiLCJzMyIsImgxIiwiaDIiKSxsYWJlbD1jKCJTdGFnZSAxIiwiU3RhZ2UgMiIsIlN0YWdlIDMiLCJoZWFsaW5nIiwiSGVhbHRoeSIpKSwNCiAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zID0gZGF0YS5mcmFtZShpZD1jKCJJIiwiR1ciLCJoIiwiRCIsIkUiLCJGIiksbGFiZWw9YygiSW5jdWJhdGlvbiIsIkdldCBXb3JzZSIsImhlYWwiLCJEIiwiRSIsIkYiKSksDQogICAgICAgICAgICAgICAgICAgICBmbG93cyA9IGRhdGEuZnJhbWUoZnJvbT1jKCJzMSIsIkkiICwiczIiLCJHVyIsImgiICwiczEiLCJoMSIsIkQiICwiczIiLCJoMSIsIkUiICwiczMiLCJoMSIsIkYiICksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gID1jKCJJIiAsInMyIiwiR1ciLCJzMyIsImgxIiwgIkQiLCJEIiAsImgyIiwgIkUiLCJFIiAsImgyIiwgIkYiLCJGIiAsImgyIikpKQ0KDQpHU1BOIDwtIGNyZWF0ZV9tYXJrZWRfUE4obXlfZ3NwbiwiczEiLCJoMiIpDQoNCnZpc05ldHdvcmtfZnJvbV9QTihteV9nc3BuKQ0KDQpgYGANCg0KDQpgYGB7cn0NCg0KIyBGdW5jdGlvbiB0byBkaXNjcmV0aXplIGEgQ1RNQyBnaXZlbiBhIHRpbWUgc3RlcA0KZGlzY3JldGl6ZV9DVE1DIDwtIGZ1bmN0aW9uKFEsIGR0KSB7DQogICMgUTogQ29udGludW91cy10aW1lIHRyYW5zaXRpb24gcmF0ZSBtYXRyaXgNCiAgIyBkdDogVGltZSBzdGVwIGZvciBkaXNjcmV0aXphdGlvbg0KICANCiAgbl9zdGF0ZXMgPC0gbnJvdyhRKQ0KICBQIDwtKFEgKiBkdCkNCiAgUF9kaXNjcmV0ZSA8LSBtYXRyaXgoMCwgbnJvdyA9IG5fc3RhdGVzLCBuY29sID0gbl9zdGF0ZXMpDQogIA0KICBmb3IgKGkgaW4gMTpuX3N0YXRlcykgew0KICAgIGZvciAoaiBpbiAxOm5fc3RhdGVzKSB7DQogICAgICBQX2Rpc2NyZXRlW2ksIGpdIDwtIFBbaSwgal0gKyAoaSA9PSBqKQ0KICAgIH0NCiAgfQ0KICANCiAgcmV0dXJuKFBfZGlzY3JldGUpDQp9DQoNCiMgRGVmaW5lIHBhcmFtZXRlcnMgZm9yIHRoZSBjb250aW51b3VzLXRpbWUgTWFya292IGNoYWluDQpoZWFsID0gMTEgDQpJbmMgID0gMw0KR1cgICA9IDEwDQoNCiMgQ3JlYXRlIHRoZSBjb250aW51b3VzLXRpbWUgdHJhbnNpdGlvbiByYXRlIG1hdHJpeA0KUSA8LSBtYXRyaXgoZGF0YSA9IGMoLTEvSW5jLTEvaGVhbCwgMS9JbmMgICAgICAgLCAwICAgICAgLCAxL2hlYWwsDQogICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgLCAtMS9HVy0xL2hlYWwsIDEvR1cgICAsIDEvaGVhbCwNCiAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAsIDAgICAgICAgICAgICwgLTEvaGVhbCwgMS9oZWFsLA0KICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICwgMCAgICAgICAgICAgLCAwICAgICAgLCAwICAgICAgKSwgbnJvdyA9IDQsIGJ5cm93ID0gVFJVRSkNCg0KIyBEaXNjcmV0aXplIHRoZSBjb250aW51b3VzLXRpbWUgTWFya292IGNoYWluIHVzaW5nIGEgdGltZSBzdGVwDQpkdCA8LSAxICAjIFRpbWUgc3RlcCAoMSBkYXkpDQpQX2Rpc2NyZXRlIDwtIGRpc2NyZXRpemVfQ1RNQyhRLCBkdCkNCg0KIyBkZWZpbmUgQ1RNQw0KQ1RNQz0gbmV3KCJtYXJrb3ZjaGFpbiIsc3RhdGVzPWMoIjEiLCIyIiwiMyIsIkgiKSwNCiAgICAgICAgICB0cmFuc2l0aW9uTWF0cml4PVBfZGlzY3JldGUsIG5hbWU9IlN0YWdlcyIpDQppbml0aWFsU3RhdGUgPSBjKDEsMCwwLDApDQpwcm9iRmV2ZXI9YygwLjEsMC41LDAuOCwwKQ0KDQojc2hvdyhDVE1DKQ0KDQpwbG90KENUTUMscGFja2FnZT0iZGlhZ3JhbSIpDQoNCnRpbWVzdGVwcyA8LSA3Ng0KZGlzLmRmIDwtIGRhdGEuZnJhbWUoICJ0aW1lc3RlcCIgPSBudW1lcmljKCksDQogIlMxIiA9IG51bWVyaWMoKSwgIlMyIiA9IG51bWVyaWMoKSwgIlMzIiA9IG51bWVyaWMoKSwNCiAiSCIgPSBudW1lcmljKCksICJQRiIgPSBudW1lcmljKCksIHN0cmluZ3NBc0ZhY3RvcnM9RkFMU0UpDQoNCmZvciAoaSBpbiAwOnRpbWVzdGVwcykgew0KICBkaXMuZGZbbnJvdyhkaXMuZGYpICsgMSwgMTo1XSA8LSBhcy5saXN0KGMoaSxyb3VuZChhcy5udW1lcmljKGluaXRpYWxTdGF0ZSAqIENUTUMgXiBpKSwzKSkpDQogIGRpcy5kZltpKzEsIDZdIDwtIHQoYXMudmVjdG9yKGRpcy5kZltpICsgMSwgMjo1XSxtb2RlID0gIm51bWVyaWMiKSkgJSolIHByb2JGZXZlcg0KfQ0KI2Rpcy5kZg0KDQojcGxvdChkaXMuZGYkdGltZXN0ZXAsZGlzLmRmJFMxKQ0KI3BvaW50cyhkaXMuZGYkdGltZXN0ZXAsZGlzLmRmJFMyLCBjb2w9InllbGxvdyIpDQojcG9pbnRzKGRpcy5kZiR0aW1lc3RlcCxkaXMuZGYkUzMsIGNvbD0icmVkIikNCiNwb2ludHMoZGlzLmRmJHRpbWVzdGVwLGRpcy5kZiRILCBjb2w9ImdyZWVuIikNCiNwb2ludHMoZGlzLmRmJHRpbWVzdGVwLGRpcy5kZiRQRiwgY29sPSJibHVlIikNCg0KYGBgDQoNCg0KIyMgV2hhdCBpcyB0aGUgcHJvYmFiaWxpdHkgdGhhdCB0aGUgcGxhY2UgSGVhbHRoeSBpcyBlbXB0eSBhZnRlciAxMiBkYXlzIGZvciBkaWZmZXJlbnQgZGlzY3JldGl6YXRpb24gdGltZSBzdGVwcyAoZS5nLiAyLCAxLCAwLjUsIDAuMjUsIDAuMSk/DQoNCmBgYHtyfQ0KIyBEZWZpbmUgdGltZSBzdGVwcw0KdGltZV9zdGVwcyA8LSBjKDIsIDEsIDAuNSwgMC4yNSwgMC4xKQ0KDQojIEluaXRpYWxpemUgcmVzdWx0cyBkYXRhIGZyYW1lDQpyZXN1bHRzIDwtIGRhdGEuZnJhbWUoIlRpbWUgU3RlcCIgPSBudW1lcmljKCksDQogICAgICAgICAgICAgICAgICAgICAgIlByb2JhYmlsaXR5IEhlYWx0aHkgZW1wdHkgYWZ0ZXIgMTIgZGF5cyIgPSBudW1lcmljKCksInRwIEdldCBXb3JzZSBvbiBkYXkgOSIgPSBudW1lcmljKCksICJ0cCBIZWFsIGFmdGVyIDEyIGRheXMiID0gbnVtZXJpYygpLCBzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpDQoNCiMgTG9vcCB0aHJvdWdoIGRpZmZlcmVudCB0aW1lIHN0ZXBzDQpmb3IgKGR0IGluIHRpbWVfc3RlcHMpIHsNCiAgIyBEaXNjcmV0aXplIHRoZSBjb250aW51b3VzLXRpbWUgTWFya292IGNoYWluIHVzaW5nIHRoZSBjdXJyZW50IHRpbWUgc3RlcA0KICBQX2Rpc2NyZXRlIDwtIGRpc2NyZXRpemVfQ1RNQyhRLCBkdCkNCiAgDQogICMgQ3JlYXRlIHRoZSBNYXJrb3YgY2hhaW4gb2JqZWN0DQogIENUTUMgPC0gbmV3KCJtYXJrb3ZjaGFpbiIsIHN0YXRlcyA9IGMoIjEiLCAiMiIsICIzIiwgIkgiKSwNCiAgICAgICAgICAgICAgdHJhbnNpdGlvbk1hdHJpeCA9IFBfZGlzY3JldGUsIG5hbWUgPSAiU3RhZ2VzIikNCiAgDQogICMgQ2FsY3VsYXRlIA0KICBwcm9iX05vdEhlYWx0aHkxMiA8LSAxLWFzLm51bWVyaWMoaW5pdGlhbFN0YXRlICogQ1RNQyBeIDEyKVs0XSAjIG9kZXIgdW0gZ2VuYXUgenUgc2VpbiBzdW0oYXMubnVtZXJpYyhpbml0aWFsU3RhdGUgKiBDVE1DIF4gMTIpWzE6M10pDQoNCiAgdHBfR1c5IDwtIGFzLm51bWVyaWMoaW5pdGlhbFN0YXRlICogQ1RNQyBeIDkpWzJdICogMS8xMCAjIHBpXzIgKiBiZXRhLCBhbHNvIHN0YXRlIGJlaSBkZW0gR1cgYWt0aXZpZXJ0IG1hbCBkaXN0IHZvbiBHVw0KICANCiAgdHBfaDEyIDwtIHN1bShhcy5udW1lcmljKGluaXRpYWxTdGF0ZSAqIENUTUMgXiAxMilbMTozXSkgKiAxLzExICAjIGhlYWwgc28gbGFuZ2UgYWN0aXZlIHdpZSBoZWFsdGh5IG5pY2h0IGVycmVpY2h0DQogIA0KICAjIFJlY29yZCB0aGUgcmVzdWx0cw0KICByZXN1bHRzW25yb3cocmVzdWx0cykrMSxdPWMoZHQsIHJvdW5kKHByb2JfTm90SGVhbHRoeTEyLDMpLHJvdW5kKHRwX0dXOSwzKSxyb3VuZCh0cF9oMTIsMykpDQp9DQoNCiMgRGlzcGxheSB0aGUgcmVzdWx0cw0KcmVzdWx0c1ssMToyXQ0KYGBgDQoNCg0KIyMgV2hhdCBpcyB0aGUgdGhyb3VnaHB1dCBvZiB0cmFuc2l0aW9uIEdldCBXb3JzZSBvbiB0aGUgOXRoIGRheSBmb3IgZGlmZmVyZW50IGRpc2NyZXRpemF0aW9uIHRpbWUgc3RlcHMgKGUuZy4gMiwgMSwgMC41LCAwLjI1LCAwLjEpPw0KDQoNCmBgYHtyfQ0KcmVzdWx0c1ssYygxLDMpXQ0KYGBgDQoNCg0KDQojIyBXaGF0IGlzIHRoZSB0aHJvdWdocHV0IG9mIHRyYW5zaXRpb24gSGVhbCBhZnRlciAxMiBkYXlzIGZvciBkaWZmZXJlbnQgZGlzY3JldGl6YXRpb24gdGltZSBzdGVwcyAoZS5nLiAyLCAxLCAwLjUsIDAuMjUsIDAuMSk/DQoNCg0KYGBge3J9DQpyZXN1bHRzWyxjKDEsNCldDQpgYGANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K