{"id":18410087,"url":"https://github.com/shinjimc/simulated_annealing_tsp","last_synced_at":"2025-07-24T21:06:53.875Z","repository":{"id":245892585,"uuid":"805193509","full_name":"ShinjiMC/Simulated_Annealing_TSP","owner":"ShinjiMC","description":"This project applies Simulated Annealing to solve the Traveling Salesman Problem using Peru's departments as nodes. Through iterative refinement, it finds the shortest route visiting each department once. Visual feedback enhances understanding and debugging, resulting in an optimal solution displayed with total distance.","archived":false,"fork":false,"pushed_at":"2024-06-24T15:47:41.000Z","size":543,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-12T21:58:37.815Z","etag":null,"topics":["data-visualization","geospatial-analysis","simulated-annealing","simulated-annealing-algorithm","simulated-annealing-edge-detection","traveling-salesman-problem","traveling-salesman-problem-solver"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ShinjiMC.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-24T04:29:57.000Z","updated_at":"2024-06-24T15:47:44.000Z","dependencies_parsed_at":"2024-06-24T17:44:48.986Z","dependency_job_id":"872fdd7a-028d-42ac-8117-282b09a1ffbf","html_url":"https://github.com/ShinjiMC/Simulated_Annealing_TSP","commit_stats":null,"previous_names":["shinjimc/simulated_annealing_tsp"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ShinjiMC%2FSimulated_Annealing_TSP","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ShinjiMC%2FSimulated_Annealing_TSP/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ShinjiMC%2FSimulated_Annealing_TSP/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ShinjiMC%2FSimulated_Annealing_TSP/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ShinjiMC","download_url":"https://codeload.github.com/ShinjiMC/Simulated_Annealing_TSP/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248637784,"owners_count":21137538,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data-visualization","geospatial-analysis","simulated-annealing","simulated-annealing-algorithm","simulated-annealing-edge-detection","traveling-salesman-problem","traveling-salesman-problem-solver"],"created_at":"2024-11-06T03:29:01.560Z","updated_at":"2025-04-12T21:58:41.265Z","avatar_url":"https://github.com/ShinjiMC.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![License: CC BY-NC-SA 4.0](https://img.shields.io/badge/License-CC_BY--NC--SA_4.0-lightgrey.svg)](https://github.com/ShinjiMC/Simulated_Annealing_TSP/blob/main/LICENSE)\n\n# Simulated Annealing Algorithm for TSP by Braulio Maldonado Casilla [ENG]\n\n@ShinjiMC - By Braulio Nayap Maldonado Casilla\n\nThe **Simulated Annealing (SA)** algorithm is a probabilistic technique used for finding an approximate solution to an optimization problem. Inspired by the process of annealing in metallurgy, it involves heating and then slowly cooling a material to vary its physical properties. In the context of optimization, simulated annealing helps to find a minimum or maximum by exploring the solution space in a way that mimics the physical process.\n\n## Application to the Traveling Salesman Problem (TSP)\n\nThe Traveling Salesman Problem (TSP) is a classic algorithmic problem in the field of computer science and operations research. It focuses on optimization. In this problem, the task is to find the shortest possible route that visits a set of nodes exactly once and returns to the origin point.\n\nFor the TSP using the departments of Peru as nodes, the simulated annealing algorithm adjusts routes (permutations of nodes) in search of the route with the smallest total distance.\n\n## Code Explanation\n\nHere's an explanation of the main functions and parts of the provided code, formatted in Markdown for clarity.\n\n### Import Statements\n\n```markdown\nimport geopandas as gpd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport matplotlib.colors as mcolors\nimport random\nimport math\n```\n\nThese lines import necessary libraries for handling geographical data, numerical operations, and plotting.\n\n### Loading Geographical Data\n\n```markdown\ngdf = gpd.read_file('peru_departamental_simple.geojson')\ncentroids = gdf['geometry'].centroid\nnames = gdf['NOMBDEP']\ncoords = [(point.x, point.y) for point in centroids]\n```\n\nThe code loads departmental data for Peru from a GeoJSON file using GeoPandas. It calculates the centroids of each department, which are used as nodes in the TSP.\n\n#### Color Setup\n\n```markdown\ncolor = [(r / 255, g / 255, b / 255) for r, g, b in color]\ngdf['color'] = color[:len(names)]\n```\n\nEach department is assigned a color for visualization purposes.\n\n#### Distance Function\n\n```markdown\ndef distance(idx1, idx2):\nx1, y1 = coords[idx1]\nx2, y2 = coords[idx2]\nreturn np.sqrt((x2 - x1)**2 + (y2 - y1)**2)\n```\n\nCalculates the Euclidean distance between two nodes based on their coordinates.\n\n#### Total Distance Function\n\n```markdown\ndef total_distance(path):\nreturn sum(distance(path[i], path[i+1]) for i in range(len(path) - 1)) + distance(path[-1], path[0])\n```\n\nCalculates the total distance of a route, looping back to the start to complete the circuit.\n\n#### Simulated Annealing Function\n\n```markdown\ndef simulated_annealing(nodes, temp=10000, cooling_rate=0.003): # Initialization and annealing process omitted for brevity\nreturn best_path, best_cost\n```\n\nThis function implements the simulated annealing algorithm. It starts with an initial path and iteratively makes small changes, accepting these new paths based on the difference in cost and the system temperature, which decreases with each iteration.\n\n## Visualization\n\nThe visualization is handled using matplotlib, displaying the current state of the route throughout the annealing process, as well as the final optimal path.\n\n```markdown\nplt.title(f'Optimal Route with Simulated Annealing - Distance: {best_cost:.2f}')\n```\n\nTo run the code, first ensure you have the following dependencies or libraries installed:\n\n- Geopandas\n- Numpy\n- Matplotlib\n\nYou can install these dependencies using pip:\n\n```bash\npip install geopandas numpy matplotlib\n```\n\nOnce the dependencies are installed, you can execute the `main.py` file as follows:\n\n```bash\npython main.py\n```\n\nThis will execute the code and generate the visualization of the simulated annealing process to solve the Traveling Salesman Problem (TSP) using the departments of Peru as nodes.\n\n![Initial State](.Captures/initial.png)\n\nThe final optimal route will be displayed on the graph with the total distance prominently highlighted in the title.\n\nThe plot is titled with the prominently displayed distance of the final optimal route.\n\n![Final State](.Captures/final.png)\n\n## Conclusion\n\nThis code effectively demonstrates the application of the simulated annealing algorithm to solve the TSP for the geographical setup of Peru’s departments. By visualizing the progress and the results, it provides both an educational tool and a practical solution method.\n\n---\n\n# Algoritmo de Recocido Simulado para el Problema del Viajero Comerciante (TSP) por Braulio Maldonado Casilla [ESP]\n\n@ShinjiMC - Por Braulio Nayap Maldonado Casilla\n\nEl algoritmo de **Recocido Simulado (SA)** es una técnica probabilística utilizada para encontrar una solución aproximada a un problema de optimización. Inspirado en el proceso de recocido en metalurgia, implica calentar y luego enfriar lentamente un material para variar sus propiedades físicas. En el contexto de la optimización, el recocido simulado ayuda a encontrar un mínimo o máximo explorando el espacio de soluciones de una manera que imita el proceso físico.\n\n## Aplicación al Problema del Viajero Comerciante (TSP)\n\nEl Problema del Viajero Comerciante (TSP) es un problema algorítmico clásico en el campo de la informática y la investigación de operaciones. Se centra en la optimización. En este problema, la tarea es encontrar la ruta más corta posible que visite un conjunto de nodos exactamente una vez y regrese al punto de origen.\n\nPara el TSP utilizando los departamentos del Perú como nodos, el algoritmo de recocido simulado ajusta las rutas (permutaciones de nodos) en busca de la ruta con la menor distancia total.\n\n## Explicación del Código\n\nAquí hay una explicación de las funciones principales y partes del código proporcionado, formateado en Markdown para mayor claridad.\n\n### Declaraciones de Importación\n\n```markdown\nimport geopandas as gpd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport matplotlib.colors as mcolors\nimport random\nimport math\n```\n\nEstas líneas importan las bibliotecas necesarias para manejar datos geográficos, operaciones numéricas y visualización.\n\n### Carga de Datos Geográficos\n\n```markdown\ngdf = gpd.read_file('peru_departamental_simple.geojson')\ncentroids = gdf['geometry'].centroid\nnames = gdf['NOMBDEP']\ncoords = [(point.x, point.y) for point in centroids]\n```\n\nEl código carga datos departamentales para Perú desde un archivo GeoJSON usando GeoPandas. Calcula los centroides de cada departamento, que se utilizan como nodos en el TSP.\n\n### Configuración de Colores\n\n```markdown\ncolor = [(r / 255, g / 255, b / 255) for r, g, b in color]\ngdf['color'] = color[:len(names)]\n```\n\nA cada departamento se le asigna un color con fines de visualización.\n\n### Función de Distancia\n\n```markdown\ndef distance(idx1, idx2):\nx1, y1 = coords[idx1]\nx2, y2 = coords[idx2]\nreturn np.sqrt((x2 - x1)**2 + (y2 - y1)**2)\n```\n\nCalcula la distancia euclidiana entre dos nodos basada en sus coordenadas.\n\n### Función de Distancia Total\n\n```markdown\ndef total_distance(path):\nreturn sum(distance(path[i], path[i+1]) for i in range(len(path) - 1)) + distance(path[-1], path[0])\n```\n\nCalcula la distancia total de una ruta, volviendo al inicio para completar el circuito.\n\n### Función de Recocido Simulado\n\n```markdown\ndef simulated_annealing(nodes, temp=10000, cooling_rate=0.003): # La inicialización y el proceso de recocido se omiten por brevedad\nreturn best_path, best_cost\n```\n\nEsta función implementa el algoritmo de recocido simulado. Comienza con una ruta inicial e iterativamente realiza pequeños cambios, aceptando estas nuevas rutas basadas en la diferencia de costo y la temperatura del sistema, que disminuye con cada iteración.\n\n## Visualización\n\nLa visualización se maneja utilizando matplotlib, mostrando el estado actual de la ruta a lo largo del proceso de recocido, así como la ruta óptima final.\n\n```markdown\nplt.title(f'Ruta óptima con Recocido Simulado - Distancia: {best_cost:.2f}')\n```\n\nPara ejecutar el código, primero asegúrate de tener instaladas las siguientes dependencias o bibliotecas:\n\n- Geopandas\n- Numpy\n- Matplotlib\n\nPuedes instalar estas dependencias utilizando pip:\n\n```bash\npip install geopandas numpy matplotlib\n```\n\nUna vez instaladas las dependencias, puedes ejecutar el archivo `main.py` de la siguiente manera:\n\n```bash\npython main.py\n```\n\nEsto ejecutará el código y generará la visualización del proceso de recocido simulado para resolver el Problema del Viajero Comerciante (TSP) utilizando los departamentos del Perú como nodos. La ruta óptima final se mostrará en el gráfico con la distancia total destacada en el título.\n\nEl gráfico está titulado con la distancia de la ruta óptima final destacada.\n\n![Estado Final](.Captures/final.png)\n\n## Conclusión\n\nEste código demuestra eficazmente la aplicación del algoritmo de recocido simulado para resolver el TSP para la configuración geográfica de los departamentos del Perú. Al visualizar el progreso y los resultados, proporciona tanto una herramienta educativa como un método de solución práctico.\n\n![Cost Total](.Captures/costo_toal.png)\n\n![Temperature](.Captures/temperature.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshinjimc%2Fsimulated_annealing_tsp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshinjimc%2Fsimulated_annealing_tsp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshinjimc%2Fsimulated_annealing_tsp/lists"}