GeneticAlgorithms.Part3

Created: 2011-07-15 03:12
Updated: 2019-02-09 21:19
License: mit
c#

README.md

Travelling Salesperson Problem - Genetic Algorithms 3

This is the C# source code for part 3 of my series on genetic algorithms.

In this part we extend the genetic solver from part 2 to be able to solve the Travelling Salesperson Problem which belongs to a more generic class of real-world problems related to route or sequence optimization.

We start with a series of points laid out in a circle

......................*.................
........................................
..................b...a.................
..............c.........................
........................................
..........d...................z.........
........................................
.......e.........................y......
........................................
........................................
........................................
....f...............................x...
........................................
........................................
........................................
..g...................................w.
........................................
........................................
........................................
..h...................................v.
........................................
........................................
........................................
..i...................................u.
........................................
........................................
........................................
...j.................................t..
........................................
........................................
........................................
.....k.............................s....
........................................
........................................
........l.......................r.......
........................................
............m...............q...........
........................................
................n.......p...............
....................o...................

* => home base

and update the solver to support this kind of problem.

Sample output:

Expect optimal route abcdefghijklmnopqrstuvwxyz* to have fitness 122
generation     1 fitness  5752 *nzficw*vxjtlrkozbrhpgfyuep  elapsed: 00:00:00.0557000 by Random
generation     4 fitness  4680 *kjdaizfvftwcngkrohsuybeumo  elapsed: 00:00:00.0745969 by Crossover
generation     8 fitness  4654 *orkgncwtfvfziadjkhomuebyus  elapsed: 00:00:00.0833367 by Swap
generation    10 fitness  4647 *adcxwkuqgpkumkheflyscoribn  elapsed: 00:00:00.0870942 by Crossover
generation    10 fitness  4583 *orkgncwtfifzvadjkhomuebyus  elapsed: 00:00:00.0873425 by Swap
generation    12 fitness  4578 *orkgxcwtfifzvadjkhomuebyus  elapsed: 00:00:00.0919437 by Mutation
generation    13 fitness  4546 *adcxwvuqggpirocslyfehkmukn  elapsed: 00:00:00.0932691 by Mutation
generation    14 fitness  3738 *ieuyrgphrbnokrltjxfswcvpqz  elapsed: 00:00:00.0943789 by Mutation
generation    15 fitness  3680 *kjdaizfvftwcngkrohsxybeumo  elapsed: 00:00:00.0980285 by Mutation
generation    16 fitness  3638 *elmohtjdkizfvftwcagnrobsuy  elapsed: 00:00:00.0994994 by Mutation
generation    18 fitness  3620 *feuyrgjhrbnoxrltpkimwcvwqz  elapsed: 00:00:00.1022795 by Mutation
generation    19 fitness  3606 *ieuykgptrbnokrlhjxfcwsvpqz  elapsed: 00:00:00.1044059 by Swap
generation    19 fitness  3588 *elmohijdktzfvftwcagnrobsuy  elapsed: 00:00:00.1053475 by Swap
generation    21 fitness  3538 *adcxwkvqgpkumkheflysnoribc  elapsed: 00:00:00.1086238 by Mutation
generation    22 fitness  2661 *emlohtjvfzskdftwcagnrqbiuy  elapsed: 00:00:00.1102894 by Mutation
generation    22 fitness  2611 *ieuydgptrbnokxlhjrfcwsvpqz  elapsed: 00:00:00.1107309 by Mutation
generation    23 fitness  2610 *ieuydgptrbnokwlhjrfcxsvpqz  elapsed: 00:00:00.1129340 by Swap
generation    24 fitness  2569 *ieuydgptrbnokwvsxcfrjhlpqz  elapsed: 00:00:00.1138274 by Reverse
generation    26 fitness  2545 *amlohtjifzskdftwcegnrqbvuy  elapsed: 00:00:00.1177485 by Swap
generation    30 fitness  2533 *amlhotjifzskdftwcegnrqbvuy  elapsed: 00:00:00.1252988 by Swap
generation    31 fitness  2514 *ieuydgptvbnorxlhjkfcwsrpqz  elapsed: 00:00:00.1265510 by Swap
generation    31 fitness  1640 *dqpvpxcfrlhjwkonbmstgzyuei  elapsed: 00:00:00.1279769 by Mutation
generation    36 fitness  1635 *cqpvpxdfrlhjwkonbmstgzyuei  elapsed: 00:00:00.1349471 by Swap
generation    36 fitness  1537 *amlthojifcwxfdkszegnrqbvuy  elapsed: 00:00:00.1354383 by Mutation
generation    38 fitness  1521 *agnrqzvuoljdcbhtfisymkefxw  elapsed: 00:00:00.1383850 by Mutation
generation    41 fitness  1518 *ablthojifcwxfdkszegnrqmvuy  elapsed: 00:00:00.1439563 by Swap
generation    42 fitness  1510 *agnrqxvuoljdcbhtfisymkefzw  elapsed: 00:00:00.1451785 by Swap
generation    42 fitness  1498 *kmlontjisbcwtpdgfaehrqzvuy  elapsed: 00:00:00.1463426 by Mutation
generation    43 fitness  1435 *atsefghbcdjlouvzqrnymkifxw  elapsed: 00:00:00.1472218 by Swap
generation    46 fitness  1434 *atsefghbcdjlorqzvunymkifxw  elapsed: 00:00:00.1520952 by Reverse
generation    51 fitness  1426 *atsefghbcdjlouvzqrnymkixxw  elapsed: 00:00:00.1609032 by Mutation
generation    51 fitness  1423 *avsefghifkmynutzqroljdcbxw  elapsed: 00:00:00.1614609 by Reverse
generation    52 fitness  1414 *avsefghbcdjlorqwtunymkifxz  elapsed: 00:00:00.1622193 by Swap
generation    54 fitness  1389 *avseffyzutnqroljdcbhgkmixw  elapsed: 00:00:00.1668875 by Swap
generation    55 fitness  1388 *atsefghbcdfikmynjlorqzvuxw  elapsed: 00:00:00.1686067 by Reverse
generation    56 fitness  1377 *atsefghbcdfikmjnuvzqrolyxw  elapsed: 00:00:00.1699975 by Swap
generation    61 fitness  1338 *atsefghbcdfikmqnjloryzvuxw  elapsed: 00:00:00.1788435 by Swap
generation    63 fitness   434 *agfeydcbhmjlouvzqrnstkipxw  elapsed: 00:00:00.1817006 by Mutation
generation    68 fitness   402 *atswxpmkiynuvzqroljdcbhgfe  elapsed: 00:00:00.1905062 by Mutation
generation    70 fitness   356 *atswxpmkiyzuvnqroljdcbhgfe  elapsed: 00:00:00.1941582 by Swap
generation    85 fitness   348 *atswxpmnorqlvuzyikjdcbhgfe  elapsed: 00:00:00.2164192 by Reverse
generation    89 fitness   334 *atswxpmkiyzuvrqnoljdcbhgfe  elapsed: 00:00:00.2232943 by Reverse
generation    93 fitness   328 *azikmnvuytswxpqroljdcbhgfe  elapsed: 00:00:00.2302641 by Reverse
generation    94 fitness   323 *atswxpmnorqlvuzydbcijkhgfe  elapsed: 00:00:00.2321492 by Reverse
generation   105 fitness   314 *atswxpqronmlvuzyjkidefghbc  elapsed: 00:00:00.2489732 by Reverse
generation   110 fitness   299 *adefghikmpxwsqroljncbztuvy  elapsed: 00:00:00.2582542 by Reverse
generation   111 fitness   295 *atslmnorqpxwvuzyjkidefghbc  elapsed: 00:00:00.2603764 by Reverse
generation   116 fitness   287 *adefghikjpxwsqrolmncbztuvy  elapsed: 00:00:00.2692063 by Swap
generation   125 fitness   285 *adefghikjzxwsqronmlcbptuvy  elapsed: 00:00:00.2832807 by Reverse
generation   126 fitness   282 *atslmnorqpxuvwzyjkihfgebcd  elapsed: 00:00:00.2851542 by Reverse
generation   131 fitness   279 *axslmnorqptuvwzyjkidefghbc  elapsed: 00:00:00.2935830 by Swap
generation   132 fitness   275 *atslmnorqpwuvxzyjkihfgebcd  elapsed: 00:00:00.2954973 by Swap
generation   134 fitness   271 *abegfhikjyzwvuxrqponmlstcd  elapsed: 00:00:00.2984190 by Swap
generation   135 fitness   264 *azyxpqronmlstwvujkidefghbc  elapsed: 00:00:00.3007587 by Reverse
generation   136 fitness   260 *azyxvwtslmnorqpujkidefghbc  elapsed: 00:00:00.3018316 by Reverse
generation   139 fitness   256 *azwuvxpqronmlstyjkihgfedbc  elapsed: 00:00:00.3074837 by Reverse
generation   141 fitness   231 *azyxpqronmlstwvujkihgfedbc  elapsed: 00:00:00.3112030 by Swap
generation   147 fitness   217 *azyxpqruvwtslmnojkihgfedbc  elapsed: 00:00:00.3200379 by Reverse
generation   152 fitness   216 *azyxpqruvwtsjmnolkihgfedcb  elapsed: 00:00:00.3273526 by Swap
generation   163 fitness   203 *azyxpqruvwtsomnljkihgfedbc  elapsed: 00:00:00.3447502 by Swap
generation   182 fitness   202 *azyxsuvwtrqplmnoikjhgefdcb  elapsed: 00:00:00.3753730 by Reverse
generation   186 fitness   195 *azyxpqruvwtsomnlkjihgfedbc  elapsed: 00:00:00.3815321 by Swap
generation   189 fitness   187 *azyxstwvurqpomnljkihgfebdc  elapsed: 00:00:00.3875450 by Reverse
generation   197 fitness   179 *azyxstwvurqpomnljkihgfedbc  elapsed: 00:00:00.3995630 by Swap
generation   221 fitness   176 *azxywuvtrspqomnljkihgfedcb  elapsed: 00:00:00.4383912 by Swap
generation   225 fitness   168 *azxywuvtrsqpomnljkihgfedcb  elapsed: 00:00:00.4460578 by Swap
generation   240 fitness   164 *azyxwvtsurqpomnljkihgfedbc  elapsed: 00:00:00.4679619 by Reverse
generation   255 fitness   163 *azyxwuvtsrqpolnmkijhgefdcb  elapsed: 00:00:00.4913439 by Reverse
generation   264 fitness   157 *azyxwuvtsrqpomnlkjihfgedbc  elapsed: 00:00:00.5052970 by Reverse
generation   269 fitness   156 *azyxwvustqrpomnljkihgfedcb  elapsed: 00:00:00.5135945 by Crossover
generation   272 fitness   154 *azyxwuvtsrqpomnlkijhgefdcb  elapsed: 00:00:00.5190518 by Swap
generation   296 fitness   145 *azyxwtvusrqopnmlkjihgfedcb  elapsed: 00:00:00.5544857 by Swap
generation   335 fitness   139 *abcdefghikjlnmopqrstuvwxyz  elapsed: 00:00:00.6132106 by Swap
generation   344 fitness   138 *azyxwvutsrqponmljkihgfedbc  elapsed: 00:00:00.6259218 by Reverse
generation   349 fitness   130 *azyxwvutsrqponmljkihgfedcb  elapsed: 00:00:00.6340854 by Reverse
generation   387 fitness   121 *azyxwvutsrqponmlkjihgfedcb  elapsed: 00:00:00.6923056 by Reverse

This shows that the solver determined the optimal route from home base, around the circle, and back to home base to be:

(home) -> azyxwvutsrqponmlkjihgfedcb -> (home)	

After that we take on problem eil51 from the TSPLIB, a standard set of Travelling Salesperson Problems used in benchmarking solvers.

License

MIT License

Cookies help us deliver our services. By using our services, you agree to our use of cookies Learn more