fillipe-gsm / python-tsp

Library to solve Traveling Salesperson Problems with pure Python code
MIT License
174 stars 28 forks source link

solve_tsp_record_to_record reachers Infinite loop with a simple example #53

Closed yang-tsao closed 4 months ago

yang-tsao commented 8 months ago

When I try to run the following code, it just keeps running and won't give me a result.

from python_tsp.heuristics import solve_tsp_record_to_record
import numpy as np

dis = np.array([[0, 1], [1, 0]])
[order, dist] = solve_tsp_record_to_record(dis)
print(order)
print(dist)
fillipe-gsm commented 7 months ago

Hey, @yang-tsao , thanks for reporting it.

The bug actually happens in the solve_tsp_lin_kernighan solver, which the Record to Record uses as internal solver.

I opened a draft pull request with a test replicating the problem, and I'll leave the fix for @luanleonardo.

Since this is a veeery corner case (a TSP with only two nodes), if he cannot take it I'll just put an early return.

luanleonardo commented 7 months ago

@yang-tsao @fillipe-gsm, the Lin-Kernighan heuristic assumes the existence of at least 4 nodes (named a, b, c, d) that play important roles in defining the neighborhood of a solution. If the problem is small, with less than 4 nodes, the heuristic does not apply.

fillipe-gsm commented 4 months ago

Sorry for the long delay, but the issue should be fixed now in version 0.4.2.

Thanks for reporting it.