hp41programs

Traveling Salesman Pb

Traveling Salesman Problem for the HP-41


Overview
 

 1°) 2-Dimensional Problem
 2°) 3-Dimensional Problem
 3°) Spherical Problem
 

-These programs employ the "nearest neighbor algorithm".
-It's not the best algorithm to solve this problem, but it may perhaps be useful.
 

1°) 2-Dimensional Problem
 
 
 
 

Data Registers:           •  R00 = n = Nb of points              ( Registers R00 thru R2n are to be initialized before executing "TSP" )

                                      •  R01 = x1     •  R03 = x2     ......................................    •  R2n-1 = xn
                                      •  R02 = y1     •  R04 = y2     ......................................    •  R2n = yn

Flags: /
Subroutines: /
 
 
 
 

 01 LBL "TSP"
 02 RCL 00
 03 2
 04 -
 05 ST+ X
 06  E3
 07 /
 08 ISG X
 09 STO M
 10 LBL 01
 11 RCL M
 12 2.004
 13 +
 14 STO N
 15  E99
 16 STO O
 17 LBL 02
 18 RCL IND M
 19 RCL IND N
 20 -
 21 X^2
 22 ISG M
 23 ISG N
 24 RCL IND M
 25 RCL IND N
 26 -
 27 X^2
 28 +
 29 RCL O
 30 X<=Y?
 31 GTO 03
 32 X<>Y
 33 STO O
 34 RCL N
 35 RCL M
 36 2
 37 +
 38 RCL IND X
 39 X<> IND Z
 40 STO IND Y
 41 CLX
 42 SIGN
 43 ST- Z
 44 -
 45 RCL IND X
 46 X<> IND Z
 47 STO IND Y
 48 CLX
 49 LBL 03
 50 SIGN
 51 ST- M
 52 ISG N
 53 GTO 02
 54 ST+ M
 55 ISG M
 56 GTO 01
 57 RCL 00
 58 ST+ X
 59 STO M
 60 STO N
 61 RCL IND X
 62 RCL 02
 63 -
 64 X^2
 65 DSE N
 66 RCL IND N
 67 RCL 01
 68 -
 69 X^2
 70 +
 71 SQRT
 72 DSE N
 73 LBL 04
 74 RCL IND M
 75 RCL IND N
 76 -
 77 X^2
 78 DSE M
 79 DSE N
 80 RCL IND M
 81 RCL IND N
 82 -
 83 X^2
 84 +
 85 SQRT
 86 +
 87 DSE M
 88 DSE N
 89 GTO 04
 90 RCL 00
 91 ST+ X
 92  E3
 93 /
 94 ISG X
 95 X<>Y
 96 CLA
 97 END

 
    ( 161 bytes / SIZE 2n+1 )
 
 

      STACK        INPUTS      OUTPUTS
           Y             /          1.2n
           X             /        Length

 
Example:   The coordinates of 8 points are:

    x |  1  2  6  7  9  8  3  4                                                      R01  R03  R05  R07  R09  R11  R13  R15
    y |  1  7  9  6  4  2  5  8       Store these 16 numbers into     R02  R04  R06  R08  R10  R12  R14  R16    respectively

   Nb of points = 8  STO 00

   XEQ "TSP"   >>>>    L = 26.47818047                                     ---Execution time = 34s---
                        X<>Y   1.016

-The points have been permuted and we find in R01 thru R24:

    x |  1  3  2  4  6  7  9  8
    y |  1  5  7  8  9  6  4  2

-So, the suggested solution is  1-7-2-8-3-4-5-6

Note:

-If there are 23 points, the execution time is about 4m00s
 

2°) 3-Dimensional Problem
 
 

Data Registers:           •  R00 = n = Nb of points              ( Registers R00 thru R3n are to be initialized before executing "TSP3" )

                                      •  R01 = x1     •  R04 = x2     ......................................    •  R3n-2 = xn
                                      •  R02 = y1     •  R05 = y2     ......................................    •  R3n-1 = yn
                                      •  R03 = z1     •  R06 = z2     ......................................    •  R3n = zn
