private boolean generateTSPFile(String outFileName) {
		// Now write the graph
		try { 
			PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(outFileName)));
			
			int n = aggGraph.getNodeCount();
			
			// Boilerplate:
			// The following example shows the TSP format used for Concorde TSP Solver
			// The example can be found at http://plato.asu.edu/tsplib.pdf
			//
			//NAME: brazil58
			//TYPE: TSP
			//COMMENT: 58 cities in Brazil (Ferreira)
			//DIMENSION: 58
			//EDGE_WEIGHT_TYPE: EXPLICIT
			//EDGE_WEIGHT_FORMAT: UPPER_ROW 
			//EDGE_WEIGHT_SECTION
			//
			// Using genetic algorithm, we might be able to implement a quick and light TSP solver 
			// inside of the TimeMatrix
			// http://www.mac.cie.uva.es/~arratia/cursos/UVA/GeneticTSP/JAVASimultn/TSP.html

			pw.println("NAME: " + outFileName);
			pw.println("TYPE: TSP");
			DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
            Date date = new Date();
            String datetime = dateFormat.format(date);
			pw.println("COMMENT: This TSP file is generated by GraphtoTSPConverter at " + datetime);
			pw.println("DIMENSION: " + n);
			pw.println("EDGE_WEIGHT_TYPE: EXPLICIT");
			pw.println("EDGE_WEIGHT_FORMAT: UPPER_ROW");
			pw.println("EDGE_WEIGHT_SECTION");
			
			
			int[][]  weight_matrix = new int[n][n];
			int max_weight = Integer.MIN_VALUE;
			
			// Collect Weights 
			
			for (int i = 0; i < n; i++) {
				for (int j = i+1; j < n; j++) {
					AggNode srcNode = aggGraph.getNode(i);
					AggNode dstNode = aggGraph.getNode(j);
					AggEdge edge = srcNode.getConnectingEdge(dstNode);
					
					if (edge != null) {
						Collection<Integer> rows = edge.getAllItems();
						weight_matrix[i][j] = rows.size();
						if (rows.size() > max_weight) max_weight = rows.size();
					}
					else {
						weight_matrix[i][j] = 0;
					}
				}
				
			}
			
			// Print Distance (= Max_Weights / Weights)
			
			for (int i = 0; i < n; i++) {
				for (int j = i+1; j < n; j++) {
					float distance;
					if (weight_matrix[i][j] != 0) {
						distance = (float) max_weight / weight_matrix[i][j];
					}
					else {
						distance = max_weight * 10;
					}
					pw.print (distance + " ");
				}
				pw.println("");
			}
			
			pw.println("EOF");			
			pw.close();
		}
		catch (IOException e) { 
			e.printStackTrace();
			return false;
		}
		
		return true;
	}