Bonjour,
Je suis à la recherche d'une idée d'une application du recuit simulé, j'ai pensé au problème du sac à dos mais on m'a dit que j'aurai du mal a calculer la probabilité d'acceptation (algorithme de métropolis) à cause de la probabilité stationnaire ou je sais pas...
J'ai déjà appliqué le recuit simulé sur le problème du voyageur mais je n'ai pas vraiment compris mathématiquement, je sais qu'on avait une matrice en abscisse et ordonnée les numéro des ville et la valeur était la distance des villes V[i,j]=d(i,j) :
Citation :
############## Algorithme du recuit #################################################
n <- 200000 //Nombre d'itération
N <- 40 // Nombre de ville
beta <- 0.002 //paramètre ????
g_old <- 1:N //Vecteur contenant l'ordre des villes qui contient le trajet
g_best <- 1:N //Vecteur contenant l'ordre des villes qui contient le trajet
Hg <- function(G){ //Calcul de la distance du trajet du vecteur G qui comporte l'ordre des villes
H <- V[G[N]+1,1]+V[G[1],1]
for (i in 1: (N-1)) {
H <- H + V[G[i],G[i+1]]
}
return(H)
}
H_old <- Hg(g_old) //Calcul de la distance du trajet g_old
resultat <- 1:n
for (j in 1:n) {
beta_j <- beta*sqrt(j)
point <- sample(1:N,2) //permutation de deux points du vecteur g_old
g_new <- g_old
g_new[point[1]] <-g_old[point[2]]
g_new[point[2]] <-g_old[point[1]]
# calcul H_new, la distance du nouveau vecteur dont deux point de g_old ont été permuté
H_new <- Hg(g_new)
alpha <- min(exp(-beta_j*(H_new-H_old)),1) //algo de metropolis
u <- runif(1,0,1)
if (H_new < H_old){
g_best <- g_new
}
if (u<alpha){
g_old <- g_new
H_old <- H_new
}
resultat[j] <- H_old
}
Je me demandais si je pouvais le faire avec le problème du sac a dos...