How to implement simulated annealing in R




While trying to implement recommenders through R,I came across some piece of code:

ratingMatrix <-,5,0,1),c(4,0,0,1),c(1,1,0,5),c(1,0,0,4),c(0,1,5,4)))
#Naming the columns:
names(ratingMatrix) = c('P1','P2','P3','P4')
#Naming the rows:
rownames(ratingMatrix) = paste("U",1:5,sep = "")
#Converting to simple triplet matrix to retain only non-zero values and their index values:
p = slam::as.simple_triplet_matrix(ratingMatrix)
#Simulated Annealing:
#Initialisation of Parameters
par = rep(1,18)#There are a total of 18 values in U and M matrices together.
#Forming objective function:
fnc = function(par){
  u = matrix(par[1:10],nrow = 5,byrow = T)#U matrix
  m = matrix(par[11:18],nrow = 2,byrow = T)#transposed M
  #matrix initialisation
  R = u %*% m
  Rv = sapply(1:13,function(x)R[p$i[x],p$j[x]])
  sum((p$v-Rv)^2)#Sum of square of error which is to be minimized

val = GenSA(par,fnc,lower = rep(0,18),upper = rep(4,18),
                        control = list(threshold.stop = 0.0001))
#Final rating matrix after optimization
matrix(val$par[1:10],nrow = 5,byrow = T)%*%matrix(val$par[11:18],nrow = 2,byrow = T)

The final matrix that is returned is:

I am not being able to understand the Simulated Annealing part.
Can someone please help me with this??