Giving a set of points and the distance each pair of points, found the roite which go through the points minimizing the distance traveled.
More information about the TSP, the used algorithm belongs to the family of the genetic algorithms.
These do not ensure to find the optimal solution, but they find suboptimal solutions in a reasonable time.
1 geo.tspSolver
<geo.tspSolver
lat_col='lat_col'
lng_col='lng_col'
id_col='id_col'
origin_city_code='origin_city_code'
end_city_code='end_city_code'
is_closed='is_closed'
population='population'
generations='generations'
mutation_rate='mutation_rate'
>
<v_cities /> +
<v_distances /> +
</geo.tspSolver>
Attributes | |||||
---|---|---|---|---|---|
Name | Type | Required | Default | Description | |
Alat_col | integer | Index of the column which contains the latitude in the ResultSet. | |||
Alng_col | integer | Index of the column which contains the length in the ResultSet. | |||
Aid_col | integer | Index of the column which contains the identifier of the row in the ResultSet. | |||
Aorigin_city_code | string | Identifier of the TSP starting point. | |||
Aend_city_code | string | Identifier of the TSP ending point. | |||
Ais_closed | boolean | Allows to indicate which the travel must be closed. The route will be optimized aking into account that after visiting the final point, you must return to the starting point. | |||
Apopulation | integer | Parameter used in the genetic algorithm. | |||
Agenerations | integer | Parameter used in the genetic algorithm. | |||
Amutation_rate | decimal | Parameter used in the genetic algorithm. |
Arguments | |||||
---|---|---|---|---|---|
Name | Type | Required | Unique | Nullable | Description |
Ev_cities | vtable | Vtable of the points for which the TSP has to pass. It is required a column with the latitude (or coordinate x=, other with the lenght (or coordinate y) and a column with the id of the point. By using the attributes lat_col, lng:col, id_col the index of this columns is indicated in the resultSet. | |||
Ev_distances | vtable | Vtable NxN with the array of distances between the points of the problem. |
Returns | |
---|---|
Type | Description |
Vtable | Returns Vtable with the columns "lat", "lng", "name". The order of the points is the solution found using the genetic algorithm. |
Example
Define a StringBuffer with a string.
Copy
<xsql-script name='stringbuffer_sample'> <body> <println><v_cities /></println> +-------+-------+---------------+ |gps_lat|gps_lon|assign_customer| |decimal|decimal|char | +-------+-------+---------------+ |41,3712| 2,1114|10018 | |41,3816| 2,1625|10006 | |41,3819| 2,1578|10007 | |41,3835| 2,1475|10004 | |41,3895| 2,1499|10003 | |41,3946| 2,1545|10009 | |41,3946| 2,1525|10002 | |41,3963| 2,1578|10011 | |41,4045| 2,1571|10010 | |41,4182| 2,1811|10012 | |41,3941| 2,1923|T1000 | +-------+-------+---------------+ <println><v_distances /></println> +--------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+ |codcli_1|pivot11 |pivot1 |pivot2 |pivot3 |pivot4 |pivot5 |pivot6 |pivot7 |pivot8 |pivot9 |pivot10 | |char |decimal |decimal |decimal |decimal |decimal |decimal |decimal |decimal |decimal |decimal |decimal | |<null> |10002 |10003 |10004 |10006 |10007 |10009 |10010 |10011 |10012 |10018 |T1000 | | |route_dist|route_dist|route_dist|route_dist|route_dist|route_dist|route_dist|route_dist|route_dist|route_dist|route_dist| +--------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+ |10002 | | 1110,00| 2031,00| 2457,00| 2463,00| 965,00| 2143,00| 776,00| 4651,00| 6573,00| 1240,00| |10003 | 984,00| | 1388,00| 2423,00| 1904,00| 931,00| 2796,00| 2272,00| 6147,00| 5938,00| 1693,00| |10004 | 2234,00| 1575,00| | 1765,00| 1234,00| 1964,00| 4362,00| 2995,00| 6870,00| 4689,00| 1506,00| |10006 | 1974,00| 1653,00| 2031,00| | 1358,00| 1921,00| 3848,00| 2537,00| 5945,00| 5664,00| 1349,00| |10007 | 2063,00| 1629,00| 1466,00| 1074,00| | 2011,00| 3824,00| 2513,00| 5921,00| 5375,00| 1877,00| |10009 | 851,00| 944,00| 1865,00| 2291,00| 2297,00| | 2329,00| 1018,00| 4328,00| 6407,00| 1074,00| |10010 | 2346,00| 2805,00| 3247,00| 3677,00| 3684,00| 2666,00| | 1342,00| 3908,00| 7565,00| 2461,00| |10011 | 1004,00| 1463,00| 2708,00| 2815,00| 2692,00| 1324,00| 1756,00| | 4492,00| 6223,00| 1470,00| |10012 | 5047,00| 5506,00| 6751,00| 5941,00| 5947,00| 5367,00| 3269,00| 3532,00| | 10265,00| 4724,00| |10018 | 6134,00| 4513,00| 4091,00| 5373,00| 4843,00| 4902,00| 7822,00| 6895,00| 9960,00| | 6720,00| |T1000 | 1108,00| 1205,00| 1583,00| 1209,00| 1216,00| 1055,00| 2850,00| 1539,00| 4845,00| 6037,00| | +--------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+ <!-- SOLVE THE PROBLEM --> <vtable name='v_tsp_result'> <in> <geo.tspSolver lat_col="1" lng_col="2" id_col="3" population="5000" generations="1000" mutation_rate="0.025" origin_city_code="T1000"> <cities /> <pivoted /> </geo.tspSolver> </in> </vtable> <println><v_tsp_result /></pritnnln> +-------+------+-----+ |lat |lng |name | |double |double|char | +-------+------+-----+ |41,3941|2,1923|T1000| |41,3819|2,1578|10007| |41,3816|2,1625|10006| |41,3946|2,1545|10009| |41,4182|2,1811|10012| |41,4045|2,1571|10010| |41,3963|2,1578|10011| |41,3946|2,1525|10002| |41,3895|2,1499|10003| |41,3835|2,1475|10004| |41,3712|2,1114|10018| +-------+------+-----+ </body> </xsql-script>