(* http://www.hrz.uni-dortmund.de/A1/software/mathematica.html *) (* Mathematica available on HRZ server zx3 *) < c, tmp = c; c = b; b = tmp]; Join[Take[x, b], Reverse[Take[x, {b+1, c}]], Drop[x, c]] ) (* ************************************************************************** *) (* Simulated Annealing for ordering problems *) SimAnneal[initOrder_, numSweeps_, tInit_, tStop_] := ( parent = initOrder; parentFitness = f[parent, dmat]; temperature = tInit; While[ True, Do[ offspring = LIN2OPT[parent]; offspringFitness = f[offspring, dmat]; deltaF = offspringFitness - parentFitness; If[ deltaF > 0, pAccept = Exp[-deltaF/temperature], pAccept = 1]; fitnlist = Append[fitnlist, parentFitness]; (* for statistics only *) If[ pAccept >= Random[], (* if yes, offspring *) parent = offspring; (* becomes parent *) parentFitness = offspringFitness; Print[" Fitness = ", N[parentFitness]] ] , {numSweeps} ]; temperature = temperature*0.98; Print["T = ", temperature]; If[ temperature < tStop, Break[] ] ]; {parentFitness, parent} ) (* ************************************************************************** *) (* ************************************************************************** *) (* Experiment 1 *) (* Initialization *) citypositions = Flatten[Table[ {i,j}, {i, 0, 6}, {j, 0, 6}], 1]; ListPlot[Append[citypositions, citypositions[[1]]], PlotJoined -> True] dmat = distance[citypositions]; initTour = Table[i, {i,7^2}] fitnlist = {} xx = SimAnneal[initTour, 50, 2, 0.01] ListPlot[Append[Table[citypositions[[parent[[i]]]], {i,1,7^2}], citypositions[[parent[[1]]]]], PlotJoined -> True] LogLogListPlot[fitnlist]