import csv
import numpy as np
import TSP

# Define parameters
population_size = 10
temperature = 100000000
min_temperature = 0.00001

def update_temperature(temperature): return temperature * 0.999

# Read graph data
graph = TSP.csv_to_graph('state_distances.csv', 'New Mexico', 'New Mexico')

# Create population
population = [TSP.Individual(graph) for i in range(population_size)]

num_iter = 0
while temperature >= min_temperature:	
	for i in range(population_size):
		population[i] = population[i].procreate(temperature)
	
	temperature = update_temperature(temperature)
	
	num_iter += 1

distances = [-individual.fitness for individual in population]
fittest_individual = population[np.argmin(distances)]

print('Shortest path: %.3f miles' % (-fittest_individual.fitness))
print('Shortest path: ' + ','.join(fittest_individual.path))
# Define parameters
population_size = 1
temperature = 1000000
min_temperature = 0.0001


def update_temperature(temperature):
    return temperature * 0.999


# Read graph data
graph = TSP.csv_to_graph('state_distances.csv', 'New Mexico', 'New Mexico')

# Create population
individual = TSP.Individual(graph)

out_file = open('shortest_path_iterative.csv', 'w')
out_csv = csv.writer(out_file, lineterminator='\n')
out_csv.writerow(['cumulative.distance', 'name', 'iteration'])

num_iter = 0
while temperature >= min_temperature:
    for i in range(population_size):
        individual = individual.procreate(temperature)

    temperature = update_temperature(temperature)

    cumulative_distance = 0
    old_state = individual.path[0]
    for state in individual.path: