├── results ├── djibouti │ ├── elastic_nets │ │ ├── animation.gif │ │ ├── iteration-0.png │ │ ├── iteration-10.png │ │ ├── iteration-100.png │ │ ├── iteration-110.png │ │ ├── iteration-120.png │ │ ├── iteration-130.png │ │ ├── iteration-140.png │ │ ├── iteration-150.png │ │ ├── iteration-160.png │ │ ├── iteration-170.png │ │ ├── iteration-180.png │ │ ├── iteration-190.png │ │ ├── iteration-20.png │ │ ├── iteration-200.png │ │ ├── iteration-210.png │ │ ├── iteration-220.png │ │ ├── iteration-230.png │ │ ├── iteration-240.png │ │ ├── iteration-250.png │ │ ├── iteration-260.png │ │ ├── iteration-270.png │ │ ├── iteration-280.png │ │ ├── iteration-290.png │ │ ├── iteration-30.png │ │ ├── iteration-300.png │ │ ├── iteration-310.png │ │ ├── iteration-320.png │ │ ├── iteration-330.png │ │ ├── iteration-340.png │ │ ├── iteration-350.png │ │ ├── iteration-360.png │ │ ├── iteration-370.png │ │ ├── iteration-380.png │ │ ├── iteration-390.png │ │ ├── iteration-40.png │ │ ├── iteration-400.png │ │ ├── iteration-50.png │ │ ├── iteration-60.png │ │ ├── iteration-70.png │ │ ├── iteration-80.png │ │ └── iteration-90.png │ └── self_organizing_map │ │ ├── animation.gif │ │ ├── iteration-0.png │ │ ├── iteration-10.png │ │ ├── iteration-100.png │ │ ├── iteration-110.png │ │ ├── iteration-120.png │ │ ├── iteration-130.png │ │ ├── iteration-140.png │ │ ├── iteration-150.png │ │ ├── iteration-160.png │ │ ├── iteration-170.png │ │ ├── iteration-180.png │ │ ├── iteration-190.png │ │ ├── iteration-20.png │ │ ├── iteration-30.png │ │ ├── iteration-40.png │ │ ├── iteration-50.png │ │ ├── iteration-60.png │ │ ├── iteration-70.png │ │ ├── iteration-80.png │ │ └── iteration-90.png ├── random_10_cities │ ├── elastic_nets │ │ ├── animation.gif │ │ ├── iteration-0.png │ │ ├── iteration-100.png │ │ ├── iteration-15.png │ │ ├── iteration-200.png │ │ ├── iteration-30.png │ │ ├── iteration-300.png │ │ ├── iteration-400.png │ │ ├── iteration-50.png │ │ └── iteration-500.png │ ├── hopfield_net │ │ ├── animation.gif │ │ ├── iteration-0.png │ │ ├── iteration-10.png │ │ ├── iteration-100.png │ │ ├── iteration-110.png │ │ ├── iteration-120.png │ │ ├── iteration-130.png │ │ ├── iteration-140.png │ │ ├── iteration-150.png │ │ ├── iteration-160.png │ │ ├── iteration-170.png │ │ ├── iteration-180.png │ │ ├── iteration-190.png │ │ ├── iteration-20.png │ │ ├── iteration-200.png │ │ ├── iteration-210.png │ │ ├── iteration-220.png │ │ ├── iteration-230.png │ │ ├── iteration-240.png │ │ ├── iteration-250.png │ │ ├── iteration-260.png │ │ ├── iteration-270.png │ │ ├── iteration-280.png │ │ ├── iteration-290.png │ │ ├── iteration-30.png │ │ ├── iteration-300.png │ │ ├── iteration-310.png │ │ ├── iteration-320.png │ │ ├── iteration-330.png │ │ ├── iteration-340.png │ │ ├── iteration-350.png │ │ ├── iteration-360.png │ │ ├── iteration-370.png │ │ ├── iteration-380.png │ │ ├── iteration-390.png │ │ ├── iteration-40.png │ │ ├── iteration-400.png │ │ ├── iteration-410.png │ │ ├── iteration-420.png │ │ ├── iteration-430.png │ │ ├── iteration-440.png │ │ ├── iteration-450.png │ │ ├── iteration-460.png │ │ ├── iteration-470.png │ │ ├── iteration-480.png │ │ ├── iteration-490.png │ │ ├── iteration-50.png │ │ ├── iteration-500.png │ │ ├── iteration-60.png │ │ ├── iteration-70.png │ │ ├── iteration-80.png │ │ └── iteration-90.png │ └── self_organizing_map │ │ ├── animation.gif │ │ ├── iteration-0.png │ │ ├── iteration-100.png │ │ ├── iteration-15.png │ │ ├── iteration-200.png │ │ ├── iteration-30.png │ │ ├── iteration-300.png │ │ ├── iteration-400.png │ │ ├── iteration-50.png │ │ └── iteration-500.png ├── random_30_cities │ ├── elastic_nets │ │ ├── animation.gif │ │ ├── iteration-0.png │ │ ├── iteration-100.png │ │ ├── iteration-15.png │ │ ├── iteration-200.png │ │ ├── iteration-30.png │ │ ├── iteration-300.png │ │ ├── iteration-400.png │ │ ├── iteration-50.png │ │ └── iteration-500.png │ └── self_organizing_map │ │ ├── animation.gif │ │ ├── iteration-0.png │ │ ├── iteration-100.png │ │ ├── iteration-15.png │ │ ├── iteration-200.png │ │ ├── iteration-30.png │ │ ├── iteration-300.png │ │ ├── iteration-400.png │ │ ├── iteration-50.png │ │ └── iteration-500.png └── random_20_cities │ ├── elastic_nets │ ├── iteration-0.png │ ├── iteration-10.png │ ├── iteration-100.png │ ├── iteration-110.png │ ├── iteration-120.png │ ├── iteration-130.png │ ├── iteration-140.png │ ├── iteration-150.png │ ├── iteration-160.png │ ├── iteration-170.png │ ├── iteration-180.png │ ├── iteration-190.png │ ├── iteration-20.png │ ├── iteration-200.png │ ├── iteration-210.png │ ├── iteration-220.png │ ├── iteration-230.png │ ├── iteration-240.png │ ├── iteration-250.png │ ├── iteration-260.png │ ├── iteration-270.png │ ├── iteration-280.png │ ├── iteration-290.png │ ├── iteration-30.png │ ├── iteration-300.png │ ├── iteration-310.png │ ├── iteration-320.png │ ├── iteration-330.png │ ├── iteration-340.png │ ├── iteration-350.png │ ├── iteration-360.png │ ├── iteration-370.png │ ├── iteration-380.png │ ├── iteration-390.png │ ├── iteration-40.png │ ├── iteration-400.png │ ├── iteration-410.png │ ├── iteration-420.png │ ├── iteration-430.png │ ├── iteration-440.png │ ├── iteration-450.png │ ├── iteration-460.png │ ├── iteration-470.png │ ├── iteration-480.png │ ├── iteration-490.png │ ├── iteration-50.png │ ├── iteration-60.png │ ├── iteration-70.png │ ├── iteration-80.png │ └── iteration-90.png │ └── self_organizing_map │ ├── iteration-0.png │ ├── iteration-10.png │ ├── iteration-100.png │ ├── iteration-110.png │ ├── iteration-120.png │ ├── iteration-130.png │ ├── iteration-140.png │ ├── iteration-150.png │ ├── iteration-160.png │ ├── iteration-170.png │ ├── iteration-180.png │ ├── iteration-190.png │ ├── iteration-20.png │ ├── iteration-30.png │ ├── iteration-40.png │ ├── iteration-50.png │ ├── iteration-60.png │ ├── iteration-70.png │ ├── iteration-80.png │ └── iteration-90.png ├── coordinates ├── random_10_cities.csv ├── western_sahara.csv ├── random_15_cities.csv ├── djibouti.csv ├── random_20_cities.csv ├── random_30_cities.csv ├── qatar.csv └── uruguay.csv ├── run-test.sh ├── .travis.yml ├── .vscode └── settings.json ├── Pipfile ├── cities_seeder.py ├── util.py ├── .github └── workflows │ └── pythonpackage.yml ├── tests ├── test_util.py ├── expected_biases.csv ├── test_hopfield_network.py └── expected_weights.csv ├── function_plot.py ├── LICENSE ├── config.py ├── gif_maker.py ├── README.md ├── self_organizing_map.py ├── elastic_nets.py ├── hopfield_network.py ├── .gitignore └── Pipfile.lock /results/djibouti/elastic_nets/animation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/animation.gif -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-0.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-10.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-100.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-110.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-110.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-120.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-130.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-130.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-140.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-150.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-160.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-160.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-170.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-170.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-180.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-190.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-190.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-20.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-200.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-210.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-210.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-220.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-220.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-230.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-230.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-240.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-250.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-250.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-260.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-260.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-270.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-270.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-280.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-280.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-290.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-290.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-30.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-300.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-310.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-320.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-320.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-330.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-330.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-340.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-340.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-350.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-350.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-360.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-360.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-370.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-370.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-380.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-380.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-390.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-390.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-40.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-400.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-50.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-60.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-70.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-80.png -------------------------------------------------------------------------------- /results/djibouti/elastic_nets/iteration-90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/elastic_nets/iteration-90.png -------------------------------------------------------------------------------- /results/djibouti/self_organizing_map/animation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/self_organizing_map/animation.gif -------------------------------------------------------------------------------- /results/djibouti/self_organizing_map/iteration-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/self_organizing_map/iteration-0.png -------------------------------------------------------------------------------- /results/random_10_cities/elastic_nets/animation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/elastic_nets/animation.gif -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/animation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/animation.gif -------------------------------------------------------------------------------- /results/random_30_cities/elastic_nets/animation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_30_cities/elastic_nets/animation.gif -------------------------------------------------------------------------------- /coordinates/random_10_cities.csv: -------------------------------------------------------------------------------- 1 | 0.5,0.9 2 | 0.2,0.8 3 | 0.4,0.5 4 | 0.15,0.25 5 | 0.25,0.1 6 | 0.6,0.3 7 | 0.65,0.3 8 | 0.9,0.35 9 | 0.7,0.5 10 | 0.9,0.7 -------------------------------------------------------------------------------- /results/djibouti/self_organizing_map/iteration-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/self_organizing_map/iteration-10.png -------------------------------------------------------------------------------- /results/djibouti/self_organizing_map/iteration-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/self_organizing_map/iteration-100.png -------------------------------------------------------------------------------- /results/djibouti/self_organizing_map/iteration-110.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/self_organizing_map/iteration-110.png -------------------------------------------------------------------------------- /results/djibouti/self_organizing_map/iteration-120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/self_organizing_map/iteration-120.png -------------------------------------------------------------------------------- /results/djibouti/self_organizing_map/iteration-130.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/self_organizing_map/iteration-130.png -------------------------------------------------------------------------------- /results/djibouti/self_organizing_map/iteration-140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/self_organizing_map/iteration-140.png -------------------------------------------------------------------------------- /results/djibouti/self_organizing_map/iteration-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/self_organizing_map/iteration-150.png -------------------------------------------------------------------------------- /results/djibouti/self_organizing_map/iteration-160.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/self_organizing_map/iteration-160.png -------------------------------------------------------------------------------- /results/djibouti/self_organizing_map/iteration-170.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/self_organizing_map/iteration-170.png -------------------------------------------------------------------------------- /results/djibouti/self_organizing_map/iteration-180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/self_organizing_map/iteration-180.png -------------------------------------------------------------------------------- /results/djibouti/self_organizing_map/iteration-190.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/self_organizing_map/iteration-190.png -------------------------------------------------------------------------------- /results/djibouti/self_organizing_map/iteration-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/self_organizing_map/iteration-20.png -------------------------------------------------------------------------------- /results/djibouti/self_organizing_map/iteration-30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/self_organizing_map/iteration-30.png -------------------------------------------------------------------------------- /results/djibouti/self_organizing_map/iteration-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/self_organizing_map/iteration-40.png -------------------------------------------------------------------------------- /results/djibouti/self_organizing_map/iteration-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/self_organizing_map/iteration-50.png -------------------------------------------------------------------------------- /results/djibouti/self_organizing_map/iteration-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/self_organizing_map/iteration-60.png -------------------------------------------------------------------------------- /results/djibouti/self_organizing_map/iteration-70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/self_organizing_map/iteration-70.png -------------------------------------------------------------------------------- /results/djibouti/self_organizing_map/iteration-80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/self_organizing_map/iteration-80.png -------------------------------------------------------------------------------- /results/djibouti/self_organizing_map/iteration-90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/djibouti/self_organizing_map/iteration-90.png -------------------------------------------------------------------------------- /results/random_10_cities/elastic_nets/iteration-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/elastic_nets/iteration-0.png -------------------------------------------------------------------------------- /results/random_10_cities/elastic_nets/iteration-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/elastic_nets/iteration-100.png -------------------------------------------------------------------------------- /results/random_10_cities/elastic_nets/iteration-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/elastic_nets/iteration-15.png -------------------------------------------------------------------------------- /results/random_10_cities/elastic_nets/iteration-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/elastic_nets/iteration-200.png -------------------------------------------------------------------------------- /results/random_10_cities/elastic_nets/iteration-30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/elastic_nets/iteration-30.png -------------------------------------------------------------------------------- /results/random_10_cities/elastic_nets/iteration-300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/elastic_nets/iteration-300.png -------------------------------------------------------------------------------- /results/random_10_cities/elastic_nets/iteration-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/elastic_nets/iteration-400.png -------------------------------------------------------------------------------- /results/random_10_cities/elastic_nets/iteration-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/elastic_nets/iteration-50.png -------------------------------------------------------------------------------- /results/random_10_cities/elastic_nets/iteration-500.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/elastic_nets/iteration-500.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-0.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-10.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-100.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-110.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-110.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-120.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-130.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-130.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-140.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-150.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-160.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-160.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-170.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-170.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-180.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-190.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-190.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-20.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-200.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-210.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-210.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-220.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-220.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-230.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-230.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-240.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-250.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-250.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-260.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-260.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-270.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-270.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-280.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-280.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-290.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-290.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-30.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-300.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-310.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-320.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-320.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-330.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-330.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-340.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-340.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-350.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-350.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-360.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-360.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-370.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-370.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-380.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-380.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-390.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-390.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-40.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-400.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-410.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-410.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-420.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-420.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-430.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-430.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-440.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-440.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-450.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-450.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-460.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-460.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-470.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-470.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-480.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-480.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-490.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-490.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-50.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-500.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-500.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-60.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-70.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-80.png -------------------------------------------------------------------------------- /results/random_10_cities/hopfield_net/iteration-90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/hopfield_net/iteration-90.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-0.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-10.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-100.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-110.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-110.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-120.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-130.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-130.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-140.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-150.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-160.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-160.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-170.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-170.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-180.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-190.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-190.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-20.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-200.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-210.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-210.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-220.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-220.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-230.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-230.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-240.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-250.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-250.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-260.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-260.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-270.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-270.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-280.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-280.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-290.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-290.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-30.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-300.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-310.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-320.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-320.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-330.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-330.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-340.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-340.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-350.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-350.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-360.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-360.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-370.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-370.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-380.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-380.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-390.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-390.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-40.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-400.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-410.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-410.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-420.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-420.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-430.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-430.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-440.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-440.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-450.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-450.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-460.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-460.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-470.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-470.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-480.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-480.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-490.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-490.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-50.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-60.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-70.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-80.png -------------------------------------------------------------------------------- /results/random_20_cities/elastic_nets/iteration-90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/elastic_nets/iteration-90.png -------------------------------------------------------------------------------- /results/random_30_cities/elastic_nets/iteration-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_30_cities/elastic_nets/iteration-0.png -------------------------------------------------------------------------------- /results/random_30_cities/elastic_nets/iteration-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_30_cities/elastic_nets/iteration-100.png -------------------------------------------------------------------------------- /results/random_30_cities/elastic_nets/iteration-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_30_cities/elastic_nets/iteration-15.png -------------------------------------------------------------------------------- /results/random_30_cities/elastic_nets/iteration-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_30_cities/elastic_nets/iteration-200.png -------------------------------------------------------------------------------- /results/random_30_cities/elastic_nets/iteration-30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_30_cities/elastic_nets/iteration-30.png -------------------------------------------------------------------------------- /results/random_30_cities/elastic_nets/iteration-300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_30_cities/elastic_nets/iteration-300.png -------------------------------------------------------------------------------- /results/random_30_cities/elastic_nets/iteration-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_30_cities/elastic_nets/iteration-400.png -------------------------------------------------------------------------------- /results/random_30_cities/elastic_nets/iteration-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_30_cities/elastic_nets/iteration-50.png -------------------------------------------------------------------------------- /results/random_30_cities/elastic_nets/iteration-500.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_30_cities/elastic_nets/iteration-500.png -------------------------------------------------------------------------------- /results/random_10_cities/self_organizing_map/animation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/self_organizing_map/animation.gif -------------------------------------------------------------------------------- /results/random_10_cities/self_organizing_map/iteration-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/self_organizing_map/iteration-0.png -------------------------------------------------------------------------------- /results/random_20_cities/self_organizing_map/iteration-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/self_organizing_map/iteration-0.png -------------------------------------------------------------------------------- /results/random_30_cities/self_organizing_map/animation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_30_cities/self_organizing_map/animation.gif -------------------------------------------------------------------------------- /results/random_30_cities/self_organizing_map/iteration-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_30_cities/self_organizing_map/iteration-0.png -------------------------------------------------------------------------------- /results/random_10_cities/self_organizing_map/iteration-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/self_organizing_map/iteration-100.png -------------------------------------------------------------------------------- /results/random_10_cities/self_organizing_map/iteration-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/self_organizing_map/iteration-15.png -------------------------------------------------------------------------------- /results/random_10_cities/self_organizing_map/iteration-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/self_organizing_map/iteration-200.png -------------------------------------------------------------------------------- /results/random_10_cities/self_organizing_map/iteration-30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/self_organizing_map/iteration-30.png -------------------------------------------------------------------------------- /results/random_10_cities/self_organizing_map/iteration-300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/self_organizing_map/iteration-300.png -------------------------------------------------------------------------------- /results/random_10_cities/self_organizing_map/iteration-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/self_organizing_map/iteration-400.png -------------------------------------------------------------------------------- /results/random_10_cities/self_organizing_map/iteration-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/self_organizing_map/iteration-50.png -------------------------------------------------------------------------------- /results/random_10_cities/self_organizing_map/iteration-500.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_10_cities/self_organizing_map/iteration-500.png -------------------------------------------------------------------------------- /results/random_20_cities/self_organizing_map/iteration-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/self_organizing_map/iteration-10.png -------------------------------------------------------------------------------- /results/random_20_cities/self_organizing_map/iteration-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/self_organizing_map/iteration-100.png -------------------------------------------------------------------------------- /results/random_20_cities/self_organizing_map/iteration-110.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/self_organizing_map/iteration-110.png -------------------------------------------------------------------------------- /results/random_20_cities/self_organizing_map/iteration-120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/self_organizing_map/iteration-120.png -------------------------------------------------------------------------------- /results/random_20_cities/self_organizing_map/iteration-130.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/self_organizing_map/iteration-130.png -------------------------------------------------------------------------------- /results/random_20_cities/self_organizing_map/iteration-140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/self_organizing_map/iteration-140.png -------------------------------------------------------------------------------- /results/random_20_cities/self_organizing_map/iteration-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/self_organizing_map/iteration-150.png -------------------------------------------------------------------------------- /results/random_20_cities/self_organizing_map/iteration-160.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/self_organizing_map/iteration-160.png -------------------------------------------------------------------------------- /results/random_20_cities/self_organizing_map/iteration-170.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/self_organizing_map/iteration-170.png -------------------------------------------------------------------------------- /results/random_20_cities/self_organizing_map/iteration-180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/self_organizing_map/iteration-180.png -------------------------------------------------------------------------------- /results/random_20_cities/self_organizing_map/iteration-190.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/self_organizing_map/iteration-190.png -------------------------------------------------------------------------------- /results/random_20_cities/self_organizing_map/iteration-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/self_organizing_map/iteration-20.png -------------------------------------------------------------------------------- /results/random_20_cities/self_organizing_map/iteration-30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/self_organizing_map/iteration-30.png -------------------------------------------------------------------------------- /results/random_20_cities/self_organizing_map/iteration-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/self_organizing_map/iteration-40.png -------------------------------------------------------------------------------- /results/random_20_cities/self_organizing_map/iteration-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/self_organizing_map/iteration-50.png -------------------------------------------------------------------------------- /results/random_20_cities/self_organizing_map/iteration-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/self_organizing_map/iteration-60.png -------------------------------------------------------------------------------- /results/random_20_cities/self_organizing_map/iteration-70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/self_organizing_map/iteration-70.png -------------------------------------------------------------------------------- /results/random_20_cities/self_organizing_map/iteration-80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/self_organizing_map/iteration-80.png -------------------------------------------------------------------------------- /results/random_20_cities/self_organizing_map/iteration-90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_20_cities/self_organizing_map/iteration-90.png -------------------------------------------------------------------------------- /results/random_30_cities/self_organizing_map/iteration-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_30_cities/self_organizing_map/iteration-100.png -------------------------------------------------------------------------------- /results/random_30_cities/self_organizing_map/iteration-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_30_cities/self_organizing_map/iteration-15.png -------------------------------------------------------------------------------- /results/random_30_cities/self_organizing_map/iteration-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_30_cities/self_organizing_map/iteration-200.png -------------------------------------------------------------------------------- /results/random_30_cities/self_organizing_map/iteration-30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_30_cities/self_organizing_map/iteration-30.png -------------------------------------------------------------------------------- /results/random_30_cities/self_organizing_map/iteration-300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_30_cities/self_organizing_map/iteration-300.png -------------------------------------------------------------------------------- /results/random_30_cities/self_organizing_map/iteration-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_30_cities/self_organizing_map/iteration-400.png -------------------------------------------------------------------------------- /results/random_30_cities/self_organizing_map/iteration-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_30_cities/self_organizing_map/iteration-50.png -------------------------------------------------------------------------------- /results/random_30_cities/self_organizing_map/iteration-500.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishidur/TSPSolver/HEAD/results/random_30_cities/self_organizing_map/iteration-500.png -------------------------------------------------------------------------------- /run-test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | echo "Starting Mypy, static type checker..." 4 | pipenv run mypy *.py 5 | 6 | echo "Starting Pytest..." 7 | cd tests 8 | pipenv run pytest 9 | cd .. -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: python 2 | python: 3 | - "3.7" # 3.7 development branch 4 | install: 5 | - pip install pipenv 6 | - pipenv install --dev 7 | script: 8 | - sh run-test.sh 9 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "python.pythonPath": ".venv/bin/python", 3 | "python.linting.pylintEnabled": false, 4 | "python.linting.pep8Enabled": false, 5 | "python.linting.enabled": false, 6 | "python.linting.flake8Enabled": true 7 | } -------------------------------------------------------------------------------- /Pipfile: -------------------------------------------------------------------------------- 1 | [[source]] 2 | name = "pypi" 3 | url = "https://pypi.org/simple" 4 | verify_ssl = true 5 | 6 | [dev-packages] 7 | black = "==19.3b0" 8 | pytest = "*" 9 | flake8 = "*" 10 | mypy = "*" 11 | 12 | [packages] 13 | matplotlib = "==3.1.1" 14 | numpy = "==1.17.0" 15 | pandas = "==0.25.0" 16 | 17 | [requires] 18 | python_version = "3.7" 19 | -------------------------------------------------------------------------------- /cities_seeder.py: -------------------------------------------------------------------------------- 1 | import numpy as np # type: ignore 2 | 3 | city_num = 20 4 | file_path = "./coordinates/" 5 | output_file = "random_" + str(city_num) + "_cities.csv" 6 | 7 | if __name__ == "__main__": 8 | # “continuous uniform” distribution random 9 | np_cities = np.random.random((city_num, 2)) 10 | np.savetxt(file_path + output_file, np_cities, delimiter=",") 11 | -------------------------------------------------------------------------------- /util.py: -------------------------------------------------------------------------------- 1 | import os 2 | import config 3 | import numpy as np # type: ignore 4 | from typing import Union, Type 5 | 6 | 7 | def make_directory( 8 | Config: Union[Type[config.ENConfig], Type[config.SOMConfig], Type[config.HNConfig]] 9 | ) -> str: 10 | dir_name = "./results/%s/%s/" % (Config.city_file.replace(".csv", ""), Config.name) 11 | directory = os.path.dirname(dir_name) 12 | os.makedirs(directory, exist_ok=True) 13 | return dir_name 14 | 15 | 16 | def dist(p1: np.array, p2: np.array) -> np.array: 17 | return np.linalg.norm(p1 - p2) 18 | -------------------------------------------------------------------------------- /coordinates/western_sahara.csv: -------------------------------------------------------------------------------- 1 | 20833.3333,17100 2 | 20900,17066.6667 3 | 21300,13016.6667 4 | 21600,14150 5 | 21600,14966.6667 6 | 21600,16500 7 | 22183.3333,13133.3333 8 | 22583.3333,14300 9 | 22683.3333,12716.6667 10 | 23616.6667,15866.6667 11 | 23700,15933.3333 12 | 23883.3333,14533.3333 13 | 24166.6667,13250 14 | 25149.1667,12365.8333 15 | 26133.3333,14500 16 | 26150,10550 17 | 26283.3333,12766.6667 18 | 26433.3333,13433.3333 19 | 26550,13850 20 | 26733.3333,11683.3333 21 | 27026.1111,13051.9444 22 | 27096.1111,13415.8333 23 | 27153.6111,13203.3333 24 | 27166.6667,9833.3333 25 | 27233.3333,10450 26 | 27233.3333,11783.3333 27 | 27266.6667,10383.3333 28 | 27433.3333,12400 29 | 27462.5,12992.2222 -------------------------------------------------------------------------------- /.github/workflows/pythonpackage.yml: -------------------------------------------------------------------------------- 1 | name: Python package 2 | 3 | on: [push] 4 | 5 | jobs: 6 | build: 7 | 8 | runs-on: ubuntu-latest 9 | strategy: 10 | max-parallel: 4 11 | matrix: 12 | python-version: [3.7] 13 | 14 | steps: 15 | - uses: actions/checkout@v1 16 | - name: Set up Python ${{ matrix.python-version }} 17 | uses: actions/setup-python@v1 18 | with: 19 | python-version: ${{ matrix.python-version }} 20 | - name: Install dependencies 21 | run: | 22 | python -m pip install --upgrade pip 23 | pip install pipenv 24 | pipenv install --dev 25 | - name: Test 26 | run: | 27 | sh run-test.sh 28 | -------------------------------------------------------------------------------- /tests/test_util.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | sys.path.append("..") # this required for import script in parent dirctory 4 | import util 5 | import numpy as np # type: ignore 6 | 7 | def test_dist(): 8 | a = np.array([10, 0]) 9 | b = np.array([0, 0]) 10 | assert util.dist(a, b) == 10 11 | a = np.array([0, 10]) 12 | b = np.array([0, 0]) 13 | assert util.dist(a, b) == 10 14 | a = np.array([-10, 0]) 15 | b = np.array([0, 0]) 16 | assert util.dist(a, b) == 10 17 | a = np.array([0, -10]) 18 | b = np.array([0, 0]) 19 | assert util.dist(a, b) == 10 20 | a = np.array([0, 10]) 21 | b = np.array([10, 0]) 22 | assert util.dist(a, b) == np.sqrt(2) * 10 23 | a = np.array([10, 2]) 24 | b = np.array([5, -10]) 25 | assert util.dist(a, b) == 13 26 | -------------------------------------------------------------------------------- /coordinates/random_15_cities.csv: -------------------------------------------------------------------------------- 1 | 7.348809685110162526e-01,9.452110136459908052e-01 2 | 1.731037750684450982e-01,9.017638008237502945e-01 3 | 1.726411926078041947e-02,2.335727195838975812e-01 4 | 8.378794187112538205e-01,4.976525976332529799e-01 5 | 6.616799503963429752e-01,6.249586581228085969e-01 6 | 2.842767783604405185e-02,5.475413209597834729e-01 7 | 5.648773338210315575e-01,2.678258358695910779e-01 8 | 1.372965625379994892e-01,8.640738476657390255e-01 9 | 7.396856366426329821e-01,7.117570613760964005e-01 10 | 2.045024401527697488e-01,5.307074115408186854e-01 11 | 5.885944114569667818e-01,9.080190473635650905e-01 12 | 3.405697682411988891e-01,8.032023318634073927e-02 13 | 5.968205006965936477e-01,2.495191137064256548e-02 14 | 7.861943034203263680e-01,4.110570985777095565e-01 15 | 7.064963679735341007e-01,8.352187759384843702e-02 16 | -------------------------------------------------------------------------------- /coordinates/djibouti.csv: -------------------------------------------------------------------------------- 1 | 11003.6111,42102.5 2 | 11108.6111,42373.8889 3 | 11133.3333,42885.8333 4 | 11155.8333,42712.5 5 | 11183.3333,42933.3333 6 | 11297.5,42853.3333 7 | 11310.2778,42929.4444 8 | 11416.6667,42983.3333 9 | 11423.8889,43000.2778 10 | 11438.3333,42057.2222 11 | 11461.1111,43252.7778 12 | 11485.5556,43187.2222 13 | 11503.0556,42855.2778 14 | 11511.3889,42106.3889 15 | 11522.2222,42841.9444 16 | 11569.4444,43136.6667 17 | 11583.3333,43150 18 | 11595,43148.0556 19 | 11600,43150 20 | 11690.5556,42686.6667 21 | 11715.8333,41836.1111 22 | 11751.1111,42814.4444 23 | 11770.2778,42651.9444 24 | 11785.2778,42884.4444 25 | 11822.7778,42673.6111 26 | 11846.9444,42660.5556 27 | 11963.0556,43290.5556 28 | 11973.0556,43026.1111 29 | 12058.3333,42195.5556 30 | 12149.4444,42477.5 31 | 12286.9444,43355.5556 32 | 12300,42433.3333 33 | 12355.8333,43156.3889 34 | 12363.3333,43189.1667 35 | 12372.7778,42711.3889 36 | 12386.6667,43334.7222 37 | 12421.6667,42895.5556 38 | 12645,42973.3333 -------------------------------------------------------------------------------- /tests/expected_biases.csv: -------------------------------------------------------------------------------- 1 | 20 2 | 20 3 | 20 4 | 20 5 | 20 6 | 20 7 | 20 8 | 20 9 | 20 10 | 20 11 | 20 12 | 20 13 | 20 14 | 20 15 | 20 16 | 20 17 | 20 18 | 20 19 | 20 20 | 20 21 | 20 22 | 20 23 | 20 24 | 20 25 | 20 26 | 20 27 | 20 28 | 20 29 | 20 30 | 20 31 | 20 32 | 20 33 | 20 34 | 20 35 | 20 36 | 20 37 | 20 38 | 20 39 | 20 40 | 20 41 | 20 42 | 20 43 | 20 44 | 20 45 | 20 46 | 20 47 | 20 48 | 20 49 | 20 50 | 20 51 | 20 52 | 20 53 | 20 54 | 20 55 | 20 56 | 20 57 | 20 58 | 20 59 | 20 60 | 20 61 | 20 62 | 20 63 | 20 64 | 20 65 | 20 66 | 20 67 | 20 68 | 20 69 | 20 70 | 20 71 | 20 72 | 20 73 | 20 74 | 20 75 | 20 76 | 20 77 | 20 78 | 20 79 | 20 80 | 20 81 | 20 82 | 20 83 | 20 84 | 20 85 | 20 86 | 20 87 | 20 88 | 20 89 | 20 90 | 20 91 | 20 92 | 20 93 | 20 94 | 20 95 | 20 96 | 20 97 | 20 98 | 20 99 | 20 100 | 20 -------------------------------------------------------------------------------- /function_plot.py: -------------------------------------------------------------------------------- 1 | import elastic_nets as en 2 | import self_organizing_map as som 3 | import numpy as np # type: ignore 4 | import matplotlib.pyplot as plt # type: ignore 5 | 6 | window_size = 5 7 | dpi = 100 8 | 9 | 10 | def plot_en(): 11 | x_min, x_max = 0.0, 1.0 12 | k = 0.2 13 | figsize = (window_size, window_size) 14 | x = np.linspace(x_min, x_max, 1000) 15 | y = en.phi(x, k) 16 | fig = plt.figure(figsize=figsize, dpi=dpi) 17 | plt.plot(x, y) 18 | plt.xlabel("distance") 19 | plt.grid() 20 | plt.show() 21 | 22 | 23 | def plot_som(): 24 | x_min, x_max = -10.0, 10.0 25 | g = 10 26 | figsize = (window_size * 1.618, window_size) 27 | X = np.linspace(x_min, x_max, 1000) 28 | Y = np.array([som.g_func(np.abs(x - 0), x_max * 2, g) for x in X]) 29 | fig = plt.figure(figsize=figsize, dpi=dpi) 30 | plt.plot(X, Y) 31 | plt.xlabel("$|j-{j}^{*}|$") 32 | plt.xticks(np.arange(x_min, x_max + 1, 1)) 33 | plt.grid() 34 | plt.show() 35 | 36 | 37 | if __name__ == "__main__": 38 | # plot_en() 39 | plot_som() 40 | -------------------------------------------------------------------------------- /coordinates/random_20_cities.csv: -------------------------------------------------------------------------------- 1 | 5.088035927137289915e-01,3.700535942788352184e-01 2 | 7.806753157986320302e-01,1.530085829964747957e-01 3 | 7.915084287084082071e-01,6.772828697434707390e-01 4 | 9.559649829178811231e-01,4.077340222018683846e-01 5 | 6.684744949474208386e-02,4.363978878779214421e-01 6 | 7.840284730890645370e-02,5.775620994656497365e-01 7 | 1.834417309172008403e-01,1.391597657646246322e-01 8 | 7.029318669659962993e-01,7.807919437244114080e-01 9 | 1.841214458428122036e-01,5.313524397789857190e-01 10 | 6.475675405946303975e-01,6.214946646857177903e-02 11 | 2.165862375016649466e-01,8.450091365014101852e-01 12 | 4.913820855920184583e-01,5.421654026385502867e-03 13 | 5.611437060931478982e-03,3.778445313393519189e-02 14 | 6.955983506598513166e-01,1.972223340213038467e-01 15 | 5.563952783615412345e-01,8.549801035148001382e-01 16 | 6.406873163332327259e-03,5.088365015328384366e-01 17 | 5.498726822350815668e-01,6.760058456687181305e-01 18 | 4.817135304512893956e-01,7.658071195285937049e-01 19 | 1.755837952635213028e-01,5.017239580152759171e-01 20 | 5.260639648261986601e-01,4.188186057061474843e-01 21 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Ryota Ishidu 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /config.py: -------------------------------------------------------------------------------- 1 | class Files: 2 | path = "./coordinates/" 3 | qatar = "qatar.csv" 4 | western_sahara = "western_sahara.csv" 5 | uruguay = "uruguay.csv" 6 | djibouti = "djibouti.csv" 7 | random_10_cities = "random_10_cities.csv" 8 | random_20_cities = "random_20_cities.csv" 9 | random_30_cities = "random_30_cities.csv" 10 | 11 | 12 | # config 13 | class ENConfig: 14 | name = "elastic_nets" 15 | read_file = True 16 | file_path = Files.path 17 | city_file = Files.random_20_cities 18 | city_num = 100 19 | 20 | 21 | class SOMConfig: 22 | name = "self_organizing_map" 23 | read_file = True 24 | file_path = Files.path 25 | city_file = Files.random_20_cities 26 | city_num = 30 27 | 28 | 29 | class HNConfig: 30 | name = "hopfield_net" 31 | read_file = True 32 | file_path = Files.path 33 | city_file = Files.random_10_cities 34 | city_num = 30 35 | 36 | 37 | class GifMakerConfig: 38 | __path = "./results/" 39 | __problem_set = "random_10_cities/" 40 | __en_path = "elastic_nets/" 41 | __som_path = "self_organizing_map/" 42 | __hn_path = "hopfield_net/" 43 | source_dir = __path + __problem_set + __hn_path 44 | -------------------------------------------------------------------------------- /gif_maker.py: -------------------------------------------------------------------------------- 1 | from config import GifMakerConfig as Config 2 | import matplotlib.pyplot as plt # type: ignore 3 | import matplotlib.animation as animation # type: ignore 4 | import glob 5 | 6 | window_size = 5 7 | dpi = 150 8 | 9 | 10 | def sort_rule(x): 11 | return int(x.split("-")[1].split(".")[0]) 12 | 13 | 14 | if __name__ == "__main__": 15 | source_dir = Config.source_dir 16 | file_names = glob.glob(source_dir + "*.png") 17 | file_names = sorted(file_names, key=sort_rule) 18 | figsize = (window_size, window_size) 19 | fig = plt.figure(figsize=figsize, dpi=dpi) 20 | ax = plt.subplot(1, 1, 1) 21 | ax.spines["right"].set_color("None") 22 | ax.spines["top"].set_color("None") 23 | ax.spines["left"].set_color("None") 24 | ax.spines["bottom"].set_color("None") 25 | ax.tick_params(axis="x", which="both", top="off", bottom="off", labelbottom="off") 26 | ax.tick_params(axis="y", which="both", left="off", right="off", labelleft="off") 27 | ax.get_xaxis().set_visible(False) 28 | ax.get_yaxis().set_visible(False) 29 | ims = [] 30 | for file_name in file_names: 31 | img = plt.imread(file_name) 32 | im = plt.imshow(img, interpolation="spline36") 33 | ims.append([im]) 34 | 35 | ani = animation.ArtistAnimation(fig, ims) 36 | # ani.save(source_dir + 'animation.gif', writer='imagemagick') 37 | plt.show() 38 | -------------------------------------------------------------------------------- /coordinates/random_30_cities.csv: -------------------------------------------------------------------------------- 1 | 9.169822247998771214e-02,3.207006166679233772e-01 2 | 8.816250763393873591e-02,8.462065441999432336e-01 3 | 5.508061147886390563e-01,3.567584710875529863e-01 4 | 8.877672377953942373e-01,2.256179802841259407e-01 5 | 9.890329681707373810e-01,5.865444896397583596e-01 6 | 3.707340231341117454e-01,1.230368856533581301e-01 7 | 7.181325153168816033e-01,3.296047441006876300e-01 8 | 8.280818075435866232e-01,2.627537884769777232e-01 9 | 4.354726571484668352e-02,1.509596798598189515e-02 10 | 6.733594251143811826e-01,3.716221578607731280e-01 11 | 4.933381772169092017e-01,7.523589037880938912e-01 12 | 4.513425242815434224e-01,2.310333785794728145e-01 13 | 8.216374596871918179e-01,9.976260396861924562e-01 14 | 1.410482882251750114e-01,7.058084639573448671e-01 15 | 2.061627359943505322e-01,9.946011427477515765e-01 16 | 1.464404283240894333e-02,4.636621072882448624e-01 17 | 8.935733890059548434e-01,9.402171407127704050e-01 18 | 5.893662944706089535e-01,7.336391276906503167e-01 19 | 2.342511497034395207e-01,8.009031493012108704e-01 20 | 4.873276669737561795e-01,9.781501460057170361e-01 21 | 8.570477173358193035e-01,9.636476788756986878e-01 22 | 2.949831342456409322e-01,1.507554454383921438e-01 23 | 8.254007639886810077e-01,7.931242056884703073e-01 24 | 1.592975534674266891e-01,9.109837743556231660e-01 25 | 4.426289778749518122e-01,9.473894340588667751e-01 26 | 4.739910867605947598e-01,7.740860258467249233e-01 27 | 1.929064568361660292e-02,1.579550078446236849e-01 28 | 3.394992043992415276e-01,6.585711580041164748e-02 29 | 4.025083433688869672e-02,6.971797323281118119e-01 30 | 4.437669607079981482e-01,6.454742080304433083e-01 31 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TSPSolver 2 | Neural Network approaches for the Traveling Salesman Problem. 3 | - Hopfield Network 4 | ![Hopfield net](https://github.com/ishidur/TSPSolver/blob/develop/results/random_10_cities/hopfield_net/animation.gif) 5 | - Elastic Nets 6 | ![Elastic nets](https://github.com/ishidur/TSPSolver/blob/develop/results/djibouti/elastic_nets/animation.gif) 7 | - Self-organizing map 8 | ![Self-organizing map](https://github.com/ishidur/TSPSolver/blob/develop/results/djibouti/self_organizing_map/animation.gif) 9 | 10 | # Environment 11 | |package|version| 12 | |:--|:--:| 13 | |python|3.7| 14 | |matplotlib|3.1.1| 15 | |numpy|1.17.0| 16 | |pandas|0.25.0| 17 | |imagemagick (optional)|7.0.7| 18 | 19 | ## Install with [Pipenv](https://docs.pipenv.org) 20 | This project is using Pipenv, popular package manager in Pyhton. 21 | In the project directory, run the following commands: 22 | ``` 23 | pip install pipenv 24 | pipenv install 25 | ``` 26 | If you are contributer, please install with `--dev` flag 27 | ``` 28 | pipenv install --dev 29 | ``` 30 | 31 | ## (Optional) Install [imagemagick](https://www.imagemagick.org/script/index.php) 32 | If you want to save result as gif, imagemagick is required. 33 | ### Install with [Homebrew](https://brew.sh/index.html) (for macOS) 34 | Run the following command: 35 | ``` 36 | brew install imagemagick 37 | ``` 38 | ### Install with [Chocolatey](https://chocolatey.org/about) (for Windows) 39 | Run the following command: 40 | ``` 41 | choco install imagemagick 42 | ``` 43 | ### Install from source and binary distributions 44 | Check this out 45 | [source](https://www.imagemagick.org/script/install-source.php) 46 | [binary distributions](https://www.imagemagick.org/script/download.php) 47 | -------------------------------------------------------------------------------- /tests/test_hopfield_network.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | sys.path.append("..") # this required for import script in parent dirctory 4 | import hopfield_network as hn 5 | import numpy as np # type: ignore 6 | 7 | ############################################################################# 8 | # Here are unit tests 9 | ############################################################################# 10 | def test_sigmoid(): 11 | a = np.array([0, 1000, -1000]) 12 | a_0 = 0 13 | a_1 = 1000 14 | a_2 = -1000 15 | b = hn.sigmoid(a) 16 | b_0 = hn.sigmoid(a_0) 17 | b_1 = hn.sigmoid(a_1) 18 | b_2 = hn.sigmoid(a_2) 19 | assert (b == np.array([b_0, b_1, b_2])).all() 20 | 21 | 22 | def test_kronecker_delta(): 23 | assert hn.kronecker_delta(0, 0) == 1.0 24 | assert hn.kronecker_delta(0, 1) == 0.0 25 | assert hn.kronecker_delta(1, 0) == 0.0 26 | assert hn.kronecker_delta(1, 1) == 1.0 27 | 28 | 29 | def test_calc_weight_matrix(): 30 | # Set same contidions to TSPHopfieldEigen, C++ Project 31 | hn.param_a = 1.0 32 | hn.param_b = 1.0 33 | hn.param_c = 2.0 34 | hn.param_d = 1.0 35 | # fmt: off 36 | cities = [ 37 | [0.5, 0.9], 38 | [0.2, 0.8], 39 | [0.15, 0.25], 40 | [0.4, 0.5], 41 | [0.25, 0.1], 42 | [0.65, 0.3], 43 | [0.6, 0.3], 44 | [0.9, 0.35], 45 | [0.9, 0.7], 46 | [0.7, 0.5], 47 | ] 48 | # fmt: on 49 | city_arr = np.array(cities) 50 | res = hn.calc_weight_matrix(city_arr) 51 | expected_array_size = len(cities) ** 2 52 | assert res.shape == (expected_array_size, expected_array_size) 53 | expected_weight = np.loadtxt("./expected_weights.csv", delimiter=",") 54 | assert res.shape == expected_weight.shape 55 | assert (np.round(res, decimals=5) == np.round(expected_weight, decimals=5)).all() 56 | # for i in range(expected_array_size): 57 | # for j in range(expected_array_size): 58 | # assert np.round(res[i][j], decimals=5) == np.round( 59 | # expected_weight[i][j], decimals=5 60 | # ) 61 | 62 | 63 | def test_calc_bias(): 64 | # Set same contidions to TSPHopfieldEigen, C++ Project 65 | hn.param_c = 2.0 66 | # fmt: off 67 | cities = [ 68 | [0.5, 0.9], 69 | [0.2, 0.8], 70 | [0.15, 0.25], 71 | [0.4, 0.5], 72 | [0.25, 0.1], 73 | [0.65, 0.3], 74 | [0.6, 0.3], 75 | [0.9, 0.35], 76 | [0.9, 0.7], 77 | [0.7, 0.5], 78 | ] 79 | # fmt: on 80 | city_arr = np.array(cities) 81 | res = hn.calc_bias(city_arr) 82 | expected_array_size = len(cities) ** 2 83 | assert res.shape == (expected_array_size,) 84 | expected_biases = np.loadtxt("./expected_biases.csv", delimiter=",") 85 | assert res.shape == expected_biases.shape 86 | assert (np.round(res, decimals=5) == np.round(expected_biases, decimals=5)).all() 87 | 88 | -------------------------------------------------------------------------------- /self_organizing_map.py: -------------------------------------------------------------------------------- 1 | from config import SOMConfig as Config 2 | import numpy as np # type: ignore 3 | import matplotlib.pyplot as plt # type: ignore 4 | import util 5 | 6 | window_size = 5 7 | dpi = 100 8 | node_radius = 0.1 9 | # b_init = 10 10 | # b_growth = 1.005 11 | # b_ceil = 1000 12 | 13 | b_init = 10.0 14 | alpha = 0.03 15 | # b_ceil = 1000 16 | # mu = 1.0 17 | mu = 0.6 18 | iter_lim = 200 19 | record_moment = np.arange(0, iter_lim, 10) 20 | record = True 21 | 22 | 23 | # def g_func(djj_star, l, beta): 24 | # if djj_star < l: 25 | # return (1 - djj_star / l)**beta 26 | # return 0.0 27 | 28 | 29 | def g_func(djj_star: int, l: float, g: float) -> float: 30 | if djj_star < l: 31 | return np.exp(-djj_star ** 2 / g ** 2) 32 | return 0.0 33 | 34 | 35 | def calc_champ_node(band_array: np.array, city: np.array) -> int: 36 | dist_array = np.array([util.dist(node, city) for node in band_array]) 37 | # find min value index 38 | return dist_array.argmin() 39 | 40 | 41 | def update_node(node: np.array, city: np.array, djj_star: int, beta: float) -> np.array: 42 | delta_node = mu * g_func(djj_star, node_num * 0.2, beta) * (city - node) 43 | return delta_node 44 | 45 | 46 | def update_band( 47 | band_array: np.array, city: np.array, j_star: int, beta: float 48 | ) -> np.array: 49 | new_band_array = band_array.copy() 50 | for j in range(node_num): 51 | djj_star = np.amin([np.abs(j - j_star), node_num - np.abs(j - j_star)]) 52 | new_band_array[j, :] += update_node(band_array[j, :], city, djj_star, beta) 53 | return new_band_array 54 | 55 | 56 | def som_begin(band_array: np.array, city_array: np.array): 57 | beta = b_init 58 | np.random.shuffle(city_array) 59 | if record: 60 | dir_name = util.make_directory(Config) 61 | for i in range(iter_lim): 62 | if i in record_moment: 63 | filename = "iteration-" + str(i) + ".png" 64 | file_path = dir_name + filename 65 | plt.savefig(file_path) 66 | picked_city = city_array[i % city_num, :] 67 | j_star = calc_champ_node(band_array, picked_city) 68 | band_array = update_band(band_array, picked_city, j_star, beta) 69 | circle_band = np.vstack((band_array, band_array[0, :])) 70 | plt.title("iteration=" + str(i + 1)) 71 | elastic_band.set_data(circle_band[:, 0], circle_band[:, 1]) 72 | # beta = np.amin([b_ceil, beta * b_growth]) 73 | beta = (1 - alpha) * beta 74 | plt.pause(0.001) 75 | else: 76 | i = 1 77 | while plt.get_fignums(): 78 | picked_city = city_array[i % city_num, :] 79 | j_star = calc_champ_node(band_array, picked_city) 80 | band_array = update_band(band_array, picked_city, j_star, beta) 81 | circle_band = np.vstack((band_array, band_array[0, :])) 82 | plt.title("iteration=" + str(i)) 83 | elastic_band.set_data(circle_band[:, 0], circle_band[:, 1]) 84 | i += 1 85 | # beta = np.amin([b_ceil, beta * b_growth]) 86 | beta = (1 - alpha) * beta 87 | plt.pause(0.001) 88 | 89 | 90 | if __name__ == "__main__": 91 | if Config.read_file: 92 | np_cities = np.genfromtxt(Config.file_path + Config.city_file, delimiter=",") 93 | city_num = np_cities.shape[0] 94 | width_x = np.max(np_cities[:, 0]) - np.min(np_cities[:, 0]) 95 | width_y = np.max(np_cities[:, 1]) - np.min(np_cities[:, 1]) 96 | width = np.amax([width_x, width_y]) 97 | np_cities[:, 0] -= np.min(np_cities[:, 0]) 98 | np_cities[:, 0] /= width 99 | np_cities[:, 1] -= np.min(np_cities[:, 1]) 100 | np_cities[:, 1] /= width 101 | center_x = np.average(np_cities[:, 0]) 102 | center_y = np.average(np_cities[:, 1]) 103 | figsize = (window_size, window_size) 104 | else: 105 | city_num = Config.city_num 106 | # “continuous uniform” distribution random 107 | np_cities = np.random.random((city_num, 2)) 108 | figsize = (window_size, window_size) 109 | center_x = 0.5 110 | center_y = 0.5 111 | 112 | node_num = int(city_num * 2) 113 | angles = np.linspace(0, 2 * np.pi, node_num) 114 | np_band = np.array( 115 | [ 116 | node_radius * np.sin(angles) + center_x, 117 | node_radius * np.cos(angles) + center_y, 118 | ] 119 | ).transpose() 120 | fig = plt.figure(figsize=figsize, dpi=dpi) 121 | plt.scatter(np_cities[:, 0], np_cities[:, 1], s=20, marker="+") 122 | elastic_band, = plt.plot(np_band[:, 0], np_band[:, 1]) 123 | plt.title("iteration=" + str(0)) 124 | plt.grid() 125 | plt.pause(0.001) 126 | som_begin(np_band, np_cities) 127 | -------------------------------------------------------------------------------- /coordinates/qatar.csv: -------------------------------------------------------------------------------- 1 | 50840,24748.3333 2 | 51211.9444,24758.8889 3 | 51394.7222,24827.2222 4 | 51175,24904.4444 5 | 51548.8889,24996.1111 6 | 51039.4444,25010 7 | 51275.2778,25030.8333 8 | 51077.5,25067.7778 9 | 51516.6667,25100 10 | 51521.6667,25103.3333 11 | 51218.3333,25121.9444 12 | 51537.7778,25150.8333 13 | 51163.6111,25158.3333 14 | 51220.8333,25162.2222 15 | 51606.9444,25167.7778 16 | 51086.3889,25168.8889 17 | 51269.4444,25173.8889 18 | 51394.1667,25210.8333 19 | 51619.1667,25211.3889 20 | 50807.2222,25214.1667 21 | 51378.8889,25214.4444 22 | 51451.6667,25223.3333 23 | 51174.4444,25224.1667 24 | 51333.3333,25233.3333 25 | 51203.0556,25234.1667 26 | 51330,25235.5556 27 | 51495.5556,25235.5556 28 | 51428.8889,25242.7778 29 | 51452.5,25243.0556 30 | 51559.1667,25252.5 31 | 51535.2778,25253.8889 32 | 51549.7222,25253.8889 33 | 51398.8889,25256.9444 34 | 51516.3889,25263.6111 35 | 51545.2778,25265.8333 36 | 50969.1667,25266.6667 37 | 51483.3333,25266.6667 38 | 51532.7778,25270.5556 39 | 51505.8333,25270.8333 40 | 51523.0556,25270.8333 41 | 51533.6111,25275.8333 42 | 51547.7778,25277.2222 43 | 51525.5556,25278.3333 44 | 51541.3889,25278.3333 45 | 51445.5556,25279.1667 46 | 51535,25281.1111 47 | 51512.5,25281.3889 48 | 51533.3333,25283.3333 49 | 51546.6667,25283.6111 50 | 51555.2778,25284.7222 51 | 51504.1667,25286.1111 52 | 51534.1667,25286.1111 53 | 51533.3333,25286.6667 54 | 51537.7778,25287.5 55 | 51546.6667,25288.0556 56 | 51528.3333,25290.8333 57 | 51424.4444,25291.9444 58 | 51520.8333,25292.5 59 | 51001.6667,25298.6111 60 | 51394.4444,25300.8333 61 | 51507.7778,25306.9444 62 | 51003.0556,25311.9444 63 | 50883.3333,25313.8889 64 | 51438.6111,25315.2778 65 | 50766.6667,25316.6667 66 | 51495.5556,25320.5556 67 | 51507.7778,25322.5 68 | 51470,25325.2778 69 | 51350.2778,25326.6667 70 | 51425,25337.5 71 | 51173.3333,25339.1667 72 | 51293.6111,25340.5556 73 | 51507.5,25341.9444 74 | 51333.6111,25358.8889 75 | 51281.1111,25363.6111 76 | 51226.3889,25368.6111 77 | 51436.6667,25374.4444 78 | 51294.7222,25377.7778 79 | 51422.5,25396.9444 80 | 51183.3333,25400 81 | 51425,25400 82 | 51073.0556,25404.7222 83 | 51403.8889,25416.9444 84 | 51457.7778,25416.9444 85 | 50793.6111,25419.4444 86 | 50785.8333,25429.7222 87 | 51220,25433.3333 88 | 51378.0556,25440.8333 89 | 50958.3333,25444.4444 90 | 50925,25451.3889 91 | 51316.6667,25459.1667 92 | 51397.5,25469.7222 93 | 51362.5,25478.0556 94 | 50938.8889,25480.5556 95 | 51383.3333,25483.3333 96 | 51373.6111,25490.5556 97 | 51400.2778,25492.2222 98 | 50846.6667,25495 99 | 50965.2778,25495 100 | 51485.2778,25497.5 101 | 50980.5556,25500.8333 102 | 51242.2222,25510.5556 103 | 51304.4444,25531.9444 104 | 50977.2222,25533.3333 105 | 51408.3333,25538.8889 106 | 51387.5,25545.8333 107 | 51431.9444,25549.7222 108 | 51433.3333,25550 109 | 51158.6111,25560.2778 110 | 51484.7222,25566.9444 111 | 50958.8889,25567.5 112 | 51486.3889,25574.7222 113 | 51151.3889,25585.5556 114 | 51092.2222,25609.4444 115 | 51475.2778,25610.2778 116 | 51454.4444,25622.5 117 | 51450,25645.8333 118 | 51372.2222,25650 119 | 51174.4444,25666.9444 120 | 51505.8333,25683.8889 121 | 51468.8889,25686.3889 122 | 51260.8333,25696.1111 123 | 51584.7222,25700.8333 124 | 51591.6667,25708.3333 125 | 51050,25716.6667 126 | 51057.7778,25717.5 127 | 51004.1667,25723.0556 128 | 51547.5,25734.7222 129 | 51449.1667,25751.1111 130 | 50920.8333,25751.9444 131 | 51395.8333,25758.3333 132 | 51019.7222,25765.2778 133 | 51483.3333,25772.2222 134 | 51023.0556,25775.8333 135 | 51449.7222,25779.1667 136 | 51409.4444,25793.3333 137 | 51060.5556,25808.3333 138 | 51133.3333,25816.6667 139 | 51152.5,25823.6111 140 | 51043.8889,25826.6667 141 | 51245.2778,25829.7222 142 | 51072.2222,25833.3333 143 | 51465.2778,25839.1667 144 | 51205.8333,25847.7778 145 | 51033.3333,25850 146 | 51083.3333,25856.6667 147 | 51298.8889,25857.5 148 | 51441.3889,25857.5 149 | 51066.6667,25866.6667 150 | 51205.5556,25867.7778 151 | 51354.7222,25871.9444 152 | 51258.3333,25872.5 153 | 51221.3889,25880.8333 154 | 51185.2778,25883.0556 155 | 51386.3889,25888.0556 156 | 51000,25900 157 | 51201.6667,25904.1667 158 | 51337.5,25928.3333 159 | 51313.3333,25937.5 160 | 51456.3889,25944.7222 161 | 51066.6667,25950 162 | 51349.7222,25951.6667 163 | 51075.2778,25957.7778 164 | 51099.4444,25958.3333 165 | 51283.3333,25966.6667 166 | 51400,25983.3333 167 | 51328.0556,25983.6111 168 | 51294.4444,26000.2778 169 | 51083.6111,26008.6111 170 | 51333.3333,26016.6667 171 | 51366.9444,26021.6667 172 | 51116.6667,26033.3333 173 | 51166.6667,26033.3333 174 | 51163.8889,26033.6111 175 | 51200.2778,26033.6111 176 | 51056.9444,26048.8889 177 | 51250,26050 178 | 51297.5,26050.2778 179 | 51135.8333,26050.5556 180 | 51316.1111,26055 181 | 51258.6111,26067.2222 182 | 51083.6111,26074.7222 183 | 51166.9444,26076.6667 184 | 51222.2222,26077.2222 185 | 51361.6667,26078.0556 186 | 51147.2222,26083.6111 187 | 51161.1111,26099.7222 188 | 51244.7222,26108.0556 189 | 51216.6667,26116.6667 190 | 51169.1667,26123.6111 191 | 51222.7778,26123.6111 192 | 51216.6667,26133.3333 193 | 51300,26133.3333 194 | 51108.0556,26150.2778 195 | -------------------------------------------------------------------------------- /elastic_nets.py: -------------------------------------------------------------------------------- 1 | from config import ENConfig as Config 2 | import numpy as np # type: ignore 3 | import matplotlib.pyplot as plt # type: ignore 4 | import util 5 | 6 | window_size = 5 7 | dpi = 100 8 | node_radius = 0.1 9 | k_init = 0.2 10 | k_decay = 0.99 11 | k_bottom = 0.01 12 | alpha = 0.2 13 | beta = 2.0 14 | iter_lim = 500 15 | record_moment = np.arange(0, iter_lim, 10) 16 | record = True 17 | 18 | 19 | def phi(distance: np.array, k: float) -> np.array: 20 | return np.exp(-distance ** 2 / (2 * k) ** 2) 21 | 22 | 23 | def calc_dist_matrix(band_array: np.array, city_array: np.array) -> np.array: 24 | dist_matrix = np.array( 25 | [[util.dist(node, city) for node in band_array] for city in city_array] 26 | ) 27 | return dist_matrix 28 | 29 | 30 | def calc_weight_matrix( 31 | band_array: np.array, city_array: np.array, k: float 32 | ) -> np.array: 33 | dist_matrix = calc_dist_matrix(band_array, city_array) 34 | weight_matrix = phi(dist_matrix, k) 35 | for city_i in range(city_num): 36 | sum = np.sum(weight_matrix[city_i, :]) 37 | weight_matrix[city_i, :] /= sum 38 | return weight_matrix 39 | 40 | 41 | def update_node( 42 | index: int, band_array: np.array, city_array: np.array, weights: np.array, k: float 43 | ) -> np.array: 44 | back_i = (index - 1) % node_num 45 | forward_i = (index + 1) % node_num 46 | attraction_force = np.zeros(2) 47 | for city_i in range(city_num): 48 | attraction_force += weights[city_i, index] * ( 49 | city_array[city_i, :] - band_array[index, :] 50 | ) 51 | delta_node = alpha * attraction_force + beta * k * ( 52 | band_array[forward_i, :] - 2 * band_array[index, :] + band_array[back_i, :] 53 | ) 54 | return delta_node 55 | 56 | 57 | def update_band( 58 | band_array: np.array, city_array: np.array, weights: np.array, k: float 59 | ) -> np.array: 60 | new_band_array = band_array.copy() 61 | for i in range(node_num): 62 | new_band_array[i, :] += update_node(i, band_array, city_array, weights, k) 63 | return new_band_array 64 | 65 | 66 | def en_begin(band_array: np.array, city_array: np.array): 67 | k = k_init 68 | if record: 69 | dir_name = util.make_directory(Config) 70 | for i in range(iter_lim): 71 | if i in record_moment: 72 | filename = "iteration-" + str(i) + ".png" 73 | file_path = dir_name + filename 74 | plt.savefig(file_path) 75 | k = np.amax([k_bottom, k * k_decay]) 76 | weights = calc_weight_matrix(band_array, city_array, k) 77 | band_array = update_band(band_array, city_array, weights, k) 78 | circle_band = np.vstack((band_array, band_array[0, :])) 79 | plt.title("iteration=" + str(i + 1)) 80 | elastic_band.set_data(circle_band[:, 0], circle_band[:, 1]) 81 | plt.pause(0.001) 82 | else: 83 | i = 1 84 | while plt.get_fignums(): 85 | k = np.amax([0.01, k * k_decay]) 86 | weights = calc_weight_matrix(band_array, city_array, k) 87 | band_array = update_band(band_array, city_array, weights, k) 88 | circle_band = np.vstack((band_array, band_array[0, :])) 89 | plt.title("iteration=" + str(i)) 90 | elastic_band.set_data(circle_band[:, 0], circle_band[:, 1]) 91 | i += 1 92 | plt.pause(0.001) 93 | 94 | 95 | if __name__ == "__main__": 96 | if Config.read_file: 97 | np_cities = np.genfromtxt(Config.file_path + Config.city_file, delimiter=",") 98 | city_num = np_cities.shape[0] 99 | width_x = np.max(np_cities[:, 0]) - np.min(np_cities[:, 0]) 100 | width_y = np.max(np_cities[:, 1]) - np.min(np_cities[:, 1]) 101 | width = np.amax([width_x, width_y]) 102 | np_cities[:, 0] -= np.min(np_cities[:, 0]) 103 | np_cities[:, 0] /= width 104 | np_cities[:, 1] -= np.min(np_cities[:, 1]) 105 | np_cities[:, 1] /= width 106 | center_x = np.average(np_cities[:, 0]) 107 | center_y = np.average(np_cities[:, 1]) 108 | figsize = (window_size, window_size) 109 | else: 110 | city_num = Config.city_num 111 | # “continuous uniform” distribution random 112 | np_cities = np.random.random((city_num, 2)) 113 | center_x = 0.5 114 | center_y = 0.5 115 | figsize = (window_size, window_size) 116 | 117 | node_num = int(city_num * 2.5 + 0.5) 118 | angles = np.linspace(0, 2 * np.pi, node_num) 119 | np_band = np.array( 120 | [ 121 | node_radius * np.sin(angles) + center_x, 122 | node_radius * np.cos(angles) + center_y, 123 | ] 124 | ).transpose() 125 | fig = plt.figure(figsize=figsize, dpi=dpi) 126 | plt.scatter(np_cities[:, 0], np_cities[:, 1], s=20, marker="+") 127 | elastic_band, = plt.plot(np_band[:, 0], np_band[:, 1]) 128 | plt.title("iteration=" + str(0)) 129 | plt.grid() 130 | plt.pause(0.001) 131 | en_begin(np_band, np_cities) 132 | -------------------------------------------------------------------------------- /hopfield_network.py: -------------------------------------------------------------------------------- 1 | from config import HNConfig as Config 2 | import numpy as np # type: ignore 3 | from matplotlib import pyplot as plt # type: ignore 4 | from matplotlib import cm # type: ignore 5 | from matplotlib import colors # type: ignore 6 | import pandas as pd # type: ignore 7 | import util 8 | 9 | window_size = 5 10 | dpi = 100 11 | iter_lim = 1000 12 | record_moment = np.arange(0, iter_lim, 10) 13 | record = True 14 | delta_t = 0.01 15 | noise = 0.001 16 | u_0 = 0.02 17 | param_a = 1.0 18 | param_b = 1.0 19 | param_c = 2.0 20 | param_d = 1.0 21 | 22 | 23 | @np.vectorize 24 | def sigmoid(input: float) -> float: 25 | sigmoid_range = 34.538776394910684 26 | if input <= -sigmoid_range: 27 | return 1e-15 28 | if input >= sigmoid_range: 29 | return 1.0 - 1e-15 30 | return 1.0 / (1.0 + np.exp(-input / u_0)) 31 | 32 | 33 | def kronecker_delta(i: int, j: int) -> float: 34 | if i == j: 35 | return 1.0 36 | return 0.0 37 | 38 | 39 | def calc_weight_matrix(city_array: np.array) -> np.array: 40 | city_num: int = city_array.shape[0] 41 | n: int = city_num ** 2 42 | tmp: np.array = np.zeros((n, n)) 43 | for s0 in range(n): 44 | x: int = int(s0 / city_num) 45 | i: int = s0 % city_num 46 | for s1 in range(n): 47 | y: int = int(s1 / city_num) 48 | j: int = s1 % city_num 49 | dxy: float = util.dist(city_array[x, :], city_array[y, :]) 50 | tmp[s0, s1] = ( 51 | -param_a * kronecker_delta(x, y) * (1.0 - kronecker_delta(i, j)) 52 | - param_b * kronecker_delta(i, j) * (1.0 - kronecker_delta(x, y)) 53 | - param_c 54 | - param_d 55 | * dxy 56 | * ( 57 | kronecker_delta(j, (i - 1) % city_num) 58 | + kronecker_delta(j, (i + 1) % city_num) 59 | ) 60 | ) 61 | return tmp 62 | 63 | 64 | def calc_bias(city_array: np.array) -> np.array: 65 | city_num: int = city_array.shape[0] 66 | n: int = city_num ** 2 67 | tmp: np.array = param_c * city_num * np.ones(n) 68 | return tmp 69 | 70 | 71 | def update_inner_vals( 72 | nodes_array: np.matrix, 73 | inner_vals: np.matrix, 74 | weight_matrix: np.matrix, 75 | biases: np.matrix, 76 | ) -> np.matrix: 77 | tau = 1.0 78 | asdf: np.matrix = np.matmul(weight_matrix, nodes_array) 79 | delta: np.matrix = (-inner_vals / tau + asdf + biases) * delta_t 80 | return inner_vals + delta 81 | 82 | 83 | def hp_begin( 84 | inner_vals_array: np.matrix, 85 | nodes_array: np.matrix, 86 | weights_matrix: np.matrix, 87 | biases_array: np.matrix, 88 | ) -> None: 89 | if record: 90 | dir_name: str = util.make_directory(Config) 91 | for i in range(iter_lim): 92 | if i in record_moment: 93 | filename: str = "iteration-" + str(i) + ".png" 94 | file_path: str = dir_name + filename 95 | plt.savefig(file_path) 96 | inner_vals_array = update_inner_vals( 97 | nodes_array, inner_vals_array, weights_matrix, biases_array 98 | ) 99 | nodes_array = sigmoid(inner_vals_array) 100 | plt.title("iteration=" + str(i + 1)) 101 | mat_visual.set_data(np.reshape(nodes_array, (city_num, city_num))) 102 | plt.pause(0.0001) 103 | else: 104 | i = 1 105 | # while plt.get_fignums(): 106 | # inner_vals_array = update_inner_vals(nodes_array, inner_vals_array, weights_matrix, biases_array) 107 | # nodes_array = sigmoid(inner_vals_array) 108 | # plt.title("iteration=" + str(i)) 109 | # mat_visual.set_data(np.reshape(nodes_array, (city_num, city_num))) 110 | # i += 1 111 | # plt.pause(.01) 112 | while plt.get_fignums(): 113 | # print(nodes_array.shape, inner_vals_array.shape, weights_matrix.shape, biases_array.shape) 114 | inner_vals_array = update_inner_vals( 115 | nodes_array, inner_vals_array, weights_matrix, biases_array 116 | ) 117 | nodes_array = sigmoid(inner_vals_array) 118 | plt.title("iteration=" + str(i)) 119 | mat_visual.set_data(np.reshape(nodes_array, (city_num, city_num))) 120 | i += 1 121 | plt.pause(0.0001) 122 | 123 | 124 | if __name__ == "__main__": 125 | if Config.read_file: 126 | np_cities = np.genfromtxt(Config.file_path + Config.city_file, delimiter=",") 127 | city_num = np_cities.shape[0] 128 | # width_x = (np.max(np_cities[:, 0]) - np.min(np_cities[:, 0])) 129 | # width_y = (np.max(np_cities[:, 1]) - np.min(np_cities[:, 1])) 130 | # width = np.amax([width_x, width_y]) 131 | # np_cities[:, 0] -= np.min(np_cities[:, 0]) 132 | # np_cities[:, 0] /= width 133 | # np_cities[:, 1] -= np.min(np_cities[:, 1]) 134 | # np_cities[:, 1] /= width 135 | # center_x = np.average(np_cities[:, 0]) 136 | # center_y = np.average(np_cities[:, 1]) 137 | figsize = (window_size, window_size) 138 | else: 139 | city_num = Config.city_num 140 | # “continuous uniform” distribution random 141 | np_cities = np.random.random((city_num, 2)) 142 | center_x = 0.5 143 | center_y = 0.5 144 | figsize = (window_size, window_size) 145 | inner_vals = np.matrix((np.random.random((city_num ** 2)) - 0.5) * noise).T 146 | nodes = np.matrix(sigmoid(inner_vals)) 147 | weights = np.matrix(calc_weight_matrix(np_cities)) 148 | df = pd.DataFrame(weights) 149 | df.to_csv("weigths.csv", header=False, index=False) 150 | biases = np.matrix(calc_bias(np_cities)).T 151 | fig = plt.figure(figsize=figsize, dpi=dpi) 152 | mat_visual = plt.matshow( 153 | np.reshape(nodes, (city_num, city_num)), 154 | fignum=0, 155 | cmap=cm.Greys, 156 | norm=colors.Normalize(vmin=0.0, vmax=1.0), 157 | ) 158 | fig.colorbar(mat_visual) 159 | plt.title("iteration=" + str(0)) 160 | plt.pause(0.0001) 161 | hp_begin(inner_vals, nodes, weights, biases) 162 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | 3 | #added 4 | .idea/ 5 | .DS_Store 6 | 7 | ### Python template 8 | # Byte-compiled / optimized / DLL files 9 | __pycache__/ 10 | *.py[cod] 11 | *$py.class 12 | 13 | # C extensions 14 | *.so 15 | 16 | # Distribution / packaging 17 | .Python 18 | build/ 19 | develop-eggs/ 20 | dist/ 21 | downloads/ 22 | eggs/ 23 | .eggs/ 24 | lib/ 25 | lib64/ 26 | parts/ 27 | sdist/ 28 | var/ 29 | wheels/ 30 | *.egg-info/ 31 | .installed.cfg 32 | *.egg 33 | MANIFEST 34 | 35 | # PyInstaller 36 | # Usually these files are written by a python script from a template 37 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 38 | *.manifest 39 | *.spec 40 | 41 | # Installer logs 42 | pip-log.txt 43 | pip-delete-this-directory.txt 44 | 45 | # Unit test / coverage reports 46 | htmlcov/ 47 | .tox/ 48 | .coverage 49 | .coverage.* 50 | .cache 51 | nosetests.xml 52 | coverage.xml 53 | *.cover 54 | .hypothesis/ 55 | 56 | # Translations 57 | *.mo 58 | *.pot 59 | 60 | # Django stuff: 61 | *.log 62 | .static_storage/ 63 | .media/ 64 | local_settings.py 65 | 66 | # Flask stuff: 67 | instance/ 68 | .webassets-cache 69 | 70 | # Scrapy stuff: 71 | .scrapy 72 | 73 | # Sphinx documentation 74 | docs/_build/ 75 | 76 | # PyBuilder 77 | target/ 78 | 79 | # Jupyter Notebook 80 | .ipynb_checkpoints 81 | 82 | # pyenv 83 | .python-version 84 | 85 | # celery beat schedule file 86 | celerybeat-schedule 87 | 88 | # SageMath parsed files 89 | *.sage.py 90 | # Environments 91 | .env 92 | .venv 93 | env/ 94 | venv/ 95 | ENV/ 96 | env.bak/ 97 | venv.bak/ 98 | 99 | # Spyder project settings 100 | .spyderproject 101 | .spyproject 102 | 103 | # Rope project settings 104 | .ropeproject 105 | 106 | # mkdocs documentation 107 | /site 108 | 109 | # mypy 110 | .mypy_cache/ 111 | 112 | ### https://raw.github.com/github/gitignore/773eca0e04e9198ce0934cbec9a0222c31a4e1cb/Global/macOS.gitignore 113 | 114 | # General 115 | .DS_Store 116 | .AppleDouble 117 | .LSOverride 118 | 119 | # Icon must end with two \r 120 | Icon 121 | 122 | # Thumbnails 123 | ._* 124 | 125 | # Files that might appear in the root of a volume 126 | .DocumentRevisions-V100 127 | .fseventsd 128 | .Spotlight-V100 129 | .TemporaryItems 130 | .Trashes 131 | .VolumeIcon.icns 132 | .com.apple.timemachine.donotpresent 133 | 134 | # Directories potentially created on remote AFP share 135 | .AppleDB 136 | .AppleDesktop 137 | Network Trash Folder 138 | Temporary Items 139 | .apdisk 140 | 141 | 142 | ### https://raw.github.com/github/gitignore/773eca0e04e9198ce0934cbec9a0222c31a4e1cb/Global/Windows.gitignore 143 | 144 | # Windows thumbnail cache files 145 | Thumbs.db 146 | ehthumbs.db 147 | ehthumbs_vista.db 148 | 149 | # Dump file 150 | *.stackdump 151 | 152 | # Folder config file 153 | [Dd]esktop.ini 154 | 155 | # Recycle Bin used on file shares 156 | $RECYCLE.BIN/ 157 | 158 | # Windows Installer files 159 | *.cab 160 | *.msi 161 | *.msm 162 | *.msp 163 | 164 | # Windows shortcuts 165 | *.lnk 166 | 167 | 168 | ### https://raw.github.com/github/gitignore/773eca0e04e9198ce0934cbec9a0222c31a4e1cb/Python.gitignore 169 | 170 | # Byte-compiled / optimized / DLL files 171 | __pycache__/ 172 | *.py[cod] 173 | *$py.class 174 | 175 | # C extensions 176 | *.so 177 | 178 | # Distribution / packaging 179 | .Python 180 | build/ 181 | develop-eggs/ 182 | dist/ 183 | downloads/ 184 | eggs/ 185 | .eggs/ 186 | lib/ 187 | lib64/ 188 | parts/ 189 | sdist/ 190 | var/ 191 | wheels/ 192 | *.egg-info/ 193 | .installed.cfg 194 | *.egg 195 | MANIFEST 196 | 197 | # PyInstaller 198 | # Usually these files are written by a python script from a template 199 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 200 | *.manifest 201 | *.spec 202 | 203 | # Installer logs 204 | pip-log.txt 205 | pip-delete-this-directory.txt 206 | 207 | # Unit test / coverage reports 208 | htmlcov/ 209 | .tox/ 210 | .coverage 211 | .coverage.* 212 | .cache 213 | nosetests.xml 214 | coverage.xml 215 | *.cover 216 | .hypothesis/ 217 | .pytest_cache/ 218 | 219 | # Translations 220 | *.mo 221 | *.pot 222 | 223 | # Django stuff: 224 | *.log 225 | .static_storage/ 226 | .media/ 227 | local_settings.py 228 | 229 | # Flask stuff: 230 | instance/ 231 | .webassets-cache 232 | 233 | # Scrapy stuff: 234 | .scrapy 235 | 236 | # Sphinx documentation 237 | docs/_build/ 238 | 239 | # PyBuilder 240 | target/ 241 | 242 | # Jupyter Notebook 243 | .ipynb_checkpoints 244 | 245 | # pyenv 246 | .python-version 247 | 248 | # celery beat schedule file 249 | celerybeat-schedule 250 | 251 | # SageMath parsed files 252 | *.sage.py 253 | 254 | # Environments 255 | .env 256 | .venv 257 | env/ 258 | venv/ 259 | ENV/ 260 | env.bak/ 261 | venv.bak/ 262 | 263 | # Spyder project settings 264 | .spyderproject 265 | .spyproject 266 | 267 | # Rope project settings 268 | .ropeproject 269 | 270 | # mkdocs documentation 271 | /site 272 | 273 | # mypy 274 | .mypy_cache/ 275 | 276 | 277 | ### https://raw.github.com/github/gitignore/773eca0e04e9198ce0934cbec9a0222c31a4e1cb/Global/JetBrains.gitignore 278 | 279 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm 280 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 281 | 282 | # User-specific stuff: 283 | .idea/**/workspace.xml 284 | .idea/**/tasks.xml 285 | .idea/dictionaries 286 | 287 | # Sensitive or high-churn files: 288 | .idea/**/dataSources/ 289 | .idea/**/dataSources.ids 290 | .idea/**/dataSources.local.xml 291 | .idea/**/sqlDataSources.xml 292 | .idea/**/dynamic.xml 293 | .idea/**/uiDesigner.xml 294 | 295 | # Gradle: 296 | .idea/**/gradle.xml 297 | .idea/**/libraries 298 | 299 | # CMake 300 | cmake-build-debug/ 301 | cmake-build-release/ 302 | 303 | # Mongo Explorer plugin: 304 | .idea/**/mongoSettings.xml 305 | 306 | ## File-based project format: 307 | *.iws 308 | 309 | ## Plugin-specific files: 310 | 311 | # IntelliJ 312 | out/ 313 | 314 | # mpeltonen/sbt-idea plugin 315 | .idea_modules/ 316 | 317 | # JIRA plugin 318 | atlassian-ide-plugin.xml 319 | 320 | # Cursive Clojure plugin 321 | .idea/replstate.xml 322 | 323 | # Crashlytics plugin (for Android Studio and IntelliJ) 324 | com_crashlytics_export_strings.xml 325 | crashlytics.properties 326 | crashlytics-build.properties 327 | fabric.properties 328 | 329 | 330 | -------------------------------------------------------------------------------- /coordinates/uruguay.csv: -------------------------------------------------------------------------------- 1 | 30133.3333,57633.3333 2 | 30166.6667,57100 3 | 30233.3333,57583.3333 4 | 30250,56850 5 | 30250,56950 6 | 30250,57583.3333 7 | 30300,56966.6667 8 | 30316.6667,56816.6667 9 | 30400,56466.6667 10 | 30400,56783.3333 11 | 30433.3333,57433.3333 12 | 30466.6667,56550 13 | 30483.3333,56516.6667 14 | 30500,56450 15 | 30500,56666.6667 16 | 30550,57866.6667 17 | 30566.6667,56883.3333 18 | 30600,57683.3333 19 | 30616.6667,56900 20 | 30633.3333,56166.6667 21 | 30683.3333,57033.3333 22 | 30683.3333,57516.6667 23 | 30716.6667,56600 24 | 30733.3333,56733.3333 25 | 30733.3333,57316.6667 26 | 30750,56750 27 | 30783.3333,57783.3333 28 | 30833.3333,56750 29 | 30866.6667,56366.6667 30 | 30900,55516.6667 31 | 30916.6667,56300 32 | 30933.3333,55483.3333 33 | 30933.3333,55550 34 | 30950,56650 35 | 30966.6667,55550 36 | 30966.6667,57533.3333 37 | 31000,55683.3333 38 | 31000,56250 39 | 31016.6667,56566.6667 40 | 31033.3333,56600 41 | 31033.3333,56883.3333 42 | 31083.3333,56016.6667 43 | 31083.3333,56516.6667 44 | 31083.3333,57016.6667 45 | 31083.3333,57516.6667 46 | 31083.3333,57600 47 | 31083.3333,57833.3333 48 | 31100,55666.6667 49 | 31100,55983.3333 50 | 31100,57016.6667 51 | 31116.6667,56466.6667 52 | 31166.6667,55750 53 | 31166.6667,57000 54 | 31166.6667,57083.3333 55 | 31183.3333,56283.3333 56 | 31183.3333,56933.3333 57 | 31200,55750 58 | 31200,57233.3333 59 | 31216.6667,55666.6667 60 | 31216.6667,56316.6667 61 | 31233.3333,55633.3333 62 | 31233.3333,55883.3333 63 | 31233.3333,57116.6667 64 | 31250,55333.3333 65 | 31250,55950 66 | 31250,56833.3333 67 | 31250,57166.6667 68 | 31250,57200 69 | 31283.3333,56433.3333 70 | 31300,55866.6667 71 | 31300,56016.6667 72 | 31300,57066.6667 73 | 31300,57100 74 | 31300,57133.3333 75 | 31300,57150 76 | 31300,57200 77 | 31300,57700 78 | 31316.6667,55200 79 | 31333.3333,57800 80 | 31333.3333,57833.3333 81 | 31333.3333,57883.3333 82 | 31350,55383.3333 83 | 31350,56633.3333 84 | 31350,57783.3333 85 | 31350,57800 86 | 31350,57983.3333 87 | 31366.6667,55083.3333 88 | 31366.6667,55666.6667 89 | 31366.6667,55850 90 | 31383.3333,55866.6667 91 | 31383.3333,57966.6667 92 | 31400,56366.6667 93 | 31400,57783.3333 94 | 31416.6667,54916.6667 95 | 31416.6667,56683.3333 96 | 31433.3333,55233.3333 97 | 31450,55416.6667 98 | 31450,56383.3333 99 | 31466.6667,55166.6667 100 | 31466.6667,56833.3333 101 | 31483.3333,54833.3333 102 | 31500,54716.6667 103 | 31500,55166.6667 104 | 31500,56033.3333 105 | 31500,57116.6667 106 | 31516.6667,54966.6667 107 | 31516.6667,55766.6667 108 | 31516.6667,55966.6667 109 | 31516.6667,57533.3333 110 | 31516.6667,57583.3333 111 | 31533.3333,55583.3333 112 | 31533.3333,55833.3333 113 | 31533.3333,56050 114 | 31550,55550 115 | 31550,57950 116 | 31566.6667,54550 117 | 31583.3333,55466.6667 118 | 31583.3333,57616.6667 119 | 31600,55850 120 | 31600,56750 121 | 31616.6667,56816.6667 122 | 31633.3333,55000 123 | 31633.3333,56916.6667 124 | 31650,56833.3333 125 | 31666.6667,56166.6667 126 | 31666.6667,56633.3333 127 | 31666.6667,57916.6667 128 | 31683.3333,54650 129 | 31683.3333,54766.6667 130 | 31683.3333,55433.3333 131 | 31683.3333,55950 132 | 31683.3333,56133.3333 133 | 31683.3333,57683.3333 134 | 31700,56100 135 | 31716.6667,55333.3333 136 | 31733.3333,54416.6667 137 | 31733.3333,55983.3333 138 | 31750,55016.6667 139 | 31750,55466.6667 140 | 31750,56066.6667 141 | 31766.6667,54800 142 | 31766.6667,56016.6667 143 | 31766.6667,56250 144 | 31783.3333,54333.3333 145 | 31783.3333,54750 146 | 31783.3333,55150 147 | 31783.3333,56250 148 | 31800,54716.6667 149 | 31800,55333.3333 150 | 31800,55700 151 | 31800,56133.3333 152 | 31816.6667,54666.6667 153 | 31816.6667,55183.3333 154 | 31816.6667,55216.6667 155 | 31816.6667,55500 156 | 31816.6667,55916.6667 157 | 31816.6667,55966.6667 158 | 31833.3333,54166.6667 159 | 31833.3333,55766.6667 160 | 31833.3333,55933.3333 161 | 31833.3333,55983.3333 162 | 31833.3333,57250 163 | 31850,56000 164 | 31866.6667,54200 165 | 31866.6667,57283.3333 166 | 31883.3333,55433.3333 167 | 31883.3333,55966.6667 168 | 31883.3333,56000 169 | 31883.3333,57333.3333 170 | 31883.3333,57483.3333 171 | 31883.3333,57516.6667 172 | 31900,54150 173 | 31900,54783.3333 174 | 31900,55133.3333 175 | 31900,55466.6667 176 | 31900,55883.3333 177 | 31916.6667,54733.3333 178 | 31916.6667,55933.3333 179 | 31916.6667,56016.6667 180 | 31916.6667,57250 181 | 31916.6667,57716.6667 182 | 31950,57883.3333 183 | 31966.6667,55050 184 | 31966.6667,57516.6667 185 | 31983.3333,54166.6667 186 | 31983.3333,55683.3333 187 | 31983.3333,57416.6667 188 | 32000,54133.3333 189 | 32000,55483.3333 190 | 32000,57166.6667 191 | 32000,57300 192 | 32000,57583.3333 193 | 32016.6667,54200 194 | 32016.6667,55066.6667 195 | 32016.6667,57333.3333 196 | 32016.6667,57466.6667 197 | 32033.3333,54183.3333 198 | 32033.3333,54566.6667 199 | 32033.3333,55666.6667 200 | 32033.3333,55783.3333 201 | 32050,54633.3333 202 | 32050,54866.6667 203 | 32050,55383.3333 204 | 32066.6667,53766.6667 205 | 32066.6667,56350 206 | 32083.3333,54250 207 | 32083.3333,55650 208 | 32083.3333,56866.6667 209 | 32083.3333,57916.6667 210 | 32100,53750 211 | 32100,54866.6667 212 | 32100,57416.6667 213 | 32100,57816.6667 214 | 32116.6667,54066.6667 215 | 32116.6667,57566.6667 216 | 32150,54200 217 | 32150,54883.3333 218 | 32150,54950 219 | 32150,55050 220 | 32150,56116.6667 221 | 32166.6667,53750 222 | 32166.6667,54116.6667 223 | 32166.6667,55016.6667 224 | 32166.6667,55950 225 | 32183.3333,55033.3333 226 | 32183.3333,55283.3333 227 | 32183.3333,56066.6667 228 | 32200,54066.6667 229 | 32200,58000 230 | 32216.6667,55600 231 | 32216.6667,56016.6667 232 | 32233.3333,54983.3333 233 | 32233.3333,55733.3333 234 | 32233.3333,56500 235 | 32250,55750 236 | 32250,56516.6667 237 | 32250,57300 238 | 32266.6667,54916.6667 239 | 32266.6667,55900 240 | 32283.3333,58050 241 | 32300,55333.3333 242 | 32321.3889,58075.5556 243 | 32333.3333,55883.3333 244 | 32333.3333,55966.6667 245 | 32333.3333,57050 246 | 32333.3333,57800 247 | 32333.3333,57933.3333 248 | 32333.3333,58133.3333 249 | 32350,53833.3333 250 | 32350,54133.3333 251 | 32350,55833.3333 252 | 32350,56550 253 | 32350,57200 254 | 32366.6667,54183.3333 255 | 32366.6667,54766.6667 256 | 32366.6667,57850 257 | 32366.6667,57983.3333 258 | 32383.3333,54350 259 | 32383.3333,54666.6667 260 | 32383.3333,55066.6667 261 | 32383.3333,56683.3333 262 | 32383.3333,57500 263 | 32383.3333,57600 264 | 32400,55350 265 | 32400,56716.6667 266 | 32400,56900 267 | 32416.6667,56166.6667 268 | 32416.6667,56333.3333 269 | 32416.6667,57383.3333 270 | 32416.6667,57583.3333 271 | 32416.6667,58150 272 | 32433.3333,56350 273 | 32450,55033.3333 274 | 32450,56033.3333 275 | 32466.6667,54316.6667 276 | 32466.6667,55233.3333 277 | 32466.6667,56166.6667 278 | 32483.3333,53516.6667 279 | 32483.3333,53716.6667 280 | 32483.3333,56350 281 | 32483.3333,57750 282 | 32500,54016.6667 283 | 32500,54416.6667 284 | 32500,56033.3333 285 | 32516.6667,53483.3333 286 | 32516.6667,54533.3333 287 | 32516.6667,54583.3333 288 | 32516.6667,54683.3333 289 | 32516.6667,57750 290 | 32533.3333,54566.6667 291 | 32533.3333,55500 292 | 32533.3333,57133.3333 293 | 32566.6667,53416.6667 294 | 32566.6667,56883.3333 295 | 32566.6667,57366.6667 296 | 32566.6667,57483.3333 297 | 32583.3333,53383.3333 298 | 32600,55583.3333 299 | 32616.6667,54600 300 | 32616.6667,55833.3333 301 | 32616.6667,56483.3333 302 | 32633.3333,53300 303 | 32633.3333,53900 304 | 32633.3333,55116.6667 305 | 32633.3333,56350 306 | 32633.3333,56750 307 | 32650,54250 308 | 32650,54450 309 | 32666.6667,53616.6667 310 | 32666.6667,55450 311 | 32683.3333,54633.3333 312 | 32683.3333,56883.3333 313 | 32683.3333,57633.3333 314 | 32683.3333,58133.3333 315 | 32700,53966.6667 316 | 32716.6667,55600 317 | 32716.6667,57466.6667 318 | 32750,53483.3333 319 | 32750,53733.3333 320 | 32750,54400 321 | 32750,55650 322 | 32750,57750 323 | 32766.6667,55433.3333 324 | 32766.6667,55633.3333 325 | 32766.6667,57783.3333 326 | 32766.6667,57883.3333 327 | 32783.3333,53833.3333 328 | 32783.3333,55900 329 | 32800,55800 330 | 32800,56416.6667 331 | 32800,57050 332 | 32816.6667,56516.6667 333 | 32833.3333,54766.6667 334 | 32833.3333,55483.3333 335 | 32833.3333,56183.3333 336 | 32833.3333,56433.3333 337 | 32833.3333,57716.6667 338 | 32850,57683.3333 339 | 32866.6667,55916.6667 340 | 32866.6667,56466.6667 341 | 32883.3333,55416.6667 342 | 32883.3333,55516.6667 343 | 32883.3333,56800 344 | 32900,55233.3333 345 | 32900,56083.3333 346 | 32900,56133.3333 347 | 32916.6667,54966.6667 348 | 32916.6667,57733.3333 349 | 32933.3333,53950 350 | 32933.3333,54266.6667 351 | 32933.3333,55516.6667 352 | 32933.3333,57116.6667 353 | 32933.3333,57650 354 | 32950,54216.6667 355 | 32966.6667,55400 356 | 32983.3333,54583.3333 357 | 32983.3333,58050 358 | 33000,53633.3333 359 | 33000,55133.3333 360 | 33000,55783.3333 361 | 33016.6667,53700 362 | 33016.6667,53950 363 | 33016.6667,55050 364 | 33016.6667,56483.3333 365 | 33033.3333,57000 366 | 33050,54066.6667 367 | 33050,54150 368 | 33050,56483.3333 369 | 33066.6667,55850 370 | 33083.3333,55966.6667 371 | 33083.3333,56183.3333 372 | 33083.3333,57433.3333 373 | 33100,55133.3333 374 | 33100,57633.3333 375 | 33100,57733.3333 376 | 33116.6667,54816.6667 377 | 33116.6667,54833.3333 378 | 33116.6667,55983.3333 379 | 33132.5,58295.5556 380 | 33133.3333,54933.3333 381 | 33133.3333,57150 382 | 33150,54150 383 | 33166.6667,54966.6667 384 | 33166.6667,57583.3333 385 | 33183.3333,53900 386 | 33183.3333,55700 387 | 33183.3333,57466.6667 388 | 33200,53800 389 | 33200,54750 390 | 33200,56783.3333 391 | 33216.6667,54383.3333 392 | 33216.6667,56683.3333 393 | 33233.3333,53850 394 | 33233.3333,54383.3333 395 | 33233.3333,57133.3333 396 | 33250,53900 397 | 33250,53916.6667 398 | 33250,54016.6667 399 | 33250,54333.3333 400 | 33250,56016.6667 401 | 33250,57333.3333 402 | 33255.8333,58019.1667 403 | 33266.6667,53783.3333 404 | 33266.6667,54416.6667 405 | 33266.6667,55100 406 | 33266.6667,55116.6667 407 | 33283.3333,53933.3333 408 | 33300,56350 409 | 33333.3333,54783.3333 410 | 33333.3333,56466.6667 411 | 33333.3333,56933.3333 412 | 33333.3333,57950 413 | 33350,55616.6667 414 | 33350,55633.3333 415 | 33366.6667,53666.6667 416 | 33366.6667,56483.3333 417 | 33383.3333,55083.3333 418 | 33383.3333,56416.6667 419 | 33383.3333,57550 420 | 33400,54683.3333 421 | 33400,58316.6667 422 | 33413.0556,56500.5556 423 | 33416.6667,55633.3333 424 | 33416.6667,57066.6667 425 | 33450,54533.3333 426 | 33450,57733.3333 427 | 33466.6667,54200 428 | 33466.6667,54650 429 | 33466.6667,54666.6667 430 | 33466.6667,55116.6667 431 | 33466.6667,55200 432 | 33466.6667,55616.6667 433 | 33483.3333,55150 434 | 33483.3333,55566.6667 435 | 33483.3333,56150 436 | 33483.3333,56483.3333 437 | 33500,55216.6667 438 | 33500,56750 439 | 33500,56866.6667 440 | 33516.6667,53783.3333 441 | 33516.6667,54916.6667 442 | 33516.6667,56400 443 | 33516.6667,57833.3333 444 | 33533.3333,54433.3333 445 | 33533.3333,54600 446 | 33533.3333,56900 447 | 33533.3333,56933.3333 448 | 33538.8889,56888.6111 449 | 33544.1667,58197.2222 450 | 33550,55666.6667 451 | 33550,56900 452 | 33566.6667,53850 453 | 33583.3333,57300 454 | 33583.3333,57583.3333 455 | 33583.3333,58083.3333 456 | 33600,54316.6667 457 | 33600,55333.3333 458 | 33600,56350 459 | 33600,57133.3333 460 | 33600,57983.3333 461 | 33616.6667,53716.6667 462 | 33616.6667,57633.3333 463 | 33616.6667,58283.3333 464 | 33650,53800 465 | 33650,57533.3333 466 | 33666.6667,54200 467 | 33683.3333,53450 468 | 33683.3333,53550 469 | 33683.3333,54650 470 | 33683.3333,57566.6667 471 | 33716.6667,54533.3333 472 | 33716.6667,58083.3333 473 | 33716.6667,58266.6667 474 | 33733.3333,54750 475 | 33733.3333,56333.3333 476 | 33733.3333,57833.3333 477 | 33750,55283.3333 478 | 33750,56466.6667 479 | 33750,57483.3333 480 | 33750,57616.6667 481 | 33766.6667,58350 482 | 33800,54000 483 | 33800,58250 484 | 33816.6667,55550 485 | 33816.6667,57550 486 | 33833.3333,56300 487 | 33850,55166.6667 488 | 33850,56883.3333 489 | 33850,57016.6667 490 | 33850,57683.3333 491 | 33866.6667,55550 492 | 33866.6667,57000 493 | 33866.6667,57516.6667 494 | 33866.6667,57616.6667 495 | 33883.3333,53500 496 | 33883.3333,54716.6667 497 | 33883.3333,56450 498 | 33883.3333,57383.3333 499 | 33883.3333,57400 500 | 33883.3333,57666.6667 501 | 33883.3333,58416.6667 502 | 33900,55150 503 | 33900,56833.3333 504 | 33916.6667,57783.3333 505 | 33933.3333,55266.6667 506 | 33933.3333,55683.3333 507 | 33933.3333,56250 508 | 33933.3333,57466.6667 509 | 33933.3333,58166.6667 510 | 33950,55850 511 | 33950,56750 512 | 33950,57900 513 | 33950,58233.3333 514 | 33966.6667,57100 515 | 33966.6667,58283.3333 516 | 33983.3333,53983.3333 517 | 33983.3333,57900 518 | 33983.3333,58150 519 | 33983.3333,58250 520 | 33989.1667,58285.5556 521 | 34000,55666.6667 522 | 34000,58250 523 | 34016.6667,57650 524 | 34033.3333,54283.3333 525 | 34033.3333,55650 526 | 34033.3333,57833.3333 527 | 34033.3333,58133.3333 528 | 34050,54783.3333 529 | 34050,55883.3333 530 | 34050,56200 531 | 34066.6667,53933.3333 532 | 34066.6667,54500 533 | 34066.6667,56300 534 | 34066.6667,56383.3333 535 | 34066.6667,57350 536 | 34066.6667,57716.6667 537 | 34083.3333,57383.3333 538 | 34095.5556,56214.1667 539 | 34100,58000 540 | 34116.6667,53950 541 | 34133.3333,56400 542 | 34150,56950 543 | 34152.2222,58012.5 544 | 34153.0556,58176.6667 545 | 34166.6667,53833.3333 546 | 34166.6667,53850 547 | 34166.6667,54666.6667 548 | 34166.6667,56683.3333 549 | 34183.3333,53783.3333 550 | 34183.3333,55733.3333 551 | 34183.3333,57933.3333 552 | 34189.1667,56339.4444 553 | 34200,53933.3333 554 | 34200,54750 555 | 34200,56216.6667 556 | 34200,56983.3333 557 | 34200,57100 558 | 34200,57783.3333 559 | 34200,57866.6667 560 | 34216.6667,57000 561 | 34233.3333,55733.3333 562 | 34233.3333,56866.6667 563 | 34250,55933.3333 564 | 34250,56683.3333 565 | 34266.6667,53933.3333 566 | 34266.6667,54316.6667 567 | 34266.6667,57450 568 | 34283.3333,54983.3333 569 | 34283.3333,55233.3333 570 | 34283.3333,56216.6667 571 | 34283.3333,56916.6667 572 | 34283.3333,57616.6667 573 | 34290.5556,56388.8889 574 | 34300,55966.6667 575 | 34300,57233.3333 576 | 34300,57733.3333 577 | 34316.6667,56800 578 | 34316.6667,57000 579 | 34316.6667,57216.6667 580 | 34316.6667,57350 581 | 34319.1667,56805.2778 582 | 34333.3333,55450 583 | 34333.3333,55650 584 | 34333.3333,57233.3333 585 | 34333.3333,57716.6667 586 | 34337.5,56713.6111 587 | 34350,55766.6667 588 | 34350,56650 589 | 34350,57300 590 | 34350,57433.3333 591 | 34350,57850 592 | 34351.6667,56398.3333 593 | 34366.6667,53766.6667 594 | 34366.6667,53833.3333 595 | 34366.6667,54066.6667 596 | 34366.6667,55166.6667 597 | 34366.6667,55516.6667 598 | 34366.6667,55783.3333 599 | 34366.6667,56400 600 | 34366.6667,57050 601 | 34366.6667,57066.6667 602 | 34366.6667,57566.6667 603 | 34370,55225 604 | 34382.7778,56541.6667 605 | 34383.3333,56283.3333 606 | 34383.3333,56383.3333 607 | 34383.3333,56766.6667 608 | 34400,53783.3333 609 | 34400,56333.3333 610 | 34400,56533.3333 611 | 34400,57166.6667 612 | 34400,57333.3333 613 | 34400,57666.6667 614 | 34400,57883.3333 615 | 34411.6667,56402.2222 616 | 34416.6667,56466.6667 617 | 34416.6667,57283.3333 618 | 34416.6667,57733.3333 619 | 34419.7222,56422.5 620 | 34433.3333,55983.3333 621 | 34433.3333,57416.6667 622 | 34433.3333,57716.6667 623 | 34433.3333,57883.3333 624 | 34442.2222,56443.6111 625 | 34449.7222,56079.1667 626 | 34450,55783.3333 627 | 34450,56166.6667 628 | 34450,56250 629 | 34450,56283.3333 630 | 34450,57600 631 | 34453.3333,56390.5556 632 | 34466.6667,57716.6667 633 | 34466.6667,57850 634 | 34483.3333,54333.3333 635 | 34483.3333,55633.3333 636 | 34483.3333,55650 637 | 34483.3333,56850 638 | 34497.5,56037.2222 639 | 34500,55583.3333 640 | 34500,56383.3333 641 | 34516.6667,55250 642 | 34519.7222,56798.8889 643 | 34521.9444,56393.6111 644 | 34522.7778,56277.7778 645 | 34533.3333,56300 646 | 34533.3333,56316.6667 647 | 34550,55883.3333 648 | 34566.6667,55700 649 | 34583.3333,55833.3333 650 | 34583.8889,56699.4444 651 | 34589.4444,56252.7778 652 | 34600,54550 653 | 34600,55483.3333 654 | 34600,56133.3333 655 | 34605,56356.3889 656 | 34633.3333,55616.6667 657 | 34633.3333,55966.6667 658 | 34633.3333,56333.3333 659 | 34633.3333,56619.1667 660 | 34646.9444,56062.7778 661 | 34650,55233.3333 662 | 34650,55866.6667 663 | 34650,56600 664 | 34650,56716.6667 665 | 34650,56750 666 | 34665,56219.4444 667 | 34666.6667,54166.6667 668 | 34666.6667,55266.6667 669 | 34666.6667,56000 670 | 34683.3333,55683.3333 671 | 34683.3333,56733.3333 672 | 34698.3333,56217.5 673 | 34700,55900 674 | 34715.2778,56073.3333 675 | 34716.6667,55416.6667 676 | 34716.6667,55533.3333 677 | 34716.6667,55950 678 | 34726.3889,56220 679 | 34733.3333,55266.6667 680 | 34733.3333,55716.6667 681 | 34733.6111,56036.6667 682 | 34742.2222,56098.3333 683 | 34750,55333.3333 684 | 34750,55683.3333 685 | 34761.6667,56223.6111 686 | 34762.5,56020.5556 687 | 34763.3333,56385.2778 688 | 34764.1667,56213.8889 689 | 34766.6667,55750 690 | 34781.1111,56053.3333 691 | 34790.2778,56350 692 | 34800,54916.6667 693 | 34800,55233.3333 694 | 34800,55366.6667 695 | 34800,56216.6667 696 | 34800,56233.3333 697 | 34801.6667,56334.1667 698 | 34803.0556,56085.8333 699 | 34813.0556,56044.7222 700 | 34816.6667,56100 701 | 34816.6667,56183.3333 702 | 34828.6111,56139.4444 703 | 34833.3333,56116.6667 704 | 34833.3333,56216.6667 705 | 34833.3333,56233.3333 706 | 34850,56083.3333 707 | 34850,56116.6667 708 | 34850,56216.6667 709 | 34850,56233.3333 710 | 34858.0556,56170.8333 711 | 34860.2778,56052.2222 712 | 34866.6667,54866.6667 713 | 34866.6667,56166.6667 714 | 34870.5556,56133.6111 715 | 34875,56258.8889 716 | 34877.2222,56029.7222 717 | 34883.3333,56150 718 | 34883.3333,56183.3333 719 | 34883.3333,56200 720 | 34883.3333,56216.6667 721 | 34883.3333,56233.3333 722 | 34885.2778,56060.5556 723 | 34900,54950 724 | 34900,55283.3333 725 | 34900,56100 726 | 34900,56133.3333 727 | 34900,56150 728 | 34900,56183.3333 729 | 34905,56168.3333 730 | 34905.2778,56194.4444 731 | 34908.3333,56208.3333 732 | 34909.7222,56152.2222 733 | 34922.7778,56159.7222 734 | 34966.6667,54950 -------------------------------------------------------------------------------- /Pipfile.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_meta": { 3 | "hash": { 4 | "sha256": "29e1774605f1cedcc12021a29603eb974ab60444fd430e4e4471cda331e3f64d" 5 | }, 6 | "pipfile-spec": 6, 7 | "requires": { 8 | "python_version": "3.7" 9 | }, 10 | "sources": [ 11 | { 12 | "name": "pypi", 13 | "url": "https://pypi.org/simple", 14 | "verify_ssl": true 15 | } 16 | ] 17 | }, 18 | "default": { 19 | "cycler": { 20 | "hashes": [ 21 | "sha256:1d8a5ae1ff6c5cf9b93e8811e581232ad8920aeec647c37316ceac982b08cb2d", 22 | "sha256:cd7b2d1018258d7247a71425e9f26463dfb444d411c39569972f4ce586b0c9d8" 23 | ], 24 | "version": "==0.10.0" 25 | }, 26 | "kiwisolver": { 27 | "hashes": [ 28 | "sha256:05b5b061e09f60f56244adc885c4a7867da25ca387376b02c1efc29cc16bcd0f", 29 | "sha256:26f4fbd6f5e1dabff70a9ba0d2c4bd30761086454aa30dddc5b52764ee4852b7", 30 | "sha256:3b2378ad387f49cbb328205bda569b9f87288d6bc1bf4cd683c34523a2341efe", 31 | "sha256:400599c0fe58d21522cae0e8b22318e09d9729451b17ee61ba8e1e7c0346565c", 32 | "sha256:47b8cb81a7d18dbaf4fed6a61c3cecdb5adec7b4ac292bddb0d016d57e8507d5", 33 | "sha256:53eaed412477c836e1b9522c19858a8557d6e595077830146182225613b11a75", 34 | "sha256:58e626e1f7dfbb620d08d457325a4cdac65d1809680009f46bf41eaf74ad0187", 35 | "sha256:5a52e1b006bfa5be04fe4debbcdd2688432a9af4b207a3f429c74ad625022641", 36 | "sha256:5c7ca4e449ac9f99b3b9d4693debb1d6d237d1542dd6a56b3305fe8a9620f883", 37 | "sha256:682e54f0ce8f45981878756d7203fd01e188cc6c8b2c5e2cf03675390b4534d5", 38 | "sha256:79bfb2f0bd7cbf9ea256612c9523367e5ec51d7cd616ae20ca2c90f575d839a2", 39 | "sha256:7f4dd50874177d2bb060d74769210f3bce1af87a8c7cf5b37d032ebf94f0aca3", 40 | "sha256:8944a16020c07b682df861207b7e0efcd2f46c7488619cb55f65882279119389", 41 | "sha256:8aa7009437640beb2768bfd06da049bad0df85f47ff18426261acecd1cf00897", 42 | "sha256:939f36f21a8c571686eb491acfffa9c7f1ac345087281b412d63ea39ca14ec4a", 43 | "sha256:9733b7f64bd9f807832d673355f79703f81f0b3e52bfce420fc00d8cb28c6a6c", 44 | "sha256:a02f6c3e229d0b7220bd74600e9351e18bc0c361b05f29adae0d10599ae0e326", 45 | "sha256:a0c0a9f06872330d0dd31b45607197caab3c22777600e88031bfe66799e70bb0", 46 | "sha256:acc4df99308111585121db217681f1ce0eecb48d3a828a2f9bbf9773f4937e9e", 47 | "sha256:b64916959e4ae0ac78af7c3e8cef4becee0c0e9694ad477b4c6b3a536de6a544", 48 | "sha256:d3fcf0819dc3fea58be1fd1ca390851bdb719a549850e708ed858503ff25d995", 49 | "sha256:d52e3b1868a4e8fd18b5cb15055c76820df514e26aa84cc02f593d99fef6707f", 50 | "sha256:db1a5d3cc4ae943d674718d6c47d2d82488ddd94b93b9e12d24aabdbfe48caee", 51 | "sha256:e3a21a720791712ed721c7b95d433e036134de6f18c77dbe96119eaf7aa08004", 52 | "sha256:e8bf074363ce2babeb4764d94f8e65efd22e6a7c74860a4f05a6947afc020ff2", 53 | "sha256:f16814a4a96dc04bf1da7d53ee8d5b1d6decfc1a92a63349bb15d37b6a263dd9", 54 | "sha256:f2b22153870ca5cf2ab9c940d7bc38e8e9089fa0f7e5856ea195e1cf4ff43d5a", 55 | "sha256:f790f8b3dff3d53453de6a7b7ddd173d2e020fb160baff578d578065b108a05f" 56 | ], 57 | "version": "==1.1.0" 58 | }, 59 | "matplotlib": { 60 | "hashes": [ 61 | "sha256:1febd22afe1489b13c6749ea059d392c03261b2950d1d45c17e3aed812080c93", 62 | "sha256:31a30d03f39528c79f3a592857be62a08595dec4ac034978ecd0f814fa0eec2d", 63 | "sha256:4442ce720907f67a79d45de9ada47be81ce17e6c2f448b3c64765af93f6829c9", 64 | "sha256:796edbd1182cbffa7e1e7a97f1e141f875a8501ba8dd834269ae3cd45a8c976f", 65 | "sha256:934e6243df7165aad097572abf5b6003c77c9b6c480c3c4de6f2ef1b5fdd4ec0", 66 | "sha256:bab9d848dbf1517bc58d1f486772e99919b19efef5dd8596d4b26f9f5ee08b6b", 67 | "sha256:c1fe1e6cdaa53f11f088b7470c2056c0df7d80ee4858dadf6cbe433fcba4323b", 68 | "sha256:e5b8aeca9276a3a988caebe9f08366ed519fff98f77c6df5b64d7603d0e42e36", 69 | "sha256:ec6bd0a6a58df3628ff269978f4a4b924a0d371ad8ce1f8e2b635b99e482877a" 70 | ], 71 | "index": "pypi", 72 | "version": "==3.1.1" 73 | }, 74 | "numpy": { 75 | "hashes": [ 76 | "sha256:03e311b0a4c9f5755da7d52161280c6a78406c7be5c5cc7facfbcebb641efb7e", 77 | "sha256:0cdd229a53d2720d21175012ab0599665f8c9588b3b8ffa6095dd7b90f0691dd", 78 | "sha256:312bb18e95218bedc3563f26fcc9c1c6bfaaf9d453d15942c0839acdd7e4c473", 79 | "sha256:464b1c48baf49e8505b1bb754c47a013d2c305c5b14269b5c85ea0625b6a988a", 80 | "sha256:5adfde7bd3ee4864536e230bcab1c673f866736698724d5d28c11a4d63672658", 81 | "sha256:7724e9e31ee72389d522b88c0d4201f24edc34277999701ccd4a5392e7d8af61", 82 | "sha256:8d36f7c53ae741e23f54793ffefb2912340b800476eb0a831c6eb602e204c5c4", 83 | "sha256:910d2272403c2ea8a52d9159827dc9f7c27fb4b263749dca884e2e4a8af3b302", 84 | "sha256:951fefe2fb73f84c620bec4e001e80a80ddaa1b84dce244ded7f1e0cbe0ed34a", 85 | "sha256:9588c6b4157f493edeb9378788dcd02cb9e6a6aeaa518b511a1c79d06cbd8094", 86 | "sha256:9ce8300950f2f1d29d0e49c28ebfff0d2f1e2a7444830fbb0b913c7c08f31511", 87 | "sha256:be39cca66cc6806652da97103605c7b65ee4442c638f04ff064a7efd9a81d50a", 88 | "sha256:c3ab2d835b95ccb59d11dfcd56eb0480daea57cdf95d686d22eff35584bc4554", 89 | "sha256:eb0fc4a492cb896346c9e2c7a22eae3e766d407df3eb20f4ce027f23f76e4c54", 90 | "sha256:ec0c56eae6cee6299f41e780a0280318a93db519bbb2906103c43f3e2be1206c", 91 | "sha256:f4e4612de60a4f1c4d06c8c2857cdcb2b8b5289189a12053f37d3f41f06c60d0" 92 | ], 93 | "index": "pypi", 94 | "version": "==1.17.0" 95 | }, 96 | "pandas": { 97 | "hashes": [ 98 | "sha256:074a032f99bb55d178b93bd98999c971542f19317829af08c99504febd9e9b8b", 99 | "sha256:20f1728182b49575c2f6f681b3e2af5fac9e84abdf29488e76d569a7969b362e", 100 | "sha256:2745ba6e16c34d13d765c3657bb64fa20a0e2daf503e6216a36ed61770066179", 101 | "sha256:32c44e5b628c48ba17703f734d59f369d4cdcb4239ef26047d6c8a8bfda29a6b", 102 | "sha256:3b9f7dcee6744d9dcdd53bce19b91d20b4311bf904303fa00ef58e7df398e901", 103 | "sha256:544f2033250980fb6f069ce4a960e5f64d99b8165d01dc39afd0b244eeeef7d7", 104 | "sha256:58f9ef68975b9f00ba96755d5702afdf039dea9acef6a0cfd8ddcde32918a79c", 105 | "sha256:9023972a92073a495eba1380824b197ad1737550fe1c4ef8322e65fe58662888", 106 | "sha256:914341ad2d5b1ea522798efa4016430b66107d05781dbfe7cf05eba8f37df995", 107 | "sha256:9d151bfb0e751e2c987f931c57792871c8d7ff292bcdfcaa7233012c367940ee", 108 | "sha256:b932b127da810fef57d427260dde1ad54542c136c44b227a1e367551bb1a684b", 109 | "sha256:cfb862aa37f4dd5be0730731fdb8185ac935aba8b51bf3bd035658111c9ee1c9", 110 | "sha256:de7ecb4b120e98b91e8a2a21f186571266a8d1faa31d92421e979c7ca67d8e5c", 111 | "sha256:df7e1933a0b83920769611c5d6b9a1bf301e3fa6a544641c6678c67621fe9843" 112 | ], 113 | "index": "pypi", 114 | "version": "==0.25.0" 115 | }, 116 | "pyparsing": { 117 | "hashes": [ 118 | "sha256:6f98a7b9397e206d78cc01df10131398f1c8b8510a2f4d97d9abd82e1aacdd80", 119 | "sha256:d9338df12903bbf5d65a0e4e87c2161968b10d2e489652bb47001d82a9b028b4" 120 | ], 121 | "version": "==2.4.2" 122 | }, 123 | "python-dateutil": { 124 | "hashes": [ 125 | "sha256:7e6584c74aeed623791615e26efd690f29817a27c73085b78e4bad02493df2fb", 126 | "sha256:c89805f6f4d64db21ed966fda138f8a5ed7a4fdbc1a8ee329ce1b74e3c74da9e" 127 | ], 128 | "version": "==2.8.0" 129 | }, 130 | "pytz": { 131 | "hashes": [ 132 | "sha256:26c0b32e437e54a18161324a2fca3c4b9846b74a8dccddd843113109e1116b32", 133 | "sha256:c894d57500a4cd2d5c71114aaab77dbab5eabd9022308ce5ac9bb93a60a6f0c7" 134 | ], 135 | "version": "==2019.2" 136 | }, 137 | "six": { 138 | "hashes": [ 139 | "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", 140 | "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" 141 | ], 142 | "version": "==1.12.0" 143 | } 144 | }, 145 | "develop": { 146 | "appdirs": { 147 | "hashes": [ 148 | "sha256:9e5896d1372858f8dd3344faf4e5014d21849c756c8d5701f78f8a103b372d92", 149 | "sha256:d8b24664561d0d34ddfaec54636d502d7cea6e29c3eaf68f3df6180863e2166e" 150 | ], 151 | "version": "==1.4.3" 152 | }, 153 | "atomicwrites": { 154 | "hashes": [ 155 | "sha256:03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4", 156 | "sha256:75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6" 157 | ], 158 | "version": "==1.3.0" 159 | }, 160 | "attrs": { 161 | "hashes": [ 162 | "sha256:69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79", 163 | "sha256:f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399" 164 | ], 165 | "version": "==19.1.0" 166 | }, 167 | "black": { 168 | "hashes": [ 169 | "sha256:09a9dcb7c46ed496a9850b76e4e825d6049ecd38b611f1224857a79bd985a8cf", 170 | "sha256:68950ffd4d9169716bcb8719a56c07a2f4485354fec061cdd5910aa07369731c" 171 | ], 172 | "index": "pypi", 173 | "version": "==19.3b0" 174 | }, 175 | "click": { 176 | "hashes": [ 177 | "sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13", 178 | "sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7" 179 | ], 180 | "version": "==7.0" 181 | }, 182 | "entrypoints": { 183 | "hashes": [ 184 | "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19", 185 | "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451" 186 | ], 187 | "version": "==0.3" 188 | }, 189 | "flake8": { 190 | "hashes": [ 191 | "sha256:19241c1cbc971b9962473e4438a2ca19749a7dd002dd1a946eaba171b4114548", 192 | "sha256:8e9dfa3cecb2400b3738a42c54c3043e821682b9c840b0448c0503f781130696" 193 | ], 194 | "index": "pypi", 195 | "version": "==3.7.8" 196 | }, 197 | "importlib-metadata": { 198 | "hashes": [ 199 | "sha256:23d3d873e008a513952355379d93cbcab874c58f4f034ff657c7a87422fa64e8", 200 | "sha256:80d2de76188eabfbfcf27e6a37342c2827801e59c4cc14b0371c56fed43820e3" 201 | ], 202 | "version": "==0.19" 203 | }, 204 | "mccabe": { 205 | "hashes": [ 206 | "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", 207 | "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" 208 | ], 209 | "version": "==0.6.1" 210 | }, 211 | "more-itertools": { 212 | "hashes": [ 213 | "sha256:409cd48d4db7052af495b09dec721011634af3753ae1ef92d2b32f73a745f832", 214 | "sha256:92b8c4b06dac4f0611c0729b2f2ede52b2e1bac1ab48f089c7ddc12e26bb60c4" 215 | ], 216 | "version": "==7.2.0" 217 | }, 218 | "mypy": { 219 | "hashes": [ 220 | "sha256:0107bff4f46a289f0e4081d59b77cef1c48ea43da5a0dbf0005d54748b26df2a", 221 | "sha256:07957f5471b3bb768c61f08690c96d8a09be0912185a27a68700f3ede99184e4", 222 | "sha256:10af62f87b6921eac50271e667cc234162a194e742d8e02fc4ddc121e129a5b0", 223 | "sha256:11fd60d2f69f0cefbe53ce551acf5b1cec1a89e7ce2d47b4e95a84eefb2899ae", 224 | "sha256:15e43d3b1546813669bd1a6ec7e6a11d2888db938e0607f7b5eef6b976671339", 225 | "sha256:352c24ba054a89bb9a35dd064ee95ab9b12903b56c72a8d3863d882e2632dc76", 226 | "sha256:437020a39417e85e22ea8edcb709612903a9924209e10b3ec6d8c9f05b79f498", 227 | "sha256:49925f9da7cee47eebf3420d7c0e00ec662ec6abb2780eb0a16260a7ba25f9c4", 228 | "sha256:6724fcd5777aa6cebfa7e644c526888c9d639bd22edd26b2a8038c674a7c34bd", 229 | "sha256:7a17613f7ea374ab64f39f03257f22b5755335b73251d0d253687a69029701ba", 230 | "sha256:cdc1151ced496ca1496272da7fc356580e95f2682be1d32377c22ddebdf73c91" 231 | ], 232 | "index": "pypi", 233 | "version": "==0.720" 234 | }, 235 | "mypy-extensions": { 236 | "hashes": [ 237 | "sha256:37e0e956f41369209a3d5f34580150bcacfabaa57b33a15c0b25f4b5725e0812", 238 | "sha256:b16cabe759f55e3409a7d231ebd2841378fb0c27a5d1994719e340e4f429ac3e" 239 | ], 240 | "version": "==0.4.1" 241 | }, 242 | "packaging": { 243 | "hashes": [ 244 | "sha256:a7ac867b97fdc07ee80a8058fe4435ccd274ecc3b0ed61d852d7d53055528cf9", 245 | "sha256:c491ca87294da7cc01902edbe30a5bc6c4c28172b5138ab4e4aa1b9d7bfaeafe" 246 | ], 247 | "version": "==19.1" 248 | }, 249 | "pluggy": { 250 | "hashes": [ 251 | "sha256:0825a152ac059776623854c1543d65a4ad408eb3d33ee114dff91e57ec6ae6fc", 252 | "sha256:b9817417e95936bf75d85d3f8767f7df6cdde751fc40aed3bb3074cbcb77757c" 253 | ], 254 | "version": "==0.12.0" 255 | }, 256 | "py": { 257 | "hashes": [ 258 | "sha256:64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa", 259 | "sha256:dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53" 260 | ], 261 | "version": "==1.8.0" 262 | }, 263 | "pycodestyle": { 264 | "hashes": [ 265 | "sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56", 266 | "sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c" 267 | ], 268 | "version": "==2.5.0" 269 | }, 270 | "pyflakes": { 271 | "hashes": [ 272 | "sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0", 273 | "sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2" 274 | ], 275 | "version": "==2.1.1" 276 | }, 277 | "pyparsing": { 278 | "hashes": [ 279 | "sha256:6f98a7b9397e206d78cc01df10131398f1c8b8510a2f4d97d9abd82e1aacdd80", 280 | "sha256:d9338df12903bbf5d65a0e4e87c2161968b10d2e489652bb47001d82a9b028b4" 281 | ], 282 | "version": "==2.4.2" 283 | }, 284 | "pytest": { 285 | "hashes": [ 286 | "sha256:6ef6d06de77ce2961156013e9dff62f1b2688aa04d0dc244299fe7d67e09370d", 287 | "sha256:a736fed91c12681a7b34617c8fcefe39ea04599ca72c608751c31d89579a3f77" 288 | ], 289 | "index": "pypi", 290 | "version": "==5.0.1" 291 | }, 292 | "six": { 293 | "hashes": [ 294 | "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", 295 | "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" 296 | ], 297 | "version": "==1.12.0" 298 | }, 299 | "toml": { 300 | "hashes": [ 301 | "sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c", 302 | "sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e" 303 | ], 304 | "version": "==0.10.0" 305 | }, 306 | "typed-ast": { 307 | "hashes": [ 308 | "sha256:18511a0b3e7922276346bcb47e2ef9f38fb90fd31cb9223eed42c85d1312344e", 309 | "sha256:262c247a82d005e43b5b7f69aff746370538e176131c32dda9cb0f324d27141e", 310 | "sha256:2b907eb046d049bcd9892e3076c7a6456c93a25bebfe554e931620c90e6a25b0", 311 | "sha256:354c16e5babd09f5cb0ee000d54cfa38401d8b8891eefa878ac772f827181a3c", 312 | "sha256:4e0b70c6fc4d010f8107726af5fd37921b666f5b31d9331f0bd24ad9a088e631", 313 | "sha256:630968c5cdee51a11c05a30453f8cd65e0cc1d2ad0d9192819df9978984529f4", 314 | "sha256:66480f95b8167c9c5c5c87f32cf437d585937970f3fc24386f313a4c97b44e34", 315 | "sha256:71211d26ffd12d63a83e079ff258ac9d56a1376a25bc80b1cdcdf601b855b90b", 316 | "sha256:95bd11af7eafc16e829af2d3df510cecfd4387f6453355188342c3e79a2ec87a", 317 | "sha256:bc6c7d3fa1325a0c6613512a093bc2a2a15aeec350451cbdf9e1d4bffe3e3233", 318 | "sha256:cc34a6f5b426748a507dd5d1de4c1978f2eb5626d51326e43280941206c209e1", 319 | "sha256:d755f03c1e4a51e9b24d899561fec4ccaf51f210d52abdf8c07ee2849b212a36", 320 | "sha256:d7c45933b1bdfaf9f36c579671fec15d25b06c8398f113dab64c18ed1adda01d", 321 | "sha256:d896919306dd0aa22d0132f62a1b78d11aaf4c9fc5b3410d3c666b818191630a", 322 | "sha256:ffde2fbfad571af120fcbfbbc61c72469e72f550d676c3342492a9dfdefb8f12" 323 | ], 324 | "version": "==1.4.0" 325 | }, 326 | "typing-extensions": { 327 | "hashes": [ 328 | "sha256:2ed632b30bb54fc3941c382decfd0ee4148f5c591651c9272473fea2c6397d95", 329 | "sha256:b1edbbf0652660e32ae780ac9433f4231e7339c7f9a8057d0f042fcbcea49b87", 330 | "sha256:d8179012ec2c620d3791ca6fe2bf7979d979acdbef1fca0bc56b37411db682ed" 331 | ], 332 | "version": "==3.7.4" 333 | }, 334 | "wcwidth": { 335 | "hashes": [ 336 | "sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e", 337 | "sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c" 338 | ], 339 | "version": "==0.1.7" 340 | }, 341 | "zipp": { 342 | "hashes": [ 343 | "sha256:4970c3758f4e89a7857a973b1e2a5d75bcdc47794442f2e2dd4fe8e0466e809a", 344 | "sha256:8a5712cfd3bb4248015eb3b0b3c54a5f6ee3f2425963ef2a0125b8bc40aafaec" 345 | ], 346 | "version": "==0.5.2" 347 | } 348 | } 349 | } 350 | -------------------------------------------------------------------------------- /tests/expected_weights.csv: -------------------------------------------------------------------------------- 1 | -2,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-2.31623,-2,-2,-2,-2,-2,-2,-2,-2.31623,-3,-2.73824,-2,-2,-2,-2,-2,-2,-2,-2.73824,-3,-2.41231,-2,-2,-2,-2,-2,-2,-2,-2.41231,-3,-2.83815,-2,-2,-2,-2,-2,-2,-2,-2.83815,-3,-2.61847,-2,-2,-2,-2,-2,-2,-2,-2.61847,-3,-2.60828,-2,-2,-2,-2,-2,-2,-2,-2.60828,-3,-2.68007,-2,-2,-2,-2,-2,-2,-2,-2.68007,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.44721 2 | -3,-2,-3,-3,-3,-3,-3,-3,-3,-3,-2.31623,-3,-2.31623,-2,-2,-2,-2,-2,-2,-2,-2.73824,-3,-2.73824,-2,-2,-2,-2,-2,-2,-2,-2.41231,-3,-2.41231,-2,-2,-2,-2,-2,-2,-2,-2.83815,-3,-2.83815,-2,-2,-2,-2,-2,-2,-2,-2.61847,-3,-2.61847,-2,-2,-2,-2,-2,-2,-2,-2.60828,-3,-2.60828,-2,-2,-2,-2,-2,-2,-2,-2.68007,-3,-2.68007,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2 3 | -3,-3,-2,-3,-3,-3,-3,-3,-3,-3,-2,-2.31623,-3,-2.31623,-2,-2,-2,-2,-2,-2,-2,-2.73824,-3,-2.73824,-2,-2,-2,-2,-2,-2,-2,-2.41231,-3,-2.41231,-2,-2,-2,-2,-2,-2,-2,-2.83815,-3,-2.83815,-2,-2,-2,-2,-2,-2,-2,-2.61847,-3,-2.61847,-2,-2,-2,-2,-2,-2,-2,-2.60828,-3,-2.60828,-2,-2,-2,-2,-2,-2,-2,-2.68007,-3,-2.68007,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2 4 | -3,-3,-3,-2,-3,-3,-3,-3,-3,-3,-2,-2,-2.31623,-3,-2.31623,-2,-2,-2,-2,-2,-2,-2,-2.73824,-3,-2.73824,-2,-2,-2,-2,-2,-2,-2,-2.41231,-3,-2.41231,-2,-2,-2,-2,-2,-2,-2,-2.83815,-3,-2.83815,-2,-2,-2,-2,-2,-2,-2,-2.61847,-3,-2.61847,-2,-2,-2,-2,-2,-2,-2,-2.60828,-3,-2.60828,-2,-2,-2,-2,-2,-2,-2,-2.68007,-3,-2.68007,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2 5 | -3,-3,-3,-3,-2,-3,-3,-3,-3,-3,-2,-2,-2,-2.31623,-3,-2.31623,-2,-2,-2,-2,-2,-2,-2,-2.73824,-3,-2.73824,-2,-2,-2,-2,-2,-2,-2,-2.41231,-3,-2.41231,-2,-2,-2,-2,-2,-2,-2,-2.83815,-3,-2.83815,-2,-2,-2,-2,-2,-2,-2,-2.61847,-3,-2.61847,-2,-2,-2,-2,-2,-2,-2,-2.60828,-3,-2.60828,-2,-2,-2,-2,-2,-2,-2,-2.68007,-3,-2.68007,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2 6 | -3,-3,-3,-3,-3,-2,-3,-3,-3,-3,-2,-2,-2,-2,-2.31623,-3,-2.31623,-2,-2,-2,-2,-2,-2,-2,-2.73824,-3,-2.73824,-2,-2,-2,-2,-2,-2,-2,-2.41231,-3,-2.41231,-2,-2,-2,-2,-2,-2,-2,-2.83815,-3,-2.83815,-2,-2,-2,-2,-2,-2,-2,-2.61847,-3,-2.61847,-2,-2,-2,-2,-2,-2,-2,-2.60828,-3,-2.60828,-2,-2,-2,-2,-2,-2,-2,-2.68007,-3,-2.68007,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2 7 | -3,-3,-3,-3,-3,-3,-2,-3,-3,-3,-2,-2,-2,-2,-2,-2.31623,-3,-2.31623,-2,-2,-2,-2,-2,-2,-2,-2.73824,-3,-2.73824,-2,-2,-2,-2,-2,-2,-2,-2.41231,-3,-2.41231,-2,-2,-2,-2,-2,-2,-2,-2.83815,-3,-2.83815,-2,-2,-2,-2,-2,-2,-2,-2.61847,-3,-2.61847,-2,-2,-2,-2,-2,-2,-2,-2.60828,-3,-2.60828,-2,-2,-2,-2,-2,-2,-2,-2.68007,-3,-2.68007,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2 8 | -3,-3,-3,-3,-3,-3,-3,-2,-3,-3,-2,-2,-2,-2,-2,-2,-2.31623,-3,-2.31623,-2,-2,-2,-2,-2,-2,-2,-2.73824,-3,-2.73824,-2,-2,-2,-2,-2,-2,-2,-2.41231,-3,-2.41231,-2,-2,-2,-2,-2,-2,-2,-2.83815,-3,-2.83815,-2,-2,-2,-2,-2,-2,-2,-2.61847,-3,-2.61847,-2,-2,-2,-2,-2,-2,-2,-2.60828,-3,-2.60828,-2,-2,-2,-2,-2,-2,-2,-2.68007,-3,-2.68007,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2 9 | -3,-3,-3,-3,-3,-3,-3,-3,-2,-3,-2,-2,-2,-2,-2,-2,-2,-2.31623,-3,-2.31623,-2,-2,-2,-2,-2,-2,-2,-2.73824,-3,-2.73824,-2,-2,-2,-2,-2,-2,-2,-2.41231,-3,-2.41231,-2,-2,-2,-2,-2,-2,-2,-2.83815,-3,-2.83815,-2,-2,-2,-2,-2,-2,-2,-2.61847,-3,-2.61847,-2,-2,-2,-2,-2,-2,-2,-2.60828,-3,-2.60828,-2,-2,-2,-2,-2,-2,-2,-2.68007,-3,-2.68007,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721 10 | -3,-3,-3,-3,-3,-3,-3,-3,-3,-2,-2.31623,-2,-2,-2,-2,-2,-2,-2,-2.31623,-3,-2.73824,-2,-2,-2,-2,-2,-2,-2,-2.73824,-3,-2.41231,-2,-2,-2,-2,-2,-2,-2,-2.41231,-3,-2.83815,-2,-2,-2,-2,-2,-2,-2,-2.83815,-3,-2.61847,-2,-2,-2,-2,-2,-2,-2,-2.61847,-3,-2.60828,-2,-2,-2,-2,-2,-2,-2,-2.60828,-3,-2.68007,-2,-2,-2,-2,-2,-2,-2,-2.68007,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3 11 | -3,-2.31623,-2,-2,-2,-2,-2,-2,-2,-2.31623,-2,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-2.55227,-2,-2,-2,-2,-2,-2,-2,-2.55227,-3,-2.36056,-2,-2,-2,-2,-2,-2,-2,-2.36056,-3,-2.70178,-2,-2,-2,-2,-2,-2,-2,-2.70178,-3,-2.67268,-2,-2,-2,-2,-2,-2,-2,-2.67268,-3,-2.64031,-2,-2,-2,-2,-2,-2,-2,-2.64031,-3,-2.83217,-2,-2,-2,-2,-2,-2,-2,-2.83217,-3,-2.70711,-2,-2,-2,-2,-2,-2,-2,-2.70711,-3,-2.5831,-2,-2,-2,-2,-2,-2,-2,-2.5831 12 | -2.31623,-3,-2.31623,-2,-2,-2,-2,-2,-2,-2,-3,-2,-3,-3,-3,-3,-3,-3,-3,-3,-2.55227,-3,-2.55227,-2,-2,-2,-2,-2,-2,-2,-2.36056,-3,-2.36056,-2,-2,-2,-2,-2,-2,-2,-2.70178,-3,-2.70178,-2,-2,-2,-2,-2,-2,-2,-2.67268,-3,-2.67268,-2,-2,-2,-2,-2,-2,-2,-2.64031,-3,-2.64031,-2,-2,-2,-2,-2,-2,-2,-2.83217,-3,-2.83217,-2,-2,-2,-2,-2,-2,-2,-2.70711,-3,-2.70711,-2,-2,-2,-2,-2,-2,-2,-2.5831,-3,-2.5831,-2,-2,-2,-2,-2,-2,-2 13 | -2,-2.31623,-3,-2.31623,-2,-2,-2,-2,-2,-2,-3,-3,-2,-3,-3,-3,-3,-3,-3,-3,-2,-2.55227,-3,-2.55227,-2,-2,-2,-2,-2,-2,-2,-2.36056,-3,-2.36056,-2,-2,-2,-2,-2,-2,-2,-2.70178,-3,-2.70178,-2,-2,-2,-2,-2,-2,-2,-2.67268,-3,-2.67268,-2,-2,-2,-2,-2,-2,-2,-2.64031,-3,-2.64031,-2,-2,-2,-2,-2,-2,-2,-2.83217,-3,-2.83217,-2,-2,-2,-2,-2,-2,-2,-2.70711,-3,-2.70711,-2,-2,-2,-2,-2,-2,-2,-2.5831,-3,-2.5831,-2,-2,-2,-2,-2,-2 14 | -2,-2,-2.31623,-3,-2.31623,-2,-2,-2,-2,-2,-3,-3,-3,-2,-3,-3,-3,-3,-3,-3,-2,-2,-2.55227,-3,-2.55227,-2,-2,-2,-2,-2,-2,-2,-2.36056,-3,-2.36056,-2,-2,-2,-2,-2,-2,-2,-2.70178,-3,-2.70178,-2,-2,-2,-2,-2,-2,-2,-2.67268,-3,-2.67268,-2,-2,-2,-2,-2,-2,-2,-2.64031,-3,-2.64031,-2,-2,-2,-2,-2,-2,-2,-2.83217,-3,-2.83217,-2,-2,-2,-2,-2,-2,-2,-2.70711,-3,-2.70711,-2,-2,-2,-2,-2,-2,-2,-2.5831,-3,-2.5831,-2,-2,-2,-2,-2 15 | -2,-2,-2,-2.31623,-3,-2.31623,-2,-2,-2,-2,-3,-3,-3,-3,-2,-3,-3,-3,-3,-3,-2,-2,-2,-2.55227,-3,-2.55227,-2,-2,-2,-2,-2,-2,-2,-2.36056,-3,-2.36056,-2,-2,-2,-2,-2,-2,-2,-2.70178,-3,-2.70178,-2,-2,-2,-2,-2,-2,-2,-2.67268,-3,-2.67268,-2,-2,-2,-2,-2,-2,-2,-2.64031,-3,-2.64031,-2,-2,-2,-2,-2,-2,-2,-2.83217,-3,-2.83217,-2,-2,-2,-2,-2,-2,-2,-2.70711,-3,-2.70711,-2,-2,-2,-2,-2,-2,-2,-2.5831,-3,-2.5831,-2,-2,-2,-2 16 | -2,-2,-2,-2,-2.31623,-3,-2.31623,-2,-2,-2,-3,-3,-3,-3,-3,-2,-3,-3,-3,-3,-2,-2,-2,-2,-2.55227,-3,-2.55227,-2,-2,-2,-2,-2,-2,-2,-2.36056,-3,-2.36056,-2,-2,-2,-2,-2,-2,-2,-2.70178,-3,-2.70178,-2,-2,-2,-2,-2,-2,-2,-2.67268,-3,-2.67268,-2,-2,-2,-2,-2,-2,-2,-2.64031,-3,-2.64031,-2,-2,-2,-2,-2,-2,-2,-2.83217,-3,-2.83217,-2,-2,-2,-2,-2,-2,-2,-2.70711,-3,-2.70711,-2,-2,-2,-2,-2,-2,-2,-2.5831,-3,-2.5831,-2,-2,-2 17 | -2,-2,-2,-2,-2,-2.31623,-3,-2.31623,-2,-2,-3,-3,-3,-3,-3,-3,-2,-3,-3,-3,-2,-2,-2,-2,-2,-2.55227,-3,-2.55227,-2,-2,-2,-2,-2,-2,-2,-2.36056,-3,-2.36056,-2,-2,-2,-2,-2,-2,-2,-2.70178,-3,-2.70178,-2,-2,-2,-2,-2,-2,-2,-2.67268,-3,-2.67268,-2,-2,-2,-2,-2,-2,-2,-2.64031,-3,-2.64031,-2,-2,-2,-2,-2,-2,-2,-2.83217,-3,-2.83217,-2,-2,-2,-2,-2,-2,-2,-2.70711,-3,-2.70711,-2,-2,-2,-2,-2,-2,-2,-2.5831,-3,-2.5831,-2,-2 18 | -2,-2,-2,-2,-2,-2,-2.31623,-3,-2.31623,-2,-3,-3,-3,-3,-3,-3,-3,-2,-3,-3,-2,-2,-2,-2,-2,-2,-2.55227,-3,-2.55227,-2,-2,-2,-2,-2,-2,-2,-2.36056,-3,-2.36056,-2,-2,-2,-2,-2,-2,-2,-2.70178,-3,-2.70178,-2,-2,-2,-2,-2,-2,-2,-2.67268,-3,-2.67268,-2,-2,-2,-2,-2,-2,-2,-2.64031,-3,-2.64031,-2,-2,-2,-2,-2,-2,-2,-2.83217,-3,-2.83217,-2,-2,-2,-2,-2,-2,-2,-2.70711,-3,-2.70711,-2,-2,-2,-2,-2,-2,-2,-2.5831,-3,-2.5831,-2 19 | -2,-2,-2,-2,-2,-2,-2,-2.31623,-3,-2.31623,-3,-3,-3,-3,-3,-3,-3,-3,-2,-3,-2,-2,-2,-2,-2,-2,-2,-2.55227,-3,-2.55227,-2,-2,-2,-2,-2,-2,-2,-2.36056,-3,-2.36056,-2,-2,-2,-2,-2,-2,-2,-2.70178,-3,-2.70178,-2,-2,-2,-2,-2,-2,-2,-2.67268,-3,-2.67268,-2,-2,-2,-2,-2,-2,-2,-2.64031,-3,-2.64031,-2,-2,-2,-2,-2,-2,-2,-2.83217,-3,-2.83217,-2,-2,-2,-2,-2,-2,-2,-2.70711,-3,-2.70711,-2,-2,-2,-2,-2,-2,-2,-2.5831,-3,-2.5831 20 | -2.31623,-2,-2,-2,-2,-2,-2,-2,-2.31623,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-2,-2.55227,-2,-2,-2,-2,-2,-2,-2,-2.55227,-3,-2.36056,-2,-2,-2,-2,-2,-2,-2,-2.36056,-3,-2.70178,-2,-2,-2,-2,-2,-2,-2,-2.70178,-3,-2.67268,-2,-2,-2,-2,-2,-2,-2,-2.67268,-3,-2.64031,-2,-2,-2,-2,-2,-2,-2,-2.64031,-3,-2.83217,-2,-2,-2,-2,-2,-2,-2,-2.83217,-3,-2.70711,-2,-2,-2,-2,-2,-2,-2,-2.70711,-3,-2.5831,-2,-2,-2,-2,-2,-2,-2,-2.5831,-3 21 | -3,-2.73824,-2,-2,-2,-2,-2,-2,-2,-2.73824,-3,-2.55227,-2,-2,-2,-2,-2,-2,-2,-2.55227,-2,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-2.35355,-2,-2,-2,-2,-2,-2,-2,-2.35355,-3,-2.18028,-2,-2,-2,-2,-2,-2,-2,-2.18028,-3,-2.50249,-2,-2,-2,-2,-2,-2,-2,-2.50249,-3,-2.45277,-2,-2,-2,-2,-2,-2,-2,-2.45277,-3,-2.75664,-2,-2,-2,-2,-2,-2,-2,-2.75664,-3,-2.87464,-2,-2,-2,-2,-2,-2,-2,-2.87464,-3,-2.60415,-2,-2,-2,-2,-2,-2,-2,-2.60415 22 | -2.73824,-3,-2.73824,-2,-2,-2,-2,-2,-2,-2,-2.55227,-3,-2.55227,-2,-2,-2,-2,-2,-2,-2,-3,-2,-3,-3,-3,-3,-3,-3,-3,-3,-2.35355,-3,-2.35355,-2,-2,-2,-2,-2,-2,-2,-2.18028,-3,-2.18028,-2,-2,-2,-2,-2,-2,-2,-2.50249,-3,-2.50249,-2,-2,-2,-2,-2,-2,-2,-2.45277,-3,-2.45277,-2,-2,-2,-2,-2,-2,-2,-2.75664,-3,-2.75664,-2,-2,-2,-2,-2,-2,-2,-2.87464,-3,-2.87464,-2,-2,-2,-2,-2,-2,-2,-2.60415,-3,-2.60415,-2,-2,-2,-2,-2,-2,-2 23 | -2,-2.73824,-3,-2.73824,-2,-2,-2,-2,-2,-2,-2,-2.55227,-3,-2.55227,-2,-2,-2,-2,-2,-2,-3,-3,-2,-3,-3,-3,-3,-3,-3,-3,-2,-2.35355,-3,-2.35355,-2,-2,-2,-2,-2,-2,-2,-2.18028,-3,-2.18028,-2,-2,-2,-2,-2,-2,-2,-2.50249,-3,-2.50249,-2,-2,-2,-2,-2,-2,-2,-2.45277,-3,-2.45277,-2,-2,-2,-2,-2,-2,-2,-2.75664,-3,-2.75664,-2,-2,-2,-2,-2,-2,-2,-2.87464,-3,-2.87464,-2,-2,-2,-2,-2,-2,-2,-2.60415,-3,-2.60415,-2,-2,-2,-2,-2,-2 24 | -2,-2,-2.73824,-3,-2.73824,-2,-2,-2,-2,-2,-2,-2,-2.55227,-3,-2.55227,-2,-2,-2,-2,-2,-3,-3,-3,-2,-3,-3,-3,-3,-3,-3,-2,-2,-2.35355,-3,-2.35355,-2,-2,-2,-2,-2,-2,-2,-2.18028,-3,-2.18028,-2,-2,-2,-2,-2,-2,-2,-2.50249,-3,-2.50249,-2,-2,-2,-2,-2,-2,-2,-2.45277,-3,-2.45277,-2,-2,-2,-2,-2,-2,-2,-2.75664,-3,-2.75664,-2,-2,-2,-2,-2,-2,-2,-2.87464,-3,-2.87464,-2,-2,-2,-2,-2,-2,-2,-2.60415,-3,-2.60415,-2,-2,-2,-2,-2 25 | -2,-2,-2,-2.73824,-3,-2.73824,-2,-2,-2,-2,-2,-2,-2,-2.55227,-3,-2.55227,-2,-2,-2,-2,-3,-3,-3,-3,-2,-3,-3,-3,-3,-3,-2,-2,-2,-2.35355,-3,-2.35355,-2,-2,-2,-2,-2,-2,-2,-2.18028,-3,-2.18028,-2,-2,-2,-2,-2,-2,-2,-2.50249,-3,-2.50249,-2,-2,-2,-2,-2,-2,-2,-2.45277,-3,-2.45277,-2,-2,-2,-2,-2,-2,-2,-2.75664,-3,-2.75664,-2,-2,-2,-2,-2,-2,-2,-2.87464,-3,-2.87464,-2,-2,-2,-2,-2,-2,-2,-2.60415,-3,-2.60415,-2,-2,-2,-2 26 | -2,-2,-2,-2,-2.73824,-3,-2.73824,-2,-2,-2,-2,-2,-2,-2,-2.55227,-3,-2.55227,-2,-2,-2,-3,-3,-3,-3,-3,-2,-3,-3,-3,-3,-2,-2,-2,-2,-2.35355,-3,-2.35355,-2,-2,-2,-2,-2,-2,-2,-2.18028,-3,-2.18028,-2,-2,-2,-2,-2,-2,-2,-2.50249,-3,-2.50249,-2,-2,-2,-2,-2,-2,-2,-2.45277,-3,-2.45277,-2,-2,-2,-2,-2,-2,-2,-2.75664,-3,-2.75664,-2,-2,-2,-2,-2,-2,-2,-2.87464,-3,-2.87464,-2,-2,-2,-2,-2,-2,-2,-2.60415,-3,-2.60415,-2,-2,-2 27 | -2,-2,-2,-2,-2,-2.73824,-3,-2.73824,-2,-2,-2,-2,-2,-2,-2,-2.55227,-3,-2.55227,-2,-2,-3,-3,-3,-3,-3,-3,-2,-3,-3,-3,-2,-2,-2,-2,-2,-2.35355,-3,-2.35355,-2,-2,-2,-2,-2,-2,-2,-2.18028,-3,-2.18028,-2,-2,-2,-2,-2,-2,-2,-2.50249,-3,-2.50249,-2,-2,-2,-2,-2,-2,-2,-2.45277,-3,-2.45277,-2,-2,-2,-2,-2,-2,-2,-2.75664,-3,-2.75664,-2,-2,-2,-2,-2,-2,-2,-2.87464,-3,-2.87464,-2,-2,-2,-2,-2,-2,-2,-2.60415,-3,-2.60415,-2,-2 28 | -2,-2,-2,-2,-2,-2,-2.73824,-3,-2.73824,-2,-2,-2,-2,-2,-2,-2,-2.55227,-3,-2.55227,-2,-3,-3,-3,-3,-3,-3,-3,-2,-3,-3,-2,-2,-2,-2,-2,-2,-2.35355,-3,-2.35355,-2,-2,-2,-2,-2,-2,-2,-2.18028,-3,-2.18028,-2,-2,-2,-2,-2,-2,-2,-2.50249,-3,-2.50249,-2,-2,-2,-2,-2,-2,-2,-2.45277,-3,-2.45277,-2,-2,-2,-2,-2,-2,-2,-2.75664,-3,-2.75664,-2,-2,-2,-2,-2,-2,-2,-2.87464,-3,-2.87464,-2,-2,-2,-2,-2,-2,-2,-2.60415,-3,-2.60415,-2 29 | -2,-2,-2,-2,-2,-2,-2,-2.73824,-3,-2.73824,-2,-2,-2,-2,-2,-2,-2,-2.55227,-3,-2.55227,-3,-3,-3,-3,-3,-3,-3,-3,-2,-3,-2,-2,-2,-2,-2,-2,-2,-2.35355,-3,-2.35355,-2,-2,-2,-2,-2,-2,-2,-2.18028,-3,-2.18028,-2,-2,-2,-2,-2,-2,-2,-2.50249,-3,-2.50249,-2,-2,-2,-2,-2,-2,-2,-2.45277,-3,-2.45277,-2,-2,-2,-2,-2,-2,-2,-2.75664,-3,-2.75664,-2,-2,-2,-2,-2,-2,-2,-2.87464,-3,-2.87464,-2,-2,-2,-2,-2,-2,-2,-2.60415,-3,-2.60415 30 | -2.73824,-2,-2,-2,-2,-2,-2,-2,-2.73824,-3,-2.55227,-2,-2,-2,-2,-2,-2,-2,-2.55227,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-2,-2.35355,-2,-2,-2,-2,-2,-2,-2,-2.35355,-3,-2.18028,-2,-2,-2,-2,-2,-2,-2,-2.18028,-3,-2.50249,-2,-2,-2,-2,-2,-2,-2,-2.50249,-3,-2.45277,-2,-2,-2,-2,-2,-2,-2,-2.45277,-3,-2.75664,-2,-2,-2,-2,-2,-2,-2,-2.75664,-3,-2.87464,-2,-2,-2,-2,-2,-2,-2,-2.87464,-3,-2.60415,-2,-2,-2,-2,-2,-2,-2,-2.60415,-3 31 | -3,-2.41231,-2,-2,-2,-2,-2,-2,-2,-2.41231,-3,-2.36056,-2,-2,-2,-2,-2,-2,-2,-2.36056,-3,-2.35355,-2,-2,-2,-2,-2,-2,-2,-2.35355,-2,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-2.4272,-2,-2,-2,-2,-2,-2,-2,-2.4272,-3,-2.32016,-2,-2,-2,-2,-2,-2,-2,-2.32016,-3,-2.28284,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.52202,-2,-2,-2,-2,-2,-2,-2,-2.52202,-3,-2.53852,-2,-2,-2,-2,-2,-2,-2,-2.53852,-3,-2.3,-2,-2,-2,-2,-2,-2,-2,-2.3 32 | -2.41231,-3,-2.41231,-2,-2,-2,-2,-2,-2,-2,-2.36056,-3,-2.36056,-2,-2,-2,-2,-2,-2,-2,-2.35355,-3,-2.35355,-2,-2,-2,-2,-2,-2,-2,-3,-2,-3,-3,-3,-3,-3,-3,-3,-3,-2.4272,-3,-2.4272,-2,-2,-2,-2,-2,-2,-2,-2.32016,-3,-2.32016,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284,-2,-2,-2,-2,-2,-2,-2,-2.52202,-3,-2.52202,-2,-2,-2,-2,-2,-2,-2,-2.53852,-3,-2.53852,-2,-2,-2,-2,-2,-2,-2,-2.3,-3,-2.3,-2,-2,-2,-2,-2,-2,-2 33 | -2,-2.41231,-3,-2.41231,-2,-2,-2,-2,-2,-2,-2,-2.36056,-3,-2.36056,-2,-2,-2,-2,-2,-2,-2,-2.35355,-3,-2.35355,-2,-2,-2,-2,-2,-2,-3,-3,-2,-3,-3,-3,-3,-3,-3,-3,-2,-2.4272,-3,-2.4272,-2,-2,-2,-2,-2,-2,-2,-2.32016,-3,-2.32016,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284,-2,-2,-2,-2,-2,-2,-2,-2.52202,-3,-2.52202,-2,-2,-2,-2,-2,-2,-2,-2.53852,-3,-2.53852,-2,-2,-2,-2,-2,-2,-2,-2.3,-3,-2.3,-2,-2,-2,-2,-2,-2 34 | -2,-2,-2.41231,-3,-2.41231,-2,-2,-2,-2,-2,-2,-2,-2.36056,-3,-2.36056,-2,-2,-2,-2,-2,-2,-2,-2.35355,-3,-2.35355,-2,-2,-2,-2,-2,-3,-3,-3,-2,-3,-3,-3,-3,-3,-3,-2,-2,-2.4272,-3,-2.4272,-2,-2,-2,-2,-2,-2,-2,-2.32016,-3,-2.32016,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284,-2,-2,-2,-2,-2,-2,-2,-2.52202,-3,-2.52202,-2,-2,-2,-2,-2,-2,-2,-2.53852,-3,-2.53852,-2,-2,-2,-2,-2,-2,-2,-2.3,-3,-2.3,-2,-2,-2,-2,-2 35 | -2,-2,-2,-2.41231,-3,-2.41231,-2,-2,-2,-2,-2,-2,-2,-2.36056,-3,-2.36056,-2,-2,-2,-2,-2,-2,-2,-2.35355,-3,-2.35355,-2,-2,-2,-2,-3,-3,-3,-3,-2,-3,-3,-3,-3,-3,-2,-2,-2,-2.4272,-3,-2.4272,-2,-2,-2,-2,-2,-2,-2,-2.32016,-3,-2.32016,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284,-2,-2,-2,-2,-2,-2,-2,-2.52202,-3,-2.52202,-2,-2,-2,-2,-2,-2,-2,-2.53852,-3,-2.53852,-2,-2,-2,-2,-2,-2,-2,-2.3,-3,-2.3,-2,-2,-2,-2 36 | -2,-2,-2,-2,-2.41231,-3,-2.41231,-2,-2,-2,-2,-2,-2,-2,-2.36056,-3,-2.36056,-2,-2,-2,-2,-2,-2,-2,-2.35355,-3,-2.35355,-2,-2,-2,-3,-3,-3,-3,-3,-2,-3,-3,-3,-3,-2,-2,-2,-2,-2.4272,-3,-2.4272,-2,-2,-2,-2,-2,-2,-2,-2.32016,-3,-2.32016,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284,-2,-2,-2,-2,-2,-2,-2,-2.52202,-3,-2.52202,-2,-2,-2,-2,-2,-2,-2,-2.53852,-3,-2.53852,-2,-2,-2,-2,-2,-2,-2,-2.3,-3,-2.3,-2,-2,-2 37 | -2,-2,-2,-2,-2,-2.41231,-3,-2.41231,-2,-2,-2,-2,-2,-2,-2,-2.36056,-3,-2.36056,-2,-2,-2,-2,-2,-2,-2,-2.35355,-3,-2.35355,-2,-2,-3,-3,-3,-3,-3,-3,-2,-3,-3,-3,-2,-2,-2,-2,-2,-2.4272,-3,-2.4272,-2,-2,-2,-2,-2,-2,-2,-2.32016,-3,-2.32016,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284,-2,-2,-2,-2,-2,-2,-2,-2.52202,-3,-2.52202,-2,-2,-2,-2,-2,-2,-2,-2.53852,-3,-2.53852,-2,-2,-2,-2,-2,-2,-2,-2.3,-3,-2.3,-2,-2 38 | -2,-2,-2,-2,-2,-2,-2.41231,-3,-2.41231,-2,-2,-2,-2,-2,-2,-2,-2.36056,-3,-2.36056,-2,-2,-2,-2,-2,-2,-2,-2.35355,-3,-2.35355,-2,-3,-3,-3,-3,-3,-3,-3,-2,-3,-3,-2,-2,-2,-2,-2,-2,-2.4272,-3,-2.4272,-2,-2,-2,-2,-2,-2,-2,-2.32016,-3,-2.32016,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284,-2,-2,-2,-2,-2,-2,-2,-2.52202,-3,-2.52202,-2,-2,-2,-2,-2,-2,-2,-2.53852,-3,-2.53852,-2,-2,-2,-2,-2,-2,-2,-2.3,-3,-2.3,-2 39 | -2,-2,-2,-2,-2,-2,-2,-2.41231,-3,-2.41231,-2,-2,-2,-2,-2,-2,-2,-2.36056,-3,-2.36056,-2,-2,-2,-2,-2,-2,-2,-2.35355,-3,-2.35355,-3,-3,-3,-3,-3,-3,-3,-3,-2,-3,-2,-2,-2,-2,-2,-2,-2,-2.4272,-3,-2.4272,-2,-2,-2,-2,-2,-2,-2,-2.32016,-3,-2.32016,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284,-2,-2,-2,-2,-2,-2,-2,-2.52202,-3,-2.52202,-2,-2,-2,-2,-2,-2,-2,-2.53852,-3,-2.53852,-2,-2,-2,-2,-2,-2,-2,-2.3,-3,-2.3 40 | -2.41231,-2,-2,-2,-2,-2,-2,-2,-2.41231,-3,-2.36056,-2,-2,-2,-2,-2,-2,-2,-2.36056,-3,-2.35355,-2,-2,-2,-2,-2,-2,-2,-2.35355,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-2,-2.4272,-2,-2,-2,-2,-2,-2,-2,-2.4272,-3,-2.32016,-2,-2,-2,-2,-2,-2,-2,-2.32016,-3,-2.28284,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.52202,-2,-2,-2,-2,-2,-2,-2,-2.52202,-3,-2.53852,-2,-2,-2,-2,-2,-2,-2,-2.53852,-3,-2.3,-2,-2,-2,-2,-2,-2,-2,-2.3,-3 41 | -3,-2.83815,-2,-2,-2,-2,-2,-2,-2,-2.83815,-3,-2.70178,-2,-2,-2,-2,-2,-2,-2,-2.70178,-3,-2.18028,-2,-2,-2,-2,-2,-2,-2,-2.18028,-3,-2.4272,-2,-2,-2,-2,-2,-2,-2,-2.4272,-2,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.40311,-2,-2,-2,-2,-2,-2,-2,-2.40311,-3,-2.69642,-2,-2,-2,-2,-2,-2,-2,-2.69642,-3,-2.88459,-2,-2,-2,-2,-2,-2,-2,-2.88459,-3,-2.60208,-2,-2,-2,-2,-2,-2,-2,-2.60208 42 | -2.83815,-3,-2.83815,-2,-2,-2,-2,-2,-2,-2,-2.70178,-3,-2.70178,-2,-2,-2,-2,-2,-2,-2,-2.18028,-3,-2.18028,-2,-2,-2,-2,-2,-2,-2,-2.4272,-3,-2.4272,-2,-2,-2,-2,-2,-2,-2,-3,-2,-3,-3,-3,-3,-3,-3,-3,-3,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.40311,-3,-2.40311,-2,-2,-2,-2,-2,-2,-2,-2.69642,-3,-2.69642,-2,-2,-2,-2,-2,-2,-2,-2.88459,-3,-2.88459,-2,-2,-2,-2,-2,-2,-2,-2.60208,-3,-2.60208,-2,-2,-2,-2,-2,-2,-2 43 | -2,-2.83815,-3,-2.83815,-2,-2,-2,-2,-2,-2,-2,-2.70178,-3,-2.70178,-2,-2,-2,-2,-2,-2,-2,-2.18028,-3,-2.18028,-2,-2,-2,-2,-2,-2,-2,-2.4272,-3,-2.4272,-2,-2,-2,-2,-2,-2,-3,-3,-2,-3,-3,-3,-3,-3,-3,-3,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.40311,-3,-2.40311,-2,-2,-2,-2,-2,-2,-2,-2.69642,-3,-2.69642,-2,-2,-2,-2,-2,-2,-2,-2.88459,-3,-2.88459,-2,-2,-2,-2,-2,-2,-2,-2.60208,-3,-2.60208,-2,-2,-2,-2,-2,-2 44 | -2,-2,-2.83815,-3,-2.83815,-2,-2,-2,-2,-2,-2,-2,-2.70178,-3,-2.70178,-2,-2,-2,-2,-2,-2,-2,-2.18028,-3,-2.18028,-2,-2,-2,-2,-2,-2,-2,-2.4272,-3,-2.4272,-2,-2,-2,-2,-2,-3,-3,-3,-2,-3,-3,-3,-3,-3,-3,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.40311,-3,-2.40311,-2,-2,-2,-2,-2,-2,-2,-2.69642,-3,-2.69642,-2,-2,-2,-2,-2,-2,-2,-2.88459,-3,-2.88459,-2,-2,-2,-2,-2,-2,-2,-2.60208,-3,-2.60208,-2,-2,-2,-2,-2 45 | -2,-2,-2,-2.83815,-3,-2.83815,-2,-2,-2,-2,-2,-2,-2,-2.70178,-3,-2.70178,-2,-2,-2,-2,-2,-2,-2,-2.18028,-3,-2.18028,-2,-2,-2,-2,-2,-2,-2,-2.4272,-3,-2.4272,-2,-2,-2,-2,-3,-3,-3,-3,-2,-3,-3,-3,-3,-3,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.40311,-3,-2.40311,-2,-2,-2,-2,-2,-2,-2,-2.69642,-3,-2.69642,-2,-2,-2,-2,-2,-2,-2,-2.88459,-3,-2.88459,-2,-2,-2,-2,-2,-2,-2,-2.60208,-3,-2.60208,-2,-2,-2,-2 46 | -2,-2,-2,-2,-2.83815,-3,-2.83815,-2,-2,-2,-2,-2,-2,-2,-2.70178,-3,-2.70178,-2,-2,-2,-2,-2,-2,-2,-2.18028,-3,-2.18028,-2,-2,-2,-2,-2,-2,-2,-2.4272,-3,-2.4272,-2,-2,-2,-3,-3,-3,-3,-3,-2,-3,-3,-3,-3,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.40311,-3,-2.40311,-2,-2,-2,-2,-2,-2,-2,-2.69642,-3,-2.69642,-2,-2,-2,-2,-2,-2,-2,-2.88459,-3,-2.88459,-2,-2,-2,-2,-2,-2,-2,-2.60208,-3,-2.60208,-2,-2,-2 47 | -2,-2,-2,-2,-2,-2.83815,-3,-2.83815,-2,-2,-2,-2,-2,-2,-2,-2.70178,-3,-2.70178,-2,-2,-2,-2,-2,-2,-2,-2.18028,-3,-2.18028,-2,-2,-2,-2,-2,-2,-2,-2.4272,-3,-2.4272,-2,-2,-3,-3,-3,-3,-3,-3,-2,-3,-3,-3,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.40311,-3,-2.40311,-2,-2,-2,-2,-2,-2,-2,-2.69642,-3,-2.69642,-2,-2,-2,-2,-2,-2,-2,-2.88459,-3,-2.88459,-2,-2,-2,-2,-2,-2,-2,-2.60208,-3,-2.60208,-2,-2 48 | -2,-2,-2,-2,-2,-2,-2.83815,-3,-2.83815,-2,-2,-2,-2,-2,-2,-2,-2.70178,-3,-2.70178,-2,-2,-2,-2,-2,-2,-2,-2.18028,-3,-2.18028,-2,-2,-2,-2,-2,-2,-2,-2.4272,-3,-2.4272,-2,-3,-3,-3,-3,-3,-3,-3,-2,-3,-3,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.40311,-3,-2.40311,-2,-2,-2,-2,-2,-2,-2,-2.69642,-3,-2.69642,-2,-2,-2,-2,-2,-2,-2,-2.88459,-3,-2.88459,-2,-2,-2,-2,-2,-2,-2,-2.60208,-3,-2.60208,-2 49 | -2,-2,-2,-2,-2,-2,-2,-2.83815,-3,-2.83815,-2,-2,-2,-2,-2,-2,-2,-2.70178,-3,-2.70178,-2,-2,-2,-2,-2,-2,-2,-2.18028,-3,-2.18028,-2,-2,-2,-2,-2,-2,-2,-2.4272,-3,-2.4272,-3,-3,-3,-3,-3,-3,-3,-3,-2,-3,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.40311,-3,-2.40311,-2,-2,-2,-2,-2,-2,-2,-2.69642,-3,-2.69642,-2,-2,-2,-2,-2,-2,-2,-2.88459,-3,-2.88459,-2,-2,-2,-2,-2,-2,-2,-2.60208,-3,-2.60208 50 | -2.83815,-2,-2,-2,-2,-2,-2,-2,-2.83815,-3,-2.70178,-2,-2,-2,-2,-2,-2,-2,-2.70178,-3,-2.18028,-2,-2,-2,-2,-2,-2,-2,-2.18028,-3,-2.4272,-2,-2,-2,-2,-2,-2,-2,-2.4272,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-2,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.40311,-2,-2,-2,-2,-2,-2,-2,-2.40311,-3,-2.69642,-2,-2,-2,-2,-2,-2,-2,-2.69642,-3,-2.88459,-2,-2,-2,-2,-2,-2,-2,-2.88459,-3,-2.60208,-2,-2,-2,-2,-2,-2,-2,-2.60208,-3 51 | -3,-2.61847,-2,-2,-2,-2,-2,-2,-2,-2.61847,-3,-2.67268,-2,-2,-2,-2,-2,-2,-2,-2.67268,-3,-2.50249,-2,-2,-2,-2,-2,-2,-2,-2.50249,-3,-2.32016,-2,-2,-2,-2,-2,-2,-2,-2.32016,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.44721,-2,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-2.05,-2,-2,-2,-2,-2,-2,-2,-2.05,-3,-2.25495,-2,-2,-2,-2,-2,-2,-2,-2.25495,-3,-2.4717,-2,-2,-2,-2,-2,-2,-2,-2.4717,-3,-2.20616,-2,-2,-2,-2,-2,-2,-2,-2.20616 52 | -2.61847,-3,-2.61847,-2,-2,-2,-2,-2,-2,-2,-2.67268,-3,-2.67268,-2,-2,-2,-2,-2,-2,-2,-2.50249,-3,-2.50249,-2,-2,-2,-2,-2,-2,-2,-2.32016,-3,-2.32016,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-3,-2,-3,-3,-3,-3,-3,-3,-3,-3,-2.05,-3,-2.05,-2,-2,-2,-2,-2,-2,-2,-2.25495,-3,-2.25495,-2,-2,-2,-2,-2,-2,-2,-2.4717,-3,-2.4717,-2,-2,-2,-2,-2,-2,-2,-2.20616,-3,-2.20616,-2,-2,-2,-2,-2,-2,-2 53 | -2,-2.61847,-3,-2.61847,-2,-2,-2,-2,-2,-2,-2,-2.67268,-3,-2.67268,-2,-2,-2,-2,-2,-2,-2,-2.50249,-3,-2.50249,-2,-2,-2,-2,-2,-2,-2,-2.32016,-3,-2.32016,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-3,-3,-2,-3,-3,-3,-3,-3,-3,-3,-2,-2.05,-3,-2.05,-2,-2,-2,-2,-2,-2,-2,-2.25495,-3,-2.25495,-2,-2,-2,-2,-2,-2,-2,-2.4717,-3,-2.4717,-2,-2,-2,-2,-2,-2,-2,-2.20616,-3,-2.20616,-2,-2,-2,-2,-2,-2 54 | -2,-2,-2.61847,-3,-2.61847,-2,-2,-2,-2,-2,-2,-2,-2.67268,-3,-2.67268,-2,-2,-2,-2,-2,-2,-2,-2.50249,-3,-2.50249,-2,-2,-2,-2,-2,-2,-2,-2.32016,-3,-2.32016,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-3,-3,-3,-2,-3,-3,-3,-3,-3,-3,-2,-2,-2.05,-3,-2.05,-2,-2,-2,-2,-2,-2,-2,-2.25495,-3,-2.25495,-2,-2,-2,-2,-2,-2,-2,-2.4717,-3,-2.4717,-2,-2,-2,-2,-2,-2,-2,-2.20616,-3,-2.20616,-2,-2,-2,-2,-2 55 | -2,-2,-2,-2.61847,-3,-2.61847,-2,-2,-2,-2,-2,-2,-2,-2.67268,-3,-2.67268,-2,-2,-2,-2,-2,-2,-2,-2.50249,-3,-2.50249,-2,-2,-2,-2,-2,-2,-2,-2.32016,-3,-2.32016,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-3,-3,-3,-3,-2,-3,-3,-3,-3,-3,-2,-2,-2,-2.05,-3,-2.05,-2,-2,-2,-2,-2,-2,-2,-2.25495,-3,-2.25495,-2,-2,-2,-2,-2,-2,-2,-2.4717,-3,-2.4717,-2,-2,-2,-2,-2,-2,-2,-2.20616,-3,-2.20616,-2,-2,-2,-2 56 | -2,-2,-2,-2,-2.61847,-3,-2.61847,-2,-2,-2,-2,-2,-2,-2,-2.67268,-3,-2.67268,-2,-2,-2,-2,-2,-2,-2,-2.50249,-3,-2.50249,-2,-2,-2,-2,-2,-2,-2,-2.32016,-3,-2.32016,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-3,-3,-3,-3,-3,-2,-3,-3,-3,-3,-2,-2,-2,-2,-2.05,-3,-2.05,-2,-2,-2,-2,-2,-2,-2,-2.25495,-3,-2.25495,-2,-2,-2,-2,-2,-2,-2,-2.4717,-3,-2.4717,-2,-2,-2,-2,-2,-2,-2,-2.20616,-3,-2.20616,-2,-2,-2 57 | -2,-2,-2,-2,-2,-2.61847,-3,-2.61847,-2,-2,-2,-2,-2,-2,-2,-2.67268,-3,-2.67268,-2,-2,-2,-2,-2,-2,-2,-2.50249,-3,-2.50249,-2,-2,-2,-2,-2,-2,-2,-2.32016,-3,-2.32016,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-3,-3,-3,-3,-3,-3,-2,-3,-3,-3,-2,-2,-2,-2,-2,-2.05,-3,-2.05,-2,-2,-2,-2,-2,-2,-2,-2.25495,-3,-2.25495,-2,-2,-2,-2,-2,-2,-2,-2.4717,-3,-2.4717,-2,-2,-2,-2,-2,-2,-2,-2.20616,-3,-2.20616,-2,-2 58 | -2,-2,-2,-2,-2,-2,-2.61847,-3,-2.61847,-2,-2,-2,-2,-2,-2,-2,-2.67268,-3,-2.67268,-2,-2,-2,-2,-2,-2,-2,-2.50249,-3,-2.50249,-2,-2,-2,-2,-2,-2,-2,-2.32016,-3,-2.32016,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-3,-3,-3,-3,-3,-3,-3,-2,-3,-3,-2,-2,-2,-2,-2,-2,-2.05,-3,-2.05,-2,-2,-2,-2,-2,-2,-2,-2.25495,-3,-2.25495,-2,-2,-2,-2,-2,-2,-2,-2.4717,-3,-2.4717,-2,-2,-2,-2,-2,-2,-2,-2.20616,-3,-2.20616,-2 59 | -2,-2,-2,-2,-2,-2,-2,-2.61847,-3,-2.61847,-2,-2,-2,-2,-2,-2,-2,-2.67268,-3,-2.67268,-2,-2,-2,-2,-2,-2,-2,-2.50249,-3,-2.50249,-2,-2,-2,-2,-2,-2,-2,-2.32016,-3,-2.32016,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-3,-3,-3,-3,-3,-3,-3,-3,-2,-3,-2,-2,-2,-2,-2,-2,-2,-2.05,-3,-2.05,-2,-2,-2,-2,-2,-2,-2,-2.25495,-3,-2.25495,-2,-2,-2,-2,-2,-2,-2,-2.4717,-3,-2.4717,-2,-2,-2,-2,-2,-2,-2,-2.20616,-3,-2.20616 60 | -2.61847,-2,-2,-2,-2,-2,-2,-2,-2.61847,-3,-2.67268,-2,-2,-2,-2,-2,-2,-2,-2.67268,-3,-2.50249,-2,-2,-2,-2,-2,-2,-2,-2.50249,-3,-2.32016,-2,-2,-2,-2,-2,-2,-2,-2.32016,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-2,-2.05,-2,-2,-2,-2,-2,-2,-2,-2.05,-3,-2.25495,-2,-2,-2,-2,-2,-2,-2,-2.25495,-3,-2.4717,-2,-2,-2,-2,-2,-2,-2,-2.4717,-3,-2.20616,-2,-2,-2,-2,-2,-2,-2,-2.20616,-3 61 | -3,-2.60828,-2,-2,-2,-2,-2,-2,-2,-2.60828,-3,-2.64031,-2,-2,-2,-2,-2,-2,-2,-2.64031,-3,-2.45277,-2,-2,-2,-2,-2,-2,-2,-2.45277,-3,-2.28284,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.40311,-2,-2,-2,-2,-2,-2,-2,-2.40311,-3,-2.05,-2,-2,-2,-2,-2,-2,-2,-2.05,-2,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-2.30414,-2,-2,-2,-2,-2,-2,-2,-2.30414,-3,-2.5,-2,-2,-2,-2,-2,-2,-2,-2.5,-3,-2.22361,-2,-2,-2,-2,-2,-2,-2,-2.22361 62 | -2.60828,-3,-2.60828,-2,-2,-2,-2,-2,-2,-2,-2.64031,-3,-2.64031,-2,-2,-2,-2,-2,-2,-2,-2.45277,-3,-2.45277,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284,-2,-2,-2,-2,-2,-2,-2,-2.40311,-3,-2.40311,-2,-2,-2,-2,-2,-2,-2,-2.05,-3,-2.05,-2,-2,-2,-2,-2,-2,-2,-3,-2,-3,-3,-3,-3,-3,-3,-3,-3,-2.30414,-3,-2.30414,-2,-2,-2,-2,-2,-2,-2,-2.5,-3,-2.5,-2,-2,-2,-2,-2,-2,-2,-2.22361,-3,-2.22361,-2,-2,-2,-2,-2,-2,-2 63 | -2,-2.60828,-3,-2.60828,-2,-2,-2,-2,-2,-2,-2,-2.64031,-3,-2.64031,-2,-2,-2,-2,-2,-2,-2,-2.45277,-3,-2.45277,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284,-2,-2,-2,-2,-2,-2,-2,-2.40311,-3,-2.40311,-2,-2,-2,-2,-2,-2,-2,-2.05,-3,-2.05,-2,-2,-2,-2,-2,-2,-3,-3,-2,-3,-3,-3,-3,-3,-3,-3,-2,-2.30414,-3,-2.30414,-2,-2,-2,-2,-2,-2,-2,-2.5,-3,-2.5,-2,-2,-2,-2,-2,-2,-2,-2.22361,-3,-2.22361,-2,-2,-2,-2,-2,-2 64 | -2,-2,-2.60828,-3,-2.60828,-2,-2,-2,-2,-2,-2,-2,-2.64031,-3,-2.64031,-2,-2,-2,-2,-2,-2,-2,-2.45277,-3,-2.45277,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284,-2,-2,-2,-2,-2,-2,-2,-2.40311,-3,-2.40311,-2,-2,-2,-2,-2,-2,-2,-2.05,-3,-2.05,-2,-2,-2,-2,-2,-3,-3,-3,-2,-3,-3,-3,-3,-3,-3,-2,-2,-2.30414,-3,-2.30414,-2,-2,-2,-2,-2,-2,-2,-2.5,-3,-2.5,-2,-2,-2,-2,-2,-2,-2,-2.22361,-3,-2.22361,-2,-2,-2,-2,-2 65 | -2,-2,-2,-2.60828,-3,-2.60828,-2,-2,-2,-2,-2,-2,-2,-2.64031,-3,-2.64031,-2,-2,-2,-2,-2,-2,-2,-2.45277,-3,-2.45277,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284,-2,-2,-2,-2,-2,-2,-2,-2.40311,-3,-2.40311,-2,-2,-2,-2,-2,-2,-2,-2.05,-3,-2.05,-2,-2,-2,-2,-3,-3,-3,-3,-2,-3,-3,-3,-3,-3,-2,-2,-2,-2.30414,-3,-2.30414,-2,-2,-2,-2,-2,-2,-2,-2.5,-3,-2.5,-2,-2,-2,-2,-2,-2,-2,-2.22361,-3,-2.22361,-2,-2,-2,-2 66 | -2,-2,-2,-2,-2.60828,-3,-2.60828,-2,-2,-2,-2,-2,-2,-2,-2.64031,-3,-2.64031,-2,-2,-2,-2,-2,-2,-2,-2.45277,-3,-2.45277,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284,-2,-2,-2,-2,-2,-2,-2,-2.40311,-3,-2.40311,-2,-2,-2,-2,-2,-2,-2,-2.05,-3,-2.05,-2,-2,-2,-3,-3,-3,-3,-3,-2,-3,-3,-3,-3,-2,-2,-2,-2,-2.30414,-3,-2.30414,-2,-2,-2,-2,-2,-2,-2,-2.5,-3,-2.5,-2,-2,-2,-2,-2,-2,-2,-2.22361,-3,-2.22361,-2,-2,-2 67 | -2,-2,-2,-2,-2,-2.60828,-3,-2.60828,-2,-2,-2,-2,-2,-2,-2,-2.64031,-3,-2.64031,-2,-2,-2,-2,-2,-2,-2,-2.45277,-3,-2.45277,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284,-2,-2,-2,-2,-2,-2,-2,-2.40311,-3,-2.40311,-2,-2,-2,-2,-2,-2,-2,-2.05,-3,-2.05,-2,-2,-3,-3,-3,-3,-3,-3,-2,-3,-3,-3,-2,-2,-2,-2,-2,-2.30414,-3,-2.30414,-2,-2,-2,-2,-2,-2,-2,-2.5,-3,-2.5,-2,-2,-2,-2,-2,-2,-2,-2.22361,-3,-2.22361,-2,-2 68 | -2,-2,-2,-2,-2,-2,-2.60828,-3,-2.60828,-2,-2,-2,-2,-2,-2,-2,-2.64031,-3,-2.64031,-2,-2,-2,-2,-2,-2,-2,-2.45277,-3,-2.45277,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284,-2,-2,-2,-2,-2,-2,-2,-2.40311,-3,-2.40311,-2,-2,-2,-2,-2,-2,-2,-2.05,-3,-2.05,-2,-3,-3,-3,-3,-3,-3,-3,-2,-3,-3,-2,-2,-2,-2,-2,-2,-2.30414,-3,-2.30414,-2,-2,-2,-2,-2,-2,-2,-2.5,-3,-2.5,-2,-2,-2,-2,-2,-2,-2,-2.22361,-3,-2.22361,-2 69 | -2,-2,-2,-2,-2,-2,-2,-2.60828,-3,-2.60828,-2,-2,-2,-2,-2,-2,-2,-2.64031,-3,-2.64031,-2,-2,-2,-2,-2,-2,-2,-2.45277,-3,-2.45277,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284,-2,-2,-2,-2,-2,-2,-2,-2.40311,-3,-2.40311,-2,-2,-2,-2,-2,-2,-2,-2.05,-3,-2.05,-3,-3,-3,-3,-3,-3,-3,-3,-2,-3,-2,-2,-2,-2,-2,-2,-2,-2.30414,-3,-2.30414,-2,-2,-2,-2,-2,-2,-2,-2.5,-3,-2.5,-2,-2,-2,-2,-2,-2,-2,-2.22361,-3,-2.22361 70 | -2.60828,-2,-2,-2,-2,-2,-2,-2,-2.60828,-3,-2.64031,-2,-2,-2,-2,-2,-2,-2,-2.64031,-3,-2.45277,-2,-2,-2,-2,-2,-2,-2,-2.45277,-3,-2.28284,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.40311,-2,-2,-2,-2,-2,-2,-2,-2.40311,-3,-2.05,-2,-2,-2,-2,-2,-2,-2,-2.05,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-2,-2.30414,-2,-2,-2,-2,-2,-2,-2,-2.30414,-3,-2.5,-2,-2,-2,-2,-2,-2,-2,-2.5,-3,-2.22361,-2,-2,-2,-2,-2,-2,-2,-2.22361,-3 71 | -3,-2.68007,-2,-2,-2,-2,-2,-2,-2,-2.68007,-3,-2.83217,-2,-2,-2,-2,-2,-2,-2,-2.83217,-3,-2.75664,-2,-2,-2,-2,-2,-2,-2,-2.75664,-3,-2.52202,-2,-2,-2,-2,-2,-2,-2,-2.52202,-3,-2.69642,-2,-2,-2,-2,-2,-2,-2,-2.69642,-3,-2.25495,-2,-2,-2,-2,-2,-2,-2,-2.25495,-3,-2.30414,-2,-2,-2,-2,-2,-2,-2,-2.30414,-2,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-2.35,-2,-2,-2,-2,-2,-2,-2,-2.35,-3,-2.25,-2,-2,-2,-2,-2,-2,-2,-2.25 72 | -2.68007,-3,-2.68007,-2,-2,-2,-2,-2,-2,-2,-2.83217,-3,-2.83217,-2,-2,-2,-2,-2,-2,-2,-2.75664,-3,-2.75664,-2,-2,-2,-2,-2,-2,-2,-2.52202,-3,-2.52202,-2,-2,-2,-2,-2,-2,-2,-2.69642,-3,-2.69642,-2,-2,-2,-2,-2,-2,-2,-2.25495,-3,-2.25495,-2,-2,-2,-2,-2,-2,-2,-2.30414,-3,-2.30414,-2,-2,-2,-2,-2,-2,-2,-3,-2,-3,-3,-3,-3,-3,-3,-3,-3,-2.35,-3,-2.35,-2,-2,-2,-2,-2,-2,-2,-2.25,-3,-2.25,-2,-2,-2,-2,-2,-2,-2 73 | -2,-2.68007,-3,-2.68007,-2,-2,-2,-2,-2,-2,-2,-2.83217,-3,-2.83217,-2,-2,-2,-2,-2,-2,-2,-2.75664,-3,-2.75664,-2,-2,-2,-2,-2,-2,-2,-2.52202,-3,-2.52202,-2,-2,-2,-2,-2,-2,-2,-2.69642,-3,-2.69642,-2,-2,-2,-2,-2,-2,-2,-2.25495,-3,-2.25495,-2,-2,-2,-2,-2,-2,-2,-2.30414,-3,-2.30414,-2,-2,-2,-2,-2,-2,-3,-3,-2,-3,-3,-3,-3,-3,-3,-3,-2,-2.35,-3,-2.35,-2,-2,-2,-2,-2,-2,-2,-2.25,-3,-2.25,-2,-2,-2,-2,-2,-2 74 | -2,-2,-2.68007,-3,-2.68007,-2,-2,-2,-2,-2,-2,-2,-2.83217,-3,-2.83217,-2,-2,-2,-2,-2,-2,-2,-2.75664,-3,-2.75664,-2,-2,-2,-2,-2,-2,-2,-2.52202,-3,-2.52202,-2,-2,-2,-2,-2,-2,-2,-2.69642,-3,-2.69642,-2,-2,-2,-2,-2,-2,-2,-2.25495,-3,-2.25495,-2,-2,-2,-2,-2,-2,-2,-2.30414,-3,-2.30414,-2,-2,-2,-2,-2,-3,-3,-3,-2,-3,-3,-3,-3,-3,-3,-2,-2,-2.35,-3,-2.35,-2,-2,-2,-2,-2,-2,-2,-2.25,-3,-2.25,-2,-2,-2,-2,-2 75 | -2,-2,-2,-2.68007,-3,-2.68007,-2,-2,-2,-2,-2,-2,-2,-2.83217,-3,-2.83217,-2,-2,-2,-2,-2,-2,-2,-2.75664,-3,-2.75664,-2,-2,-2,-2,-2,-2,-2,-2.52202,-3,-2.52202,-2,-2,-2,-2,-2,-2,-2,-2.69642,-3,-2.69642,-2,-2,-2,-2,-2,-2,-2,-2.25495,-3,-2.25495,-2,-2,-2,-2,-2,-2,-2,-2.30414,-3,-2.30414,-2,-2,-2,-2,-3,-3,-3,-3,-2,-3,-3,-3,-3,-3,-2,-2,-2,-2.35,-3,-2.35,-2,-2,-2,-2,-2,-2,-2,-2.25,-3,-2.25,-2,-2,-2,-2 76 | -2,-2,-2,-2,-2.68007,-3,-2.68007,-2,-2,-2,-2,-2,-2,-2,-2.83217,-3,-2.83217,-2,-2,-2,-2,-2,-2,-2,-2.75664,-3,-2.75664,-2,-2,-2,-2,-2,-2,-2,-2.52202,-3,-2.52202,-2,-2,-2,-2,-2,-2,-2,-2.69642,-3,-2.69642,-2,-2,-2,-2,-2,-2,-2,-2.25495,-3,-2.25495,-2,-2,-2,-2,-2,-2,-2,-2.30414,-3,-2.30414,-2,-2,-2,-3,-3,-3,-3,-3,-2,-3,-3,-3,-3,-2,-2,-2,-2,-2.35,-3,-2.35,-2,-2,-2,-2,-2,-2,-2,-2.25,-3,-2.25,-2,-2,-2 77 | -2,-2,-2,-2,-2,-2.68007,-3,-2.68007,-2,-2,-2,-2,-2,-2,-2,-2.83217,-3,-2.83217,-2,-2,-2,-2,-2,-2,-2,-2.75664,-3,-2.75664,-2,-2,-2,-2,-2,-2,-2,-2.52202,-3,-2.52202,-2,-2,-2,-2,-2,-2,-2,-2.69642,-3,-2.69642,-2,-2,-2,-2,-2,-2,-2,-2.25495,-3,-2.25495,-2,-2,-2,-2,-2,-2,-2,-2.30414,-3,-2.30414,-2,-2,-3,-3,-3,-3,-3,-3,-2,-3,-3,-3,-2,-2,-2,-2,-2,-2.35,-3,-2.35,-2,-2,-2,-2,-2,-2,-2,-2.25,-3,-2.25,-2,-2 78 | -2,-2,-2,-2,-2,-2,-2.68007,-3,-2.68007,-2,-2,-2,-2,-2,-2,-2,-2.83217,-3,-2.83217,-2,-2,-2,-2,-2,-2,-2,-2.75664,-3,-2.75664,-2,-2,-2,-2,-2,-2,-2,-2.52202,-3,-2.52202,-2,-2,-2,-2,-2,-2,-2,-2.69642,-3,-2.69642,-2,-2,-2,-2,-2,-2,-2,-2.25495,-3,-2.25495,-2,-2,-2,-2,-2,-2,-2,-2.30414,-3,-2.30414,-2,-3,-3,-3,-3,-3,-3,-3,-2,-3,-3,-2,-2,-2,-2,-2,-2,-2.35,-3,-2.35,-2,-2,-2,-2,-2,-2,-2,-2.25,-3,-2.25,-2 79 | -2,-2,-2,-2,-2,-2,-2,-2.68007,-3,-2.68007,-2,-2,-2,-2,-2,-2,-2,-2.83217,-3,-2.83217,-2,-2,-2,-2,-2,-2,-2,-2.75664,-3,-2.75664,-2,-2,-2,-2,-2,-2,-2,-2.52202,-3,-2.52202,-2,-2,-2,-2,-2,-2,-2,-2.69642,-3,-2.69642,-2,-2,-2,-2,-2,-2,-2,-2.25495,-3,-2.25495,-2,-2,-2,-2,-2,-2,-2,-2.30414,-3,-2.30414,-3,-3,-3,-3,-3,-3,-3,-3,-2,-3,-2,-2,-2,-2,-2,-2,-2,-2.35,-3,-2.35,-2,-2,-2,-2,-2,-2,-2,-2.25,-3,-2.25 80 | -2.68007,-2,-2,-2,-2,-2,-2,-2,-2.68007,-3,-2.83217,-2,-2,-2,-2,-2,-2,-2,-2.83217,-3,-2.75664,-2,-2,-2,-2,-2,-2,-2,-2.75664,-3,-2.52202,-2,-2,-2,-2,-2,-2,-2,-2.52202,-3,-2.69642,-2,-2,-2,-2,-2,-2,-2,-2.69642,-3,-2.25495,-2,-2,-2,-2,-2,-2,-2,-2.25495,-3,-2.30414,-2,-2,-2,-2,-2,-2,-2,-2.30414,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-2,-2.35,-2,-2,-2,-2,-2,-2,-2,-2.35,-3,-2.25,-2,-2,-2,-2,-2,-2,-2,-2.25,-3 81 | -3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.70711,-2,-2,-2,-2,-2,-2,-2,-2.70711,-3,-2.87464,-2,-2,-2,-2,-2,-2,-2,-2.87464,-3,-2.53852,-2,-2,-2,-2,-2,-2,-2,-2.53852,-3,-2.88459,-2,-2,-2,-2,-2,-2,-2,-2.88459,-3,-2.4717,-2,-2,-2,-2,-2,-2,-2,-2.4717,-3,-2.5,-2,-2,-2,-2,-2,-2,-2,-2.5,-3,-2.35,-2,-2,-2,-2,-2,-2,-2,-2.35,-2,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-2.28284,-2,-2,-2,-2,-2,-2,-2,-2.28284 82 | -2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.70711,-3,-2.70711,-2,-2,-2,-2,-2,-2,-2,-2.87464,-3,-2.87464,-2,-2,-2,-2,-2,-2,-2,-2.53852,-3,-2.53852,-2,-2,-2,-2,-2,-2,-2,-2.88459,-3,-2.88459,-2,-2,-2,-2,-2,-2,-2,-2.4717,-3,-2.4717,-2,-2,-2,-2,-2,-2,-2,-2.5,-3,-2.5,-2,-2,-2,-2,-2,-2,-2,-2.35,-3,-2.35,-2,-2,-2,-2,-2,-2,-2,-3,-2,-3,-3,-3,-3,-3,-3,-3,-3,-2.28284,-3,-2.28284,-2,-2,-2,-2,-2,-2,-2 83 | -2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.70711,-3,-2.70711,-2,-2,-2,-2,-2,-2,-2,-2.87464,-3,-2.87464,-2,-2,-2,-2,-2,-2,-2,-2.53852,-3,-2.53852,-2,-2,-2,-2,-2,-2,-2,-2.88459,-3,-2.88459,-2,-2,-2,-2,-2,-2,-2,-2.4717,-3,-2.4717,-2,-2,-2,-2,-2,-2,-2,-2.5,-3,-2.5,-2,-2,-2,-2,-2,-2,-2,-2.35,-3,-2.35,-2,-2,-2,-2,-2,-2,-3,-3,-2,-3,-3,-3,-3,-3,-3,-3,-2,-2.28284,-3,-2.28284,-2,-2,-2,-2,-2,-2 84 | -2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.70711,-3,-2.70711,-2,-2,-2,-2,-2,-2,-2,-2.87464,-3,-2.87464,-2,-2,-2,-2,-2,-2,-2,-2.53852,-3,-2.53852,-2,-2,-2,-2,-2,-2,-2,-2.88459,-3,-2.88459,-2,-2,-2,-2,-2,-2,-2,-2.4717,-3,-2.4717,-2,-2,-2,-2,-2,-2,-2,-2.5,-3,-2.5,-2,-2,-2,-2,-2,-2,-2,-2.35,-3,-2.35,-2,-2,-2,-2,-2,-3,-3,-3,-2,-3,-3,-3,-3,-3,-3,-2,-2,-2.28284,-3,-2.28284,-2,-2,-2,-2,-2 85 | -2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.70711,-3,-2.70711,-2,-2,-2,-2,-2,-2,-2,-2.87464,-3,-2.87464,-2,-2,-2,-2,-2,-2,-2,-2.53852,-3,-2.53852,-2,-2,-2,-2,-2,-2,-2,-2.88459,-3,-2.88459,-2,-2,-2,-2,-2,-2,-2,-2.4717,-3,-2.4717,-2,-2,-2,-2,-2,-2,-2,-2.5,-3,-2.5,-2,-2,-2,-2,-2,-2,-2,-2.35,-3,-2.35,-2,-2,-2,-2,-3,-3,-3,-3,-2,-3,-3,-3,-3,-3,-2,-2,-2,-2.28284,-3,-2.28284,-2,-2,-2,-2 86 | -2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.70711,-3,-2.70711,-2,-2,-2,-2,-2,-2,-2,-2.87464,-3,-2.87464,-2,-2,-2,-2,-2,-2,-2,-2.53852,-3,-2.53852,-2,-2,-2,-2,-2,-2,-2,-2.88459,-3,-2.88459,-2,-2,-2,-2,-2,-2,-2,-2.4717,-3,-2.4717,-2,-2,-2,-2,-2,-2,-2,-2.5,-3,-2.5,-2,-2,-2,-2,-2,-2,-2,-2.35,-3,-2.35,-2,-2,-2,-3,-3,-3,-3,-3,-2,-3,-3,-3,-3,-2,-2,-2,-2,-2.28284,-3,-2.28284,-2,-2,-2 87 | -2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.70711,-3,-2.70711,-2,-2,-2,-2,-2,-2,-2,-2.87464,-3,-2.87464,-2,-2,-2,-2,-2,-2,-2,-2.53852,-3,-2.53852,-2,-2,-2,-2,-2,-2,-2,-2.88459,-3,-2.88459,-2,-2,-2,-2,-2,-2,-2,-2.4717,-3,-2.4717,-2,-2,-2,-2,-2,-2,-2,-2.5,-3,-2.5,-2,-2,-2,-2,-2,-2,-2,-2.35,-3,-2.35,-2,-2,-3,-3,-3,-3,-3,-3,-2,-3,-3,-3,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284,-2,-2 88 | -2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.70711,-3,-2.70711,-2,-2,-2,-2,-2,-2,-2,-2.87464,-3,-2.87464,-2,-2,-2,-2,-2,-2,-2,-2.53852,-3,-2.53852,-2,-2,-2,-2,-2,-2,-2,-2.88459,-3,-2.88459,-2,-2,-2,-2,-2,-2,-2,-2.4717,-3,-2.4717,-2,-2,-2,-2,-2,-2,-2,-2.5,-3,-2.5,-2,-2,-2,-2,-2,-2,-2,-2.35,-3,-2.35,-2,-3,-3,-3,-3,-3,-3,-3,-2,-3,-3,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284,-2 89 | -2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.70711,-3,-2.70711,-2,-2,-2,-2,-2,-2,-2,-2.87464,-3,-2.87464,-2,-2,-2,-2,-2,-2,-2,-2.53852,-3,-2.53852,-2,-2,-2,-2,-2,-2,-2,-2.88459,-3,-2.88459,-2,-2,-2,-2,-2,-2,-2,-2.4717,-3,-2.4717,-2,-2,-2,-2,-2,-2,-2,-2.5,-3,-2.5,-2,-2,-2,-2,-2,-2,-2,-2.35,-3,-2.35,-3,-3,-3,-3,-3,-3,-3,-3,-2,-3,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284 90 | -2.44721,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.70711,-2,-2,-2,-2,-2,-2,-2,-2.70711,-3,-2.87464,-2,-2,-2,-2,-2,-2,-2,-2.87464,-3,-2.53852,-2,-2,-2,-2,-2,-2,-2,-2.53852,-3,-2.88459,-2,-2,-2,-2,-2,-2,-2,-2.88459,-3,-2.4717,-2,-2,-2,-2,-2,-2,-2,-2.4717,-3,-2.5,-2,-2,-2,-2,-2,-2,-2,-2.5,-3,-2.35,-2,-2,-2,-2,-2,-2,-2,-2.35,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-2,-2.28284,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3 91 | -3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.5831,-2,-2,-2,-2,-2,-2,-2,-2.5831,-3,-2.60415,-2,-2,-2,-2,-2,-2,-2,-2.60415,-3,-2.3,-2,-2,-2,-2,-2,-2,-2,-2.3,-3,-2.60208,-2,-2,-2,-2,-2,-2,-2,-2.60208,-3,-2.20616,-2,-2,-2,-2,-2,-2,-2,-2.20616,-3,-2.22361,-2,-2,-2,-2,-2,-2,-2,-2.22361,-3,-2.25,-2,-2,-2,-2,-2,-2,-2,-2.25,-3,-2.28284,-2,-2,-2,-2,-2,-2,-2,-2.28284,-2,-3,-3,-3,-3,-3,-3,-3,-3,-3 92 | -2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.5831,-3,-2.5831,-2,-2,-2,-2,-2,-2,-2,-2.60415,-3,-2.60415,-2,-2,-2,-2,-2,-2,-2,-2.3,-3,-2.3,-2,-2,-2,-2,-2,-2,-2,-2.60208,-3,-2.60208,-2,-2,-2,-2,-2,-2,-2,-2.20616,-3,-2.20616,-2,-2,-2,-2,-2,-2,-2,-2.22361,-3,-2.22361,-2,-2,-2,-2,-2,-2,-2,-2.25,-3,-2.25,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284,-2,-2,-2,-2,-2,-2,-2,-3,-2,-3,-3,-3,-3,-3,-3,-3,-3 93 | -2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.5831,-3,-2.5831,-2,-2,-2,-2,-2,-2,-2,-2.60415,-3,-2.60415,-2,-2,-2,-2,-2,-2,-2,-2.3,-3,-2.3,-2,-2,-2,-2,-2,-2,-2,-2.60208,-3,-2.60208,-2,-2,-2,-2,-2,-2,-2,-2.20616,-3,-2.20616,-2,-2,-2,-2,-2,-2,-2,-2.22361,-3,-2.22361,-2,-2,-2,-2,-2,-2,-2,-2.25,-3,-2.25,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284,-2,-2,-2,-2,-2,-2,-3,-3,-2,-3,-3,-3,-3,-3,-3,-3 94 | -2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.5831,-3,-2.5831,-2,-2,-2,-2,-2,-2,-2,-2.60415,-3,-2.60415,-2,-2,-2,-2,-2,-2,-2,-2.3,-3,-2.3,-2,-2,-2,-2,-2,-2,-2,-2.60208,-3,-2.60208,-2,-2,-2,-2,-2,-2,-2,-2.20616,-3,-2.20616,-2,-2,-2,-2,-2,-2,-2,-2.22361,-3,-2.22361,-2,-2,-2,-2,-2,-2,-2,-2.25,-3,-2.25,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284,-2,-2,-2,-2,-2,-3,-3,-3,-2,-3,-3,-3,-3,-3,-3 95 | -2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.5831,-3,-2.5831,-2,-2,-2,-2,-2,-2,-2,-2.60415,-3,-2.60415,-2,-2,-2,-2,-2,-2,-2,-2.3,-3,-2.3,-2,-2,-2,-2,-2,-2,-2,-2.60208,-3,-2.60208,-2,-2,-2,-2,-2,-2,-2,-2.20616,-3,-2.20616,-2,-2,-2,-2,-2,-2,-2,-2.22361,-3,-2.22361,-2,-2,-2,-2,-2,-2,-2,-2.25,-3,-2.25,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284,-2,-2,-2,-2,-3,-3,-3,-3,-2,-3,-3,-3,-3,-3 96 | -2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.5831,-3,-2.5831,-2,-2,-2,-2,-2,-2,-2,-2.60415,-3,-2.60415,-2,-2,-2,-2,-2,-2,-2,-2.3,-3,-2.3,-2,-2,-2,-2,-2,-2,-2,-2.60208,-3,-2.60208,-2,-2,-2,-2,-2,-2,-2,-2.20616,-3,-2.20616,-2,-2,-2,-2,-2,-2,-2,-2.22361,-3,-2.22361,-2,-2,-2,-2,-2,-2,-2,-2.25,-3,-2.25,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284,-2,-2,-2,-3,-3,-3,-3,-3,-2,-3,-3,-3,-3 97 | -2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.5831,-3,-2.5831,-2,-2,-2,-2,-2,-2,-2,-2.60415,-3,-2.60415,-2,-2,-2,-2,-2,-2,-2,-2.3,-3,-2.3,-2,-2,-2,-2,-2,-2,-2,-2.60208,-3,-2.60208,-2,-2,-2,-2,-2,-2,-2,-2.20616,-3,-2.20616,-2,-2,-2,-2,-2,-2,-2,-2.22361,-3,-2.22361,-2,-2,-2,-2,-2,-2,-2,-2.25,-3,-2.25,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284,-2,-2,-3,-3,-3,-3,-3,-3,-2,-3,-3,-3 98 | -2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.5831,-3,-2.5831,-2,-2,-2,-2,-2,-2,-2,-2.60415,-3,-2.60415,-2,-2,-2,-2,-2,-2,-2,-2.3,-3,-2.3,-2,-2,-2,-2,-2,-2,-2,-2.60208,-3,-2.60208,-2,-2,-2,-2,-2,-2,-2,-2.20616,-3,-2.20616,-2,-2,-2,-2,-2,-2,-2,-2.22361,-3,-2.22361,-2,-2,-2,-2,-2,-2,-2,-2.25,-3,-2.25,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284,-2,-3,-3,-3,-3,-3,-3,-3,-2,-3,-3 99 | -2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.44721,-2,-2,-2,-2,-2,-2,-2,-2.5831,-3,-2.5831,-2,-2,-2,-2,-2,-2,-2,-2.60415,-3,-2.60415,-2,-2,-2,-2,-2,-2,-2,-2.3,-3,-2.3,-2,-2,-2,-2,-2,-2,-2,-2.60208,-3,-2.60208,-2,-2,-2,-2,-2,-2,-2,-2.20616,-3,-2.20616,-2,-2,-2,-2,-2,-2,-2,-2.22361,-3,-2.22361,-2,-2,-2,-2,-2,-2,-2,-2.25,-3,-2.25,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-2.28284,-3,-3,-3,-3,-3,-3,-3,-3,-2,-3 100 | -2.44721,-2,-2,-2,-2,-2,-2,-2,-2.44721,-3,-2.5831,-2,-2,-2,-2,-2,-2,-2,-2.5831,-3,-2.60415,-2,-2,-2,-2,-2,-2,-2,-2.60415,-3,-2.3,-2,-2,-2,-2,-2,-2,-2,-2.3,-3,-2.60208,-2,-2,-2,-2,-2,-2,-2,-2.60208,-3,-2.20616,-2,-2,-2,-2,-2,-2,-2,-2.20616,-3,-2.22361,-2,-2,-2,-2,-2,-2,-2,-2.22361,-3,-2.25,-2,-2,-2,-2,-2,-2,-2,-2.25,-3,-2.28284,-2,-2,-2,-2,-2,-2,-2,-2.28284,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-2 101 | --------------------------------------------------------------------------------