diff options
author | Guillaume Seguin <guillaume@segu.in> | 2007-12-17 03:05:44 +0100 |
---|---|---|
committer | Guillaume Seguin <guillaume@segu.in> | 2007-12-17 03:05:44 +0100 |
commit | f92251f0d3081b5ebf0c9e9497f236f5b1857e62 (patch) | |
tree | 6aa581bfee99dbcba1388b0bab0fe117f9a634f3 | |
parent | 89dc12dfefc692f0108abef4a13d0be4aab8bc8d (diff) | |
download | tsp-f92251f0d3081b5ebf0c9e9497f236f5b1857e62.tar.gz tsp-f92251f0d3081b5ebf0c9e9497f236f5b1857e62.tar.bz2 |
* Improve 2opt algorithm (don't enforce i to be lower than j)
-rwxr-xr-x | tsp.py | 13 |
1 files changed, 9 insertions, 4 deletions
@@ -219,10 +219,15 @@ class Algo_2opt (Algo): best = path def do_2opt (self, path): - i, j = sorted (random.sample (path, 2)) - segment = path[i + 1:j] - segment.reverse () - return Path (self.context, path[0:i + 1] + segment + path[j:]) + i, j = random.sample (path, 2) + if i < j: + segment = path[i + 1:j] + segment.reverse () + return Path (self.context, path[:i + 1] + segment + path[j:]) + else: + segment = path[i + 1:] + path[:j] + segment.reverse () + return Path (self.context, path[j:i + 1] + segment) class AlgoThread (threading.Thread): |