Flags: /
Subroutines: /
 
 

 01 LBL "TSP3"
 02 RCL 00
 03 2
 04 -
 05 3
 06 *
 07  E3
 08 /
 09 ISG X
 10 STO M
 11 LBL 01
 12 RCL M
 13 3.006
 14 +
 15 STO N
 16  E99
 17 STO O
 18 LBL 02
 19 RCL IND M
 20 RCL IND N
 21 -
 22 X^2
 23 ISG M
 24 ISG N
 25 RCL IND M
 26 RCL IND N
 27 -
 28 X^2
 29 +
 30 ISG M
 31 ISG N
 32 RCL IND M
 33 RCL IND N
 34 -
 35 X^2
 36 +
 37 RCL O
 38 X<=Y?
 39 GTO 03
 40 X<>Y
 41 STO O
 42 RCL N
 43 RCL M
 44 3
 45 +
 46 RCL IND X
 47 X<> IND Z
 48 STO IND Y
 49 CLX
 50 SIGN
 51 ST- Z
 52 -
 53 RCL IND X
 54 X<> IND Z
 55 STO IND Y
 56 CLX
 57 SIGN
 58 ST- Z
 59 -
 60 RCL IND X
 61 X<> IND Z
 62 STO IND Y
 63 LBL 03
 64 2
 65 ST- M
 66 ISG N
 67 GTO 02
 68 ST+ M
 69 ISG M
 70 GTO 01
 71 RCL 00
 72 3
 73 *
 74 STO M
 75 STO N
 76 RCL IND X
 77 RCL 03
 78 -
 79 X^2
 80 DSE N
 81 RCL IND N
 82 RCL 02
 83 -
 84 X^2
 85 +
 86 DSE N
 87 RCL IND N
 88 RCL 01
 89 -
 90 X^2
 91 +
 92 SQRT
 93 DSE N
 94 LBL 04
 95 RCL IND M
 96 RCL IND N
 97 -
 98 X^2
 99 DSE M
100 DSE N
101 RCL IND M
102 RCL IND N
103 -
104 X^2
105 +
106 DSE M
107 DSE N
108 RCL IND M
109 RCL IND N
110 -
111 X^2
112 +
113 SQRT
114 +
115 DSE M
116 DSE N
117 GTO 04
118 RCL 00
119 3
120 *
121  E3
122 /
123 ISG X
124 X<>Y
125 CLA
126 END

 
    ( 202 bytes / SIZE 3n+1 )
 
 

      STACK        INPUTS      OUTPUTS
           Y             /          1.3n
           X             /        Length

 
Example:     The coordinates of 8 points are:

    x |  1  2  10  7  9  8  3  4                                                      R01  R04  R07  R10  R13  R16  R19  R22
    y |  1  7   1   6  4  2  5  5       Store these 24 numbers into     R02  R05  R08  R11  R14  R17  R20  R23    respectively
    z |  1  5   4   8  7  1  2  6                                                       R03  R06  R09  R12  R15  R18  R21  R24

   Nb of points = 8  STO 00

   XEQ "TSP3"   >>>>    L = 33.23751462                                      ---Execution time = 50s---
                          X<>Y   1.024

-The points have been permuted and we find in R01 thru R24:

    x |  1  3  2  4  7  9  10  8
    y |  1  5  7  5  6  4   1   2
    z |  1  2  5  6  8  7   4   1

-So, the suggested solution is  1-7-2-8-4-5-3-6

Note:

-If there are 17 points, the execution time is about 3m25s
 

3°) Spherical Problem
 
 

Data Registers:           •  R00 = n = Nb of points              ( Registers R00 thru R2n are to be initialized before executing "TSPS" )

                                      •  R01 = L1     •  R03 = L2     ......................................    •  R2n-1 = Ln         L & b expressed in ° ' ''
                                      •  R02 = b1     •  R04 = b2     ......................................    •  R2n = bn

