# rooms: number of rooms availible for surger
# par: number of patients for the day
surgery = function(rooms,pat){
rnum = rep(0,rooms) #room number
recovtime = rep(3,pat)
mat = matrix(0,nrow=pat,ncol=6)
colnames(mat,do.NULL=FALSE)
colnames(mat) = c("Pat. #","Random #",'Op. Length',"Start Time","End Time",'Op. Room')
mat[,1] = seq(1,pat) #Patient Number
mat[,2] = sample(0:999,pat,replace=T) #Patient random number
mat[,4] = rep(7.5,pat)
mat[1:rooms,6] = seq(1,rooms) #Initial Room numbers
for (i in 1:pat){ #Calculate the patient surgery times and recovery times
if (mat[i,2]<=384){
mat[i,3]=0.5
recovtime[i]=0}
if (mat[i,2]>384 && mat[i,2]<=620){
mat[i,3]=1}
if (mat[i,2]>620 && mat[i,2]<=766){
mat[i,3]=1.5}
if (mat[i,2]>766 && mat[i,2]<=856){
mat[i,3]=2.0}
if (mat[i,2]>856 && mat[i,2]<=911){
mat[i,3]=2.5}
if (mat[i,2]>911 && mat[i,2]<=945){
mat[i,3]=3.0}
if (mat[i,2]>945 && mat[i,2]<=966){
mat[i,3]=3.5}
if (mat[i,2]>966 && mat[i,2]<=979){
mat[i,3]=4.0}
if (mat[i,2]>980 && mat[i,2]<=999){
mat[i,3]=5}
}
mat[1:rooms,5] = mat[1:rooms,4]+mat[1:rooms,3] #1st round end times
rnum = mat[1:rooms,3] #inital time after 1st round of surgeries
#Find next availible room
# which.min finds the
for (j in (rooms+1):pat){
ravail = which.min(rnum)
mat[j,6] = ravail #Operating Room #
mat[j,4] = mat[j,4]+rnum[ravail]+0.25 #Start Time
mat[j,5] = mat[j,4]+mat[j,3] #End Time
rnum[ravail] = rnum[ravail]+mat[j,3]+0.25
}
return(mat)
}
surgery (4,32)
## Pat. # Random # Op. Length Start Time End Time Op. Room
## [1,] 1 39 0.5 7.50 8.00 1
## [2,] 2 242 0.5 7.50 8.00 2
## [3,] 3 37 0.5 7.50 8.00 3
## [4,] 4 630 1.5 7.50 9.00 4
## [5,] 5 291 0.5 8.25 8.75 1
## [6,] 6 138 0.5 8.25 8.75 2
## [7,] 7 843 2.0 8.25 10.25 3
## [8,] 8 285 0.5 9.00 9.50 1
## [9,] 9 221 0.5 9.00 9.50 2
## [10,] 10 308 0.5 9.25 9.75 4
## [11,] 11 289 0.5 9.75 10.25 1
## [12,] 12 866 2.5 9.75 12.25 2
## [13,] 13 805 2.0 10.00 12.00 4
## [14,] 14 217 0.5 10.50 11.00 1
## [15,] 15 515 1.0 10.50 11.50 3
## [16,] 16 514 1.0 11.25 12.25 1
## [17,] 17 381 0.5 11.75 12.25 3
## [18,] 18 119 0.5 12.25 12.75 4
## [19,] 19 333 0.5 12.50 13.00 1
## [20,] 20 597 1.0 12.50 13.50 2
## [21,] 21 522 1.0 12.50 13.50 3
## [22,] 22 854 2.0 13.00 15.00 4
## [23,] 23 213 0.5 13.25 13.75 1
## [24,] 24 940 3.0 13.75 16.75 2
## [25,] 25 837 2.0 13.75 15.75 3
## [26,] 26 124 0.5 14.00 14.50 1
## [27,] 27 816 2.0 14.75 16.75 1
## [28,] 28 70 0.5 15.25 15.75 4
## [29,] 29 379 0.5 16.00 16.50 3
## [30,] 30 790 2.0 16.00 18.00 4
## [31,] 31 562 1.0 16.75 17.75 3
## [32,] 32 57 0.5 17.00 17.50 1