allocator 0.1.7__tar.gz → 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- allocator-1.0.0/PKG-INFO +132 -0
- allocator-1.0.0/README.md +57 -0
- allocator-1.0.0/allocator/__init__.py +154 -0
- allocator-1.0.0/allocator/api/__init__.py +32 -0
- allocator-1.0.0/allocator/api/cluster.py +126 -0
- allocator-1.0.0/allocator/api/distance.py +225 -0
- allocator-1.0.0/allocator/api/route.py +256 -0
- allocator-1.0.0/allocator/api/types.py +52 -0
- allocator-1.0.0/allocator/cli/__init__.py +1 -0
- allocator-1.0.0/allocator/cli/cluster_cmd.py +104 -0
- allocator-1.0.0/allocator/cli/main.py +170 -0
- allocator-1.0.0/allocator/cli/route_cmd.py +164 -0
- allocator-1.0.0/allocator/core/__init__.py +1 -0
- allocator-1.0.0/allocator/core/algorithms.py +200 -0
- allocator-1.0.0/allocator/core/routing.py +242 -0
- allocator-1.0.0/allocator/distances/__init__.py +17 -0
- allocator-1.0.0/allocator/distances/euclidean.py +80 -0
- allocator-1.0.0/allocator/distances/external_apis.py +165 -0
- allocator-1.0.0/allocator/distances/factory.py +66 -0
- allocator-1.0.0/allocator/distances/haversine.py +43 -0
- allocator-1.0.0/allocator/io/__init__.py +1 -0
- allocator-1.0.0/allocator/io/data_handler.py +174 -0
- allocator-1.0.0/allocator/py.typed +2 -0
- allocator-1.0.0/allocator/utils.py +37 -0
- allocator-1.0.0/allocator/viz/__init__.py +17 -0
- allocator-1.0.0/allocator/viz/plotting.py +206 -0
- allocator-1.0.0/pyproject.toml +222 -0
- allocator-0.1.7/LICENSE +0 -21
- allocator-0.1.7/MANIFEST.in +0 -2
- allocator-0.1.7/PKG-INFO +0 -134
- allocator-0.1.7/README.rst +0 -115
- allocator-0.1.7/allocator/__init__.py +0 -1
- allocator-0.1.7/allocator/cluster_kahip.py +0 -226
- allocator-0.1.7/allocator/cluster_kmeans.py +0 -164
- allocator-0.1.7/allocator/compare_kahip_kmeans.py +0 -136
- allocator-0.1.7/allocator/distance_matrix.py +0 -306
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-1.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-10.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-11.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-12.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-13.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-14.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-15.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-16.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-17.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-18.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-19.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-2.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-20.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-21.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-22.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-23.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-24.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-25.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-26.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-27.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-28.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-29.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-3.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-30.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-31.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-32.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-33.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-34.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-35.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-36.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-37.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-38.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-39.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-4.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-40.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-41.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-42.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-43.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-44.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-45.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-46.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-47.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-48.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-49.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-5.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-50.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-6.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-7.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-8.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/chonburi/chonburi-gm-9.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-1.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-10.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-11.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-12.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-13.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-14.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-15.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-16.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-17.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-18.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-19.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-2.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-20.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-21.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-22.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-23.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-24.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-25.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-26.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-27.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-28.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-29.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-3.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-30.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-31.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-32.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-33.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-34.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-35.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-36.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-37.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-38.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-39.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-4.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-40.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-41.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-42.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-43.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-44.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-45.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-46.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-47.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-48.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-49.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-5.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-50.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-6.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-7.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-8.png +0 -0
- allocator-0.1.7/allocator/examples/GM-buffoon/delhi/delhi-9.png +0 -0
- allocator-0.1.7/allocator/examples/KaHIP/KaFFPaE-balance-edges.png +0 -0
- allocator-0.1.7/allocator/examples/KaHIP/KaFFPaE-without-balance-edges.png +0 -0
- allocator-0.1.7/allocator/examples/KaHIP/KaHIP-Buffoon.png +0 -0
- allocator-0.1.7/allocator/examples/KaHIP/delhi-kaffpae-balance-edges-output.csv +0 -1001
- allocator-0.1.7/allocator/examples/KaHIP/delhi-kaffpae-without-balance-edges-output.csv +0 -1001
- allocator-0.1.7/allocator/examples/KaHIP/delhi-kahip-buffoon-output.csv +0 -1001
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-1.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-10.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-11.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-12.html +0 -898
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-13.html +0 -855
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-14.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-15.html +0 -898
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-16.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-17.html +0 -812
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-18.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-19.html +0 -984
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-2.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-20.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-21.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-22.html +0 -898
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-23.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-24.html +0 -898
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-25.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-26.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-27.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-28.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-29.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-3.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-30.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-31.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-32.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-33.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-34.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-35.html +0 -898
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-36.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-37.html +0 -984
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-38.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-39.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-4.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-40.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-41.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-42.html +0 -984
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-43.html +0 -984
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-44.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-45.html +0 -984
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-46.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-47.html +0 -984
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-48.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-49.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-5.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-50.html +0 -984
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-6.html +0 -984
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-7.html +0 -941
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-8.html +0 -984
- allocator-0.1.7/allocator/examples/OSRM-buffoon/chonburi-osrm-9.html +0 -984
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-1.svg +0 -1208
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-10.svg +0 -1219
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-11.svg +0 -1273
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-12.svg +0 -1145
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-13.svg +0 -1236
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-14.svg +0 -1293
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-15.svg +0 -1232
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-16.svg +0 -1260
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-17.svg +0 -1257
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-18.svg +0 -1289
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-19.svg +0 -1258
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-2.svg +0 -1278
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-20.svg +0 -1193
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-21.svg +0 -1227
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-22.svg +0 -1237
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-23.svg +0 -1259
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-24.svg +0 -1181
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-25.svg +0 -1209
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-26.svg +0 -1274
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-27.svg +0 -1233
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-28.svg +0 -1233
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-29.svg +0 -1191
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-3.svg +0 -1274
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-30.svg +0 -1277
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-31.svg +0 -1219
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-32.svg +0 -1293
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-33.svg +0 -1231
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-34.svg +0 -1225
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-35.svg +0 -1298
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-36.svg +0 -1260
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-37.svg +0 -1191
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-38.svg +0 -1273
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-39.svg +0 -1288
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-4.svg +0 -1278
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-40.svg +0 -1187
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-41.svg +0 -1189
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-42.svg +0 -1265
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-43.svg +0 -1224
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-44.svg +0 -1177
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-45.svg +0 -1169
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-46.svg +0 -1209
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-47.svg +0 -1265
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-48.svg +0 -1299
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-49.svg +0 -1267
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-5.svg +0 -1276
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-50.svg +0 -1199
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-6.svg +0 -1197
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-7.svg +0 -1190
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-8.svg +0 -1262
- allocator-0.1.7/allocator/examples/TSP-buffoon/delhi-tsp-9.svg +0 -1297
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-1.svg +0 -1316
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-10.svg +0 -1039
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-11.svg +0 -1399
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-12.svg +0 -1217
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-13.svg +0 -1039
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-14.svg +0 -1519
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-15.svg +0 -1537
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-16.svg +0 -1082
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-17.svg +0 -1244
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-18.svg +0 -1463
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-19.svg +0 -1333
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-2.svg +0 -1562
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-20.svg +0 -1038
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-21.svg +0 -1471
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-22.svg +0 -1105
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-23.svg +0 -1561
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-24.svg +0 -1412
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-25.svg +0 -965
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-26.svg +0 -1163
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-27.svg +0 -1329
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-28.svg +0 -1283
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-29.svg +0 -1083
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-3.svg +0 -1176
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-30.svg +0 -1051
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-31.svg +0 -1305
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-32.svg +0 -1161
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-33.svg +0 -1350
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-34.svg +0 -1418
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-35.svg +0 -1007
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-36.svg +0 -1167
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-37.svg +0 -1316
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-38.svg +0 -1064
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-39.svg +0 -1323
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-4.svg +0 -1387
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-40.svg +0 -1023
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-41.svg +0 -1173
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-42.svg +0 -1170
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-43.svg +0 -1347
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-44.svg +0 -1280
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-45.svg +0 -1137
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-46.svg +0 -1204
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-47.svg +0 -1324
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-48.svg +0 -1309
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-49.svg +0 -1461
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-5.svg +0 -1276
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-50.svg +0 -1081
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-6.svg +0 -1149
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-7.svg +0 -1205
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-8.svg +0 -1352
- allocator-0.1.7/allocator/examples/TSP-kmeans/delhi-tsp-9.svg +0 -1004
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-1.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-10.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-11.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-12.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-13.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-14.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-15.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-16.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-17.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-18.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-19.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-2.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-20.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-21.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-22.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-23.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-24.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-25.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-26.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-27.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-28.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-29.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-3.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-30.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-31.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-32.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-33.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-34.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-35.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-36.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-37.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-38.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-39.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-4.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-40.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-41.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-42.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-43.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-44.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-45.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-46.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-47.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-48.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-49.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-5.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-50.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-6.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-7.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-8.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/chonburi/chonburi-tsp-9.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-1.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-10.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-11.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-12.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-13.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-14.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-15.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-16.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-17.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-18.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-19.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-2.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-20.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-21.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-22.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-23.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-24.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-25.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-26.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-27.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-28.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-29.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-3.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-30.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-31.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-32.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-33.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-34.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-35.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-36.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-37.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-38.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-39.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-4.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-40.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-41.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-42.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-43.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-44.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-45.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-46.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-47.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-48.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-49.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-5.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-50.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-6.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-7.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-8.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-buffoon/delhi/delhi-tsp-9.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-1.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-10.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-11.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-12.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-13.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-14.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-15.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-16.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-17.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-18.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-19.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-2.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-20.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-21.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-22.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-23.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-24.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-25.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-26.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-27.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-28.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-29.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-3.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-30.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-31.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-32.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-33.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-34.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-35.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-36.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-37.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-38.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-39.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-4.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-40.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-41.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-42.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-43.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-44.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-45.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-46.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-47.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-48.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-49.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-5.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-50.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-6.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-7.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-8.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/delhi-tsp-9.png +0 -0
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-1.html +0 -1285
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-10.html +0 -554
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-11.html +0 -1414
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-12.html +0 -1156
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-13.html +0 -382
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-14.html +0 -1414
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-15.html +0 -1758
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-16.html +0 -597
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-17.html +0 -984
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-18.html +0 -1285
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-19.html +0 -1199
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-2.html +0 -1973
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-20.html +0 -382
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-21.html +0 -1414
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-22.html +0 -726
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-23.html +0 -1629
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-24.html +0 -1285
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-25.html +0 -554
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-26.html +0 -812
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-27.html +0 -1156
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-28.html +0 -1199
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-29.html +0 -726
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-3.html +0 -597
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-30.html +0 -468
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-31.html +0 -1285
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-32.html +0 -597
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-33.html +0 -1242
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-34.html +0 -1414
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-35.html +0 -382
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-36.html +0 -898
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-37.html +0 -984
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-38.html +0 -554
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-39.html +0 -1199
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-4.html +0 -1156
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-40.html +0 -339
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-41.html +0 -898
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-42.html +0 -812
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-43.html +0 -1199
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-44.html +0 -1070
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-45.html +0 -597
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-46.html +0 -898
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-47.html +0 -1070
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-48.html +0 -941
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-49.html +0 -1457
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-5.html +0 -1113
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-50.html +0 -769
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-6.html +0 -683
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-7.html +0 -898
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-8.html +0 -1371
- allocator-0.1.7/allocator/examples/TSP-ortools-kmeans/map/delhi-tsp-9.html +0 -425
- allocator-0.1.7/allocator/examples/chonburi-buffon-shortest-ortools-tsp.csv +0 -51
- allocator-0.1.7/allocator/examples/chonburi-buffoon-n50.csv +0 -1001
- allocator-0.1.7/allocator/examples/chonburi-buffoon-shortest-gm.csv +0 -51
- allocator-0.1.7/allocator/examples/chonburi-buffoon-shortest-ortools-tsp.csv +0 -51
- allocator-0.1.7/allocator/examples/chonburi-buffoon-shortest-osrm.csv +0 -51
- allocator-0.1.7/allocator/examples/chonburi-roads-1k.csv +0 -1001
- allocator-0.1.7/allocator/examples/compare-kahip-kmeans/compare-buffoon-kmean.csv +0 -11
- allocator-0.1.7/allocator/examples/compare-kahip-kmeans/compare-kaffpae+balance-edges-kmean.csv +0 -11
- allocator-0.1.7/allocator/examples/compare-kahip-kmeans/compare-kaffpae-kmean.csv +0 -11
- allocator-0.1.7/allocator/examples/delhi-buffoon-n50.csv +0 -1001
- allocator-0.1.7/allocator/examples/delhi-buffoon-shortest-gm.csv +0 -51
- allocator-0.1.7/allocator/examples/delhi-buffoon-shortest-ortools-tsp.csv +0 -51
- allocator-0.1.7/allocator/examples/delhi-buffoon-shortest.csv +0 -51
- allocator-0.1.7/allocator/examples/delhi-kmeans-n50.csv +0 -1001
- allocator-0.1.7/allocator/examples/delhi-kmeans-shortest-ortools-tsp.csv +0 -51
- allocator-0.1.7/allocator/examples/delhi-kmeans-shortest.csv +0 -51
- allocator-0.1.7/allocator/examples/delhi-roads-1k.csv +0 -1001
- allocator-0.1.7/allocator/examples/init-location.csv +0 -11
- allocator-0.1.7/allocator/examples/kmeans/cluster-kmeans-centroids-output.csv +0 -11
- allocator-0.1.7/allocator/examples/kmeans/cluster-kmeans-output.csv +0 -1001
- allocator-0.1.7/allocator/examples/kmeans/cluster-kmeans-output.png +0 -0
- allocator-0.1.7/allocator/examples/kmeans/delhi-kmeans-centroids.csv +0 -11
- allocator-0.1.7/allocator/examples/kmeans/delhi-kmeans-output.csv +0 -1001
- allocator-0.1.7/allocator/examples/kmeans/delhi-kmeans-output.png +0 -0
- allocator-0.1.7/allocator/examples/mst-graph.png +0 -0
- allocator-0.1.7/allocator/examples/mst-shortest-path-output.csv +0 -1001
- allocator-0.1.7/allocator/examples/random-output-osrm.csv +0 -1001
- allocator-0.1.7/allocator/examples/shortest-path-ortools-output.csv +0 -41
- allocator-0.1.7/allocator/examples/shortest-path-trip-output.csv +0 -41
- allocator-0.1.7/allocator/examples/sort-by-distance/sort-by-distance-by-worker-output.csv +0 -11
- allocator-0.1.7/allocator/examples/sort-by-distance/sort-by-distance-output.csv +0 -1001
- allocator-0.1.7/allocator/examples/sort-by-distance/sort-by-distance-output.png +0 -0
- allocator-0.1.7/allocator/examples/sort-by-distance/worker-locations.csv +0 -11
- allocator-0.1.7/allocator/shortest_path_gm.py +0 -155
- allocator-0.1.7/allocator/shortest_path_mst_tsp.py +0 -138
- allocator-0.1.7/allocator/shortest_path_ortools.py +0 -266
- allocator-0.1.7/allocator/shortest_path_osrm.py +0 -167
- allocator-0.1.7/allocator/sort_by_distance.py +0 -142
- allocator-0.1.7/allocator/tests/__init__.py +0 -15
- allocator-0.1.7/allocator/tests/chonburi-roads-50.csv +0 -51
- allocator-0.1.7/allocator/tests/test_cluster_kahip.py +0 -35
- allocator-0.1.7/allocator/tests/test_sort_by_distance.py +0 -52
- allocator-0.1.7/allocator/tests/worker-locations.csv +0 -11
- allocator-0.1.7/allocator/utils.py +0 -50
- allocator-0.1.7/allocator.egg-info/PKG-INFO +0 -134
- allocator-0.1.7/allocator.egg-info/SOURCES.txt +0 -516
- allocator-0.1.7/allocator.egg-info/dependency_links.txt +0 -1
- allocator-0.1.7/allocator.egg-info/entry_points.txt +0 -10
- allocator-0.1.7/allocator.egg-info/requires.txt +0 -16
- allocator-0.1.7/allocator.egg-info/top_level.txt +0 -1
- allocator-0.1.7/setup.cfg +0 -8
- allocator-0.1.7/setup.py +0 -194
allocator-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: allocator
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Modern Python package for geographic task allocation, clustering, and routing optimization
|
|
5
|
+
Keywords: geographic,allocation,clustering,routing,optimization,tsp,kmeans,geospatial,logistics,shortest-path
|
|
6
|
+
Author: Suriyan Laohaprapanon, Gaurav Sood
|
|
7
|
+
Author-email: Suriyan Laohaprapanon <suriyant@gmail.com>, Gaurav Sood <gsood07@gmail.com>
|
|
8
|
+
License-Expression: MIT
|
|
9
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
10
|
+
Classifier: Intended Audience :: Developers
|
|
11
|
+
Classifier: Intended Audience :: Science/Research
|
|
12
|
+
Classifier: Operating System :: OS Independent
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
17
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
18
|
+
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
19
|
+
Classifier: Topic :: Scientific/Engineering :: GIS
|
|
20
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
21
|
+
Classifier: Topic :: Utilities
|
|
22
|
+
Classifier: Typing :: Typed
|
|
23
|
+
Requires-Dist: pandas>=2.0.0
|
|
24
|
+
Requires-Dist: numpy>=1.24.0
|
|
25
|
+
Requires-Dist: scikit-learn>=1.3.0
|
|
26
|
+
Requires-Dist: utm>=0.7.0
|
|
27
|
+
Requires-Dist: haversine>=2.8.0
|
|
28
|
+
Requires-Dist: networkx>=3.0
|
|
29
|
+
Requires-Dist: click>=8.0.0
|
|
30
|
+
Requires-Dist: rich>=13.0.0
|
|
31
|
+
Requires-Dist: requests>=2.28.0
|
|
32
|
+
Requires-Dist: googlemaps>=4.6.0
|
|
33
|
+
Requires-Dist: ortools>=9.5.0
|
|
34
|
+
Requires-Dist: matplotlib>=3.6.0
|
|
35
|
+
Requires-Dist: seaborn>=0.13.2
|
|
36
|
+
Requires-Dist: scipy>=1.10.0 ; extra == 'algorithms'
|
|
37
|
+
Requires-Dist: christofides>=1.0.0 ; extra == 'algorithms'
|
|
38
|
+
Requires-Dist: allocator[algorithms,geo] ; extra == 'all'
|
|
39
|
+
Requires-Dist: allocator[all,dev,test,docs] ; extra == 'complete'
|
|
40
|
+
Requires-Dist: ruff>=0.1.0 ; extra == 'dev'
|
|
41
|
+
Requires-Dist: mypy>=1.5.0 ; extra == 'dev'
|
|
42
|
+
Requires-Dist: black>=23.0.0 ; extra == 'dev'
|
|
43
|
+
Requires-Dist: isort>=5.12.0 ; extra == 'dev'
|
|
44
|
+
Requires-Dist: pre-commit>=3.0.0 ; extra == 'dev'
|
|
45
|
+
Requires-Dist: sphinx>=7.0.0 ; extra == 'docs'
|
|
46
|
+
Requires-Dist: furo>=2023.9.10 ; extra == 'docs'
|
|
47
|
+
Requires-Dist: myst-parser>=2.0.0 ; extra == 'docs'
|
|
48
|
+
Requires-Dist: linkify-it-py>=2.0.0 ; extra == 'docs'
|
|
49
|
+
Requires-Dist: sphinx-autodoc-typehints>=1.24.0 ; extra == 'docs'
|
|
50
|
+
Requires-Dist: sphinx-design>=0.5.0 ; extra == 'docs'
|
|
51
|
+
Requires-Dist: folium>=0.14.0 ; extra == 'geo'
|
|
52
|
+
Requires-Dist: polyline>=2.0.0 ; extra == 'geo'
|
|
53
|
+
Requires-Dist: pytest>=7.4.0 ; extra == 'test'
|
|
54
|
+
Requires-Dist: pytest-cov>=4.1.0 ; extra == 'test'
|
|
55
|
+
Requires-Dist: pytest-xdist>=3.3.0 ; extra == 'test'
|
|
56
|
+
Requires-Dist: coverage>=7.2.0 ; extra == 'test'
|
|
57
|
+
Requires-Dist: hypothesis>=6.82.0 ; extra == 'test'
|
|
58
|
+
Maintainer: Gaurav Sood
|
|
59
|
+
Maintainer-email: Gaurav Sood <gsood07@gmail.com>
|
|
60
|
+
Requires-Python: >=3.11
|
|
61
|
+
Project-URL: Bug Reports, https://github.com/geosensing/allocator/issues
|
|
62
|
+
Project-URL: Changelog, https://github.com/geosensing/allocator/blob/main/CHANGELOG.md
|
|
63
|
+
Project-URL: Documentation, https://geosensing.github.io/allocator/
|
|
64
|
+
Project-URL: Homepage, https://github.com/geosensing/allocator
|
|
65
|
+
Project-URL: Repository, https://github.com/geosensing/allocator.git
|
|
66
|
+
Project-URL: Source Code, https://github.com/geosensing/allocator
|
|
67
|
+
Provides-Extra: algorithms
|
|
68
|
+
Provides-Extra: all
|
|
69
|
+
Provides-Extra: complete
|
|
70
|
+
Provides-Extra: dev
|
|
71
|
+
Provides-Extra: docs
|
|
72
|
+
Provides-Extra: geo
|
|
73
|
+
Provides-Extra: test
|
|
74
|
+
Description-Content-Type: text/markdown
|
|
75
|
+
|
|
76
|
+
# allocator: Efficiently collect data from geographically distributed locations
|
|
77
|
+
|
|
78
|
+
[](https://pypi.python.org/pypi/allocator)
|
|
79
|
+
[](https://pepy.tech/project/allocator)
|
|
80
|
+
[](https://github.com/geosensing/allocator/actions/workflows/ci.yml)
|
|
81
|
+
[](https://geosensing.github.io/allocator/)
|
|
82
|
+
|
|
83
|
+
**Allocator** provides a modern, Pythonic API for geographic task allocation, clustering, and routing optimization.
|
|
84
|
+
|
|
85
|
+
## Key Features
|
|
86
|
+
|
|
87
|
+
- **🎯 Clustering**: Group geographic points into balanced zones
|
|
88
|
+
- **🛣️ Routing**: Find optimal paths through locations (TSP solving)
|
|
89
|
+
- **📍 Assignment**: Connect points to closest workers/centers
|
|
90
|
+
- **🚀 Performance**: Optimized algorithms with NumPy and scikit-learn
|
|
91
|
+
- **📦 Modern API**: Clean Python interface + unified CLI
|
|
92
|
+
|
|
93
|
+
## Quick Start
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
pip install allocator
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
```python
|
|
100
|
+
import allocator
|
|
101
|
+
import pandas as pd
|
|
102
|
+
|
|
103
|
+
# Geographic locations
|
|
104
|
+
locations = pd.DataFrame({
|
|
105
|
+
'longitude': [100.5018, 100.5065, 100.5108],
|
|
106
|
+
'latitude': [13.7563, 13.7590, 13.7633]
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
# Group into zones
|
|
110
|
+
clusters = allocator.cluster(locations, n_clusters=2)
|
|
111
|
+
|
|
112
|
+
# Find optimal route
|
|
113
|
+
route = allocator.shortest_path(locations)
|
|
114
|
+
|
|
115
|
+
# Assign to service centers
|
|
116
|
+
centers = pd.DataFrame({
|
|
117
|
+
'longitude': [100.50, 100.52],
|
|
118
|
+
'latitude': [13.75, 13.77]
|
|
119
|
+
})
|
|
120
|
+
assignments = allocator.assign(locations, centers)
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Documentation & Examples
|
|
124
|
+
|
|
125
|
+
- **📖 [Full Documentation](https://geosensing.github.io/allocator/)**
|
|
126
|
+
- **🚀 [Installation & Tutorial](https://geosensing.github.io/allocator/quickstart.html)**
|
|
127
|
+
- **🔧 [API Reference](https://geosensing.github.io/allocator/api/clustering.html)**
|
|
128
|
+
- **💡 [Real-World Examples](https://geosensing.github.io/allocator/examples/overview.html)**
|
|
129
|
+
|
|
130
|
+
## License & Contributing
|
|
131
|
+
|
|
132
|
+
MIT License. Contributions welcome - see [Contributing Guide](https://geosensing.github.io/allocator/contributing.html).
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# allocator: Efficiently collect data from geographically distributed locations
|
|
2
|
+
|
|
3
|
+
[](https://pypi.python.org/pypi/allocator)
|
|
4
|
+
[](https://pepy.tech/project/allocator)
|
|
5
|
+
[](https://github.com/geosensing/allocator/actions/workflows/ci.yml)
|
|
6
|
+
[](https://geosensing.github.io/allocator/)
|
|
7
|
+
|
|
8
|
+
**Allocator** provides a modern, Pythonic API for geographic task allocation, clustering, and routing optimization.
|
|
9
|
+
|
|
10
|
+
## Key Features
|
|
11
|
+
|
|
12
|
+
- **🎯 Clustering**: Group geographic points into balanced zones
|
|
13
|
+
- **🛣️ Routing**: Find optimal paths through locations (TSP solving)
|
|
14
|
+
- **📍 Assignment**: Connect points to closest workers/centers
|
|
15
|
+
- **🚀 Performance**: Optimized algorithms with NumPy and scikit-learn
|
|
16
|
+
- **📦 Modern API**: Clean Python interface + unified CLI
|
|
17
|
+
|
|
18
|
+
## Quick Start
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
pip install allocator
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
```python
|
|
25
|
+
import allocator
|
|
26
|
+
import pandas as pd
|
|
27
|
+
|
|
28
|
+
# Geographic locations
|
|
29
|
+
locations = pd.DataFrame({
|
|
30
|
+
'longitude': [100.5018, 100.5065, 100.5108],
|
|
31
|
+
'latitude': [13.7563, 13.7590, 13.7633]
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
# Group into zones
|
|
35
|
+
clusters = allocator.cluster(locations, n_clusters=2)
|
|
36
|
+
|
|
37
|
+
# Find optimal route
|
|
38
|
+
route = allocator.shortest_path(locations)
|
|
39
|
+
|
|
40
|
+
# Assign to service centers
|
|
41
|
+
centers = pd.DataFrame({
|
|
42
|
+
'longitude': [100.50, 100.52],
|
|
43
|
+
'latitude': [13.75, 13.77]
|
|
44
|
+
})
|
|
45
|
+
assignments = allocator.assign(locations, centers)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Documentation & Examples
|
|
49
|
+
|
|
50
|
+
- **📖 [Full Documentation](https://geosensing.github.io/allocator/)**
|
|
51
|
+
- **🚀 [Installation & Tutorial](https://geosensing.github.io/allocator/quickstart.html)**
|
|
52
|
+
- **🔧 [API Reference](https://geosensing.github.io/allocator/api/clustering.html)**
|
|
53
|
+
- **💡 [Real-World Examples](https://geosensing.github.io/allocator/examples/overview.html)**
|
|
54
|
+
|
|
55
|
+
## License & Contributing
|
|
56
|
+
|
|
57
|
+
MIT License. Contributions welcome - see [Contributing Guide](https://geosensing.github.io/allocator/contributing.html).
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Allocator v1.0: Optimally Allocate Geographically Distributed Tasks
|
|
3
|
+
|
|
4
|
+
A modern Python package for geographic task allocation, clustering, and routing optimization.
|
|
5
|
+
|
|
6
|
+
Key Features:
|
|
7
|
+
- Cluster geographic points into balanced groups
|
|
8
|
+
- Find optimal routes through locations (TSP solving)
|
|
9
|
+
- Assign points to closest workers/centers
|
|
10
|
+
- Multiple distance metrics (euclidean, haversine, OSRM, Google Maps)
|
|
11
|
+
- Clean API with structured results and rich metadata
|
|
12
|
+
- Unified CLI with beautiful terminal output
|
|
13
|
+
|
|
14
|
+
Quick Start:
|
|
15
|
+
>>> import allocator
|
|
16
|
+
>>> import pandas as pd
|
|
17
|
+
>>>
|
|
18
|
+
>>> # Create sample data
|
|
19
|
+
>>> data = pd.DataFrame({
|
|
20
|
+
... 'longitude': [101.0, 101.1, 101.2],
|
|
21
|
+
... 'latitude': [13.0, 13.1, 13.2]
|
|
22
|
+
... })
|
|
23
|
+
>>>
|
|
24
|
+
>>> # Cluster locations
|
|
25
|
+
>>> result = allocator.cluster(data, n_clusters=2)
|
|
26
|
+
>>> print(result.labels)
|
|
27
|
+
>>>
|
|
28
|
+
>>> # Find optimal route
|
|
29
|
+
>>> route = allocator.shortest_path(data, method='ortools')
|
|
30
|
+
>>> print(route.route)
|
|
31
|
+
|
|
32
|
+
For more examples: https://geosensing.github.io/allocator/
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
import logging
|
|
36
|
+
import sys
|
|
37
|
+
|
|
38
|
+
# Import modern API
|
|
39
|
+
from .api import (
|
|
40
|
+
ClusterResult,
|
|
41
|
+
ComparisonResult,
|
|
42
|
+
RouteResult,
|
|
43
|
+
SortResult,
|
|
44
|
+
assign_to_closest,
|
|
45
|
+
cluster,
|
|
46
|
+
distance_assignment,
|
|
47
|
+
kmeans,
|
|
48
|
+
shortest_path,
|
|
49
|
+
sort_by_distance,
|
|
50
|
+
tsp_christofides,
|
|
51
|
+
tsp_google,
|
|
52
|
+
tsp_ortools,
|
|
53
|
+
tsp_osrm,
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
# Import utilities for advanced users
|
|
57
|
+
from .distances import (
|
|
58
|
+
euclidean_distance_matrix,
|
|
59
|
+
get_distance_matrix,
|
|
60
|
+
google_distance_matrix,
|
|
61
|
+
haversine_distance_matrix,
|
|
62
|
+
latlon2xy,
|
|
63
|
+
osrm_distance_matrix,
|
|
64
|
+
xy2latlog,
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
# Import visualization functions
|
|
68
|
+
from .viz.plotting import plot_assignments, plot_clusters, plot_comparison, plot_route
|
|
69
|
+
|
|
70
|
+
# Version
|
|
71
|
+
__version__ = "1.0.0"
|
|
72
|
+
|
|
73
|
+
# Export public API
|
|
74
|
+
__all__ = [
|
|
75
|
+
# Result types
|
|
76
|
+
"ClusterResult",
|
|
77
|
+
"ComparisonResult",
|
|
78
|
+
"RouteResult",
|
|
79
|
+
"SortResult",
|
|
80
|
+
"assign_to_closest",
|
|
81
|
+
# Main functions
|
|
82
|
+
"cluster",
|
|
83
|
+
"distance_assignment",
|
|
84
|
+
"euclidean_distance_matrix",
|
|
85
|
+
# Distance utilities
|
|
86
|
+
"get_distance_matrix",
|
|
87
|
+
"get_logger",
|
|
88
|
+
"google_distance_matrix",
|
|
89
|
+
"haversine_distance_matrix",
|
|
90
|
+
# Specific methods
|
|
91
|
+
"kmeans",
|
|
92
|
+
"latlon2xy",
|
|
93
|
+
"osrm_distance_matrix",
|
|
94
|
+
"plot_assignments",
|
|
95
|
+
# Visualization
|
|
96
|
+
"plot_clusters",
|
|
97
|
+
"plot_comparison",
|
|
98
|
+
"plot_route",
|
|
99
|
+
# Logging utilities
|
|
100
|
+
"setup_logging",
|
|
101
|
+
"shortest_path",
|
|
102
|
+
"sort_by_distance",
|
|
103
|
+
"tsp_christofides",
|
|
104
|
+
"tsp_google",
|
|
105
|
+
"tsp_ortools",
|
|
106
|
+
"tsp_osrm",
|
|
107
|
+
"xy2latlog",
|
|
108
|
+
]
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def setup_logging(level=logging.INFO):
|
|
112
|
+
"""
|
|
113
|
+
Set up logging configuration for the allocator package.
|
|
114
|
+
|
|
115
|
+
Args:
|
|
116
|
+
level: Logging level (DEBUG, INFO, WARNING, ERROR)
|
|
117
|
+
"""
|
|
118
|
+
# Create formatter
|
|
119
|
+
formatter = logging.Formatter(
|
|
120
|
+
"%(asctime)s - %(name)s - %(levelname)s - %(message)s", datefmt="%Y-%m-%d %H:%M:%S"
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
# Get root logger for allocator package
|
|
124
|
+
logger = logging.getLogger("allocator")
|
|
125
|
+
logger.setLevel(level)
|
|
126
|
+
|
|
127
|
+
# Remove existing handlers to avoid duplicates
|
|
128
|
+
for handler in logger.handlers[:]:
|
|
129
|
+
logger.removeHandler(handler)
|
|
130
|
+
|
|
131
|
+
# Console handler
|
|
132
|
+
console_handler = logging.StreamHandler(sys.stdout)
|
|
133
|
+
console_handler.setLevel(level)
|
|
134
|
+
console_handler.setFormatter(formatter)
|
|
135
|
+
logger.addHandler(console_handler)
|
|
136
|
+
|
|
137
|
+
return logger
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def get_logger(name):
|
|
141
|
+
"""
|
|
142
|
+
Get a logger instance for a specific module.
|
|
143
|
+
|
|
144
|
+
Args:
|
|
145
|
+
name: Module name (typically __name__)
|
|
146
|
+
|
|
147
|
+
Returns:
|
|
148
|
+
Logger instance
|
|
149
|
+
"""
|
|
150
|
+
return logging.getLogger(f"allocator.{name}")
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
# Set up default logging
|
|
154
|
+
setup_logging()
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Public API for allocator package.
|
|
3
|
+
|
|
4
|
+
This module provides a modern, Pythonic interface to the allocator package.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from .cluster import cluster, kmeans
|
|
8
|
+
from .distance import assign_to_closest, distance_assignment, sort_by_distance
|
|
9
|
+
from .route import shortest_path, tsp_christofides, tsp_google, tsp_ortools, tsp_osrm
|
|
10
|
+
from .types import ClusterResult, ComparisonResult, RouteResult, SortResult
|
|
11
|
+
|
|
12
|
+
__all__ = [
|
|
13
|
+
# Result types
|
|
14
|
+
"ClusterResult",
|
|
15
|
+
"ComparisonResult",
|
|
16
|
+
"RouteResult",
|
|
17
|
+
"SortResult",
|
|
18
|
+
# Distance assignment methods
|
|
19
|
+
"assign_to_closest",
|
|
20
|
+
# Main high-level functions
|
|
21
|
+
"cluster",
|
|
22
|
+
"distance_assignment",
|
|
23
|
+
# Specific clustering methods
|
|
24
|
+
"kmeans",
|
|
25
|
+
"shortest_path",
|
|
26
|
+
"sort_by_distance",
|
|
27
|
+
# Specific routing methods
|
|
28
|
+
"tsp_christofides",
|
|
29
|
+
"tsp_google",
|
|
30
|
+
"tsp_ortools",
|
|
31
|
+
"tsp_osrm",
|
|
32
|
+
]
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Modern clustering API for allocator package.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
import numpy as np
|
|
10
|
+
import pandas as pd
|
|
11
|
+
|
|
12
|
+
from ..core.algorithms import kmeans_cluster as _kmeans_cluster
|
|
13
|
+
from ..io.data_handler import DataHandler
|
|
14
|
+
from .types import ClusterResult
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def cluster(
|
|
18
|
+
data: str | pd.DataFrame | np.ndarray | list,
|
|
19
|
+
n_clusters: int = 3,
|
|
20
|
+
method: str = "kmeans",
|
|
21
|
+
distance: str = "euclidean",
|
|
22
|
+
random_state: int | None = None,
|
|
23
|
+
**kwargs,
|
|
24
|
+
) -> ClusterResult:
|
|
25
|
+
"""
|
|
26
|
+
Cluster geographic data points.
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
data: Input data (file path, DataFrame, numpy array, or list)
|
|
30
|
+
n_clusters: Number of clusters to create
|
|
31
|
+
method: Clustering method ('kmeans')
|
|
32
|
+
distance: Distance metric ('euclidean', 'haversine', 'osrm', 'google')
|
|
33
|
+
random_state: Random seed for reproducibility
|
|
34
|
+
**kwargs: Additional arguments for specific methods
|
|
35
|
+
|
|
36
|
+
Returns:
|
|
37
|
+
ClusterResult with labels, centroids, and metadata
|
|
38
|
+
|
|
39
|
+
Example:
|
|
40
|
+
>>> result = cluster('data.csv', n_clusters=5, method='kmeans')
|
|
41
|
+
>>> print(result.labels) # Cluster assignments
|
|
42
|
+
>>> print(result.centroids) # Cluster centers
|
|
43
|
+
"""
|
|
44
|
+
# Load and standardize data
|
|
45
|
+
df = DataHandler.load_data(data)
|
|
46
|
+
|
|
47
|
+
if method == "kmeans":
|
|
48
|
+
return kmeans(
|
|
49
|
+
df, n_clusters=n_clusters, distance=distance, random_state=random_state, **kwargs
|
|
50
|
+
)
|
|
51
|
+
else:
|
|
52
|
+
raise ValueError(f"Unknown clustering method: {method}. Available methods: 'kmeans'")
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def kmeans(
|
|
56
|
+
data: pd.DataFrame | np.ndarray | list,
|
|
57
|
+
n_clusters: int = 3,
|
|
58
|
+
distance: str = "euclidean",
|
|
59
|
+
max_iter: int = 300,
|
|
60
|
+
random_state: int | None = None,
|
|
61
|
+
**kwargs,
|
|
62
|
+
) -> ClusterResult:
|
|
63
|
+
"""
|
|
64
|
+
K-means clustering of geographic data.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
data: Input data as DataFrame or numpy array
|
|
68
|
+
n_clusters: Number of clusters
|
|
69
|
+
distance: Distance metric ('euclidean', 'haversine', 'osrm', 'google')
|
|
70
|
+
max_iter: Maximum iterations
|
|
71
|
+
random_state: Random seed for reproducibility
|
|
72
|
+
**kwargs: Additional distance-specific arguments
|
|
73
|
+
|
|
74
|
+
Returns:
|
|
75
|
+
ClusterResult with clustering information
|
|
76
|
+
"""
|
|
77
|
+
# Ensure we have a DataFrame for output
|
|
78
|
+
if isinstance(data, np.ndarray):
|
|
79
|
+
df = DataHandler._from_numpy(data)
|
|
80
|
+
elif isinstance(data, list):
|
|
81
|
+
df = DataHandler._from_list(data)
|
|
82
|
+
elif isinstance(data, (str, Path)):
|
|
83
|
+
df = DataHandler.load_data(data)
|
|
84
|
+
else:
|
|
85
|
+
df = data.copy()
|
|
86
|
+
|
|
87
|
+
# Run clustering algorithm
|
|
88
|
+
result = _kmeans_cluster(
|
|
89
|
+
df,
|
|
90
|
+
n_clusters=n_clusters,
|
|
91
|
+
distance_method=distance,
|
|
92
|
+
max_iter=max_iter,
|
|
93
|
+
random_state=random_state,
|
|
94
|
+
**kwargs,
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
# Add cluster assignments to DataFrame
|
|
98
|
+
df_result = df.copy()
|
|
99
|
+
df_result["cluster"] = result["labels"]
|
|
100
|
+
|
|
101
|
+
# Calculate inertia (sum of squared distances to centroids)
|
|
102
|
+
inertia = None
|
|
103
|
+
if distance == "euclidean":
|
|
104
|
+
from ..distances import euclidean_distance_matrix
|
|
105
|
+
|
|
106
|
+
coords = df[["longitude", "latitude"]].values
|
|
107
|
+
distances = euclidean_distance_matrix(coords, result["centroids"])
|
|
108
|
+
inertia = np.sum(
|
|
109
|
+
[distances[i, result["labels"][i]] ** 2 for i in range(len(result["labels"]))]
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
return ClusterResult(
|
|
113
|
+
labels=result["labels"],
|
|
114
|
+
centroids=result["centroids"],
|
|
115
|
+
n_iter=result["iterations"],
|
|
116
|
+
inertia=inertia,
|
|
117
|
+
data=df_result,
|
|
118
|
+
converged=result["converged"],
|
|
119
|
+
metadata={
|
|
120
|
+
"method": "kmeans",
|
|
121
|
+
"distance": distance,
|
|
122
|
+
"n_clusters": n_clusters,
|
|
123
|
+
"max_iter": max_iter,
|
|
124
|
+
"random_state": random_state,
|
|
125
|
+
},
|
|
126
|
+
)
|