Flags: /
Subroutines: /
 
 

 01 LBL "TSPS"
 02 DEG
 03 RCL 00
 04 2
 05 -
 06 ST+ X
 07  E3
 08 /
 09 ISG X
 10 STO M
 11 LBL 01
 12 RCL M
 13 2.004
 14 +
 15 STO N
 16 SIGN
 17 STO O
 18 LBL 02
 19 RCL IND M
 20 RCL IND N
 21 ISG M
 22 ISG N
 23 RCL IND M
 24 X<>Y
 25 RCL IND N
 26 XEQ 04
 27 RCL O
 28 X<=Y?
 29 GTO 03
 30 X<>Y
 31 STO O
 32 RCL N
 33 RCL M
 34 2
 35 +
 36 RCL IND X
 37 X<> IND Z
 38 STO IND Y
 39 CLX
 40 SIGN
 41 ST- Z
 42 -
 43 RCL IND X
 44 X<> IND Z
 45 STO IND Y
 46 CLX
 47 LBL 03
 48 SIGN
 49 ST- M
 50 ISG N
 51 GTO 02
 52 ST+ M
 53 ISG M
 54 GTO 01
 55 GTO 05
 56 LBL 04
 57 HR
 58 X<> T
 59 HMS-
 60 HR
 61 2
 62 /
 63 SIN
 64 X^2
 65 RDN 
 66 HR
 67 +
 68 2
 69 /
 70 ST- Y
 71 COS
 72 X^2
 73 ST* T         
 74 RDN
 75 SIN
 76 X^2
 77 ST* Y
 78 -
 79 -
 80 RTN
 81 LBL 05
 82 RCL 00
 83 ST+ X
 84 STO M
 85 STO N
 86 DSE N
 87 RCL IND N
 88 RCL IND Y
 89 RCL 01
 90 RCL 02
 91 XEQ 04
 92 SQRT
 93 ASIN
 94 STO O
 95 DSE N
 96 LBL 06
 97 RCL IND M
 98 RCL IND N
 99 DSE M
100 DSE N
101 RCL IND M
102 RCL IND N
103 X<> T
104 XEQ 04
105 SQRT
106 ASIN
107 ST+ O
108 DSE M
109 DSE N
110 GTO 06
111 RCL 00
112 ST+ X
113  E3
114 /
115 ISG X
116 RCL O
117 ST+ X
118 D-R
119 6371
120 *
121 CLA
122 END

 
    ( 204 bytes / SIZE 2n+1 )
 
 

      STACK        INPUTS      OUTPUTS
           Y             /          1.2n
           X             /         Length

 
Example:    The coordinates of 16 "points" are:

    Paris   Bombay Canberra Glasgow Johannesburg CapeTown Madrid Moskow Ottawa  Oslo  MountPalomar  Pulkovo  Rio  Sydney  Washington  Zikawei

  L   2°20'    72°49'   149°00   -4°17'    28°01'    18°29'    -3°41'    37°33'    -75°43'   10°43'    -116°52'   30°20'    -43°13'   151°12'   -77°04'   121°11'
  b  48°50'   18°53'   -35°19    55°52'  -26°11'   -33°56'   40°24'    55°42'     45°24'   59°54'      33°21'     53°46'    -22°53'   -33°52'    38°55'     31°11'
 

-Store these 32 numbers into  R01  to  R32

   16  STO 00

   XEQ "TSPS"  >>>>   L = 71589 km                                      ---Execution time = 7m52s---
                         X<>Y   1.032

-The coordinates of these 16 points have been modified in R01 thru R32 which suggests the following journey:

  Paris-Glasgow-Oslo-Pulkovo-Moskow-Madrid-Ottawa-Washington-MountPalomar-Rio-CapeTown-Johannesburg-Bombay-Zikawei-Sydney-Canberra
 

Notes:

-The length is calculated for the Earth, assuming the mean radius = 6371 km ( line 119 )
-In fact, it's not the shortest path: if you swap the first 2 towns, you get L = 65181 km

-So you can try to execute "TSPS" again after changing the order of the points.
-Of course V41 will give you the results much more quickly.