# Reuse copy of initial path for all trials
	nsystems = 4
	initial_paths = []
	for i in xrange(nsystems):
	    initial_paths.append(np.asarray(initial_path))

	initial_temps = [1., np.sqrt(5), np.sqrt(5)**2, np.sqrt(5)**3]

	# Run parallel tempering in serial
	print "\nSerial Parallel Tempering\n"
	for iterr in [10**x for x in [3,4,5]]:
		with Timer() as t:
			solution, history = serial_parallel_tempering(graph, distance,
	                                                         initial_paths, 
	                                                         initial_temps, 
                                                               iterr,
                                                               changepath,
                                                               nswaps, nbefore)

		print "Iterations: {:.2E}".format(iterr)
		print "Calculated path: " + str(solution)
		print "Calculated path length: " + str(distance(graph, solution)) 
		print "Time: " + str(t.interval) + "\n"


	# Run parallel tempering in parallel
	print "\nParallel Parallel Tempering\n"
	for iterr in [10**x for x in [3, 4, 5]]:
		with Timer() as t:
			solution, history = parallel_parallel_tempering(graph, distance,
	                                                           initial_paths, 
            # Use the same initial paths for all algorithms
            initial_Xs = [np.random.permutation(size) for a in range(num_processes)]

            # Run each algorithm using the specified parameters, take their best values and elapsed times throughout the algorithm,
            #    and append these to a list for each.
            solution_ppt, histories_ppt = parallel_parallel_tempering(
                graph, distance, initial_Xs, initial_temps, iterr, changepath, nswaps, nbefore
            )
            best_hist, time_hist = hist_best(histories_ppt[0])
            time_hist_ppt.append(time_hist)
            dist_hist_ppt.append(best_hist)

            print "Parallel Parallel Tempering, run ", i, " complete."

            solution_spt, histories_spt = serial_parallel_tempering(
                graph, distance, initial_Xs, initial_temps, iterr, changepath, nswaps, nbefore
            )
            best_hist, time_hist = hist_best(histories_spt[0])
            time_hist_spt.append(time_hist)
            dist_hist_spt.append(best_hist)

            print "Serial Parallel Tempering, run ", i, " complete."

            solution_sa, history_sa = simulated_annealing(
                graph, distance, initial_Xs[0], initial_temps[0], nbefore, iterr, changepath, nswaps, reheat, cool
            )
            best_hist, time_hist = hist_best(history_sa)
            time_hist_sa.append(time_hist)
            dist_hist_sa.append(best_hist)

            print "Simulated Annealing, run ", i, " complete."