Op vrijdag 16 november 2001 13:15 schreef _JGC_ het volgende:
lijkt me wel wat voor recursief backtracken, je computer heeft zomaar een oplossing gevonden (mits je genoeg RAM hebt

), en rekent gewoon alle oplossingen door tot je hem stilzet. Heeft ie een betere? dan slaat ie die op en gaat ie verder. Niet zo moeilijk lijkt het op zich, maar onderschat het niet
Op school hebben we eens een roosterprogramma gemaakt wat dit deed met docenten, lokalen, beschikbaarheid van beiden, vakken en leerlingen. Kwam altijd wel een redelijk rooster uit, maar de eerste versies vraten óf een heleboel geheugen, óf een heleboel I/O door de SQL database die eraan hing.
Een standaard branch-and-bound (backtracken met een bound) heeft helemaal niet zoveel geheugen nodig, omdat de recursie diepte nooit hoger is dan het aantal punten waar je een route door zoekt. Natuurlijk wordt dat geheugengebruik veel hoger als je allerlei zaken over reeds bekeken routes gaat bijhouden om je algoritme sneller te maken, maar dat heeft dus niet zoveel te maken met de recursie op zich.
Ik heb het een beetje druk gehad, en heb dit probleem een beetje op een laag pitje gezet. Ik was van plan om voor dit probleem een Lin-Kernighan algoritme te implementeren, maar dat was me iets te veel moeite om het goed te krijgen. Het resultaat met lengte 305,xx voor 50 steden lijkt me vrij optimaal, maar misschien implementeer ik voor de fun nog een keer een 2-opt of 3-opt algoritme om te kijken wat die vinden. In de praktijk zou een 2 of 3-opt algoritme in een aantal runs wel het optimale resultaat moeten kunnen vinden voor 50 steden.
Voor alle brute-forcers die voor exacte resultaten gaan, ik vond dit in "Local search in Combinatorial Optimization" van Aarts, Lenstra et al.:
Over the past 15 years, the record for the largest nontrivial TSP instance solved to optimality has increased from 318 cities [Crowder & Padberg, 1980] to 2392 cities [Padberg & Rinaldi, 1987] to 7397 cities [Applegate et al., 1995]. Admittedly, this last result took 3-4 years of CPU time on a network of machines of the caliber of a SPARCstation 2. (SPARC is a trademark of SPARC International, Inc. and is licensed exclusively to Sun Microsystems, Inc.). However, the branch-and-cut technology developed for these recordsetting performances has also had a major impact on the low end of the scale. Problems with 100 or fewer cities are now routinely soved within a few minutes on a workstation (although there are isolated instances in this range that take much longer) and instances in the 1000-city range typically take only a few hours (or days); see Padberg & Rinaldi [1991], Grötschel & Holland [1991], and Applegate et al. [1995].
Er is dus nog wat ruimte voor verbetering in jullie code