From 2d352ea302fcf4bc60cb72e036ac8d5049dfb652 Mon Sep 17 00:00:00 2001 From: Andrew Date: Mon, 17 Feb 2025 14:51:06 +0000 Subject: [PATCH] [CT421]: Assignment 1 code progress --- .../assignments/assignment1/code/output.csv | 882 ++++++++++++++++++ .../assignments/assignment1/code/salesman.py | 206 +++- 2 files changed, 1081 insertions(+), 7 deletions(-) create mode 100644 year4/semester2/CT421/assignments/assignment1/code/output.csv diff --git a/year4/semester2/CT421/assignments/assignment1/code/output.csv b/year4/semester2/CT421/assignments/assignment1/code/output.csv new file mode 100644 index 00000000..3886bc09 --- /dev/null +++ b/year4/semester2/CT421/assignments/assignment1/code/output.csv @@ -0,0 +1,882 @@ +timestamp,generation,population_size,avg_fitness,generation_best,current_best +1739792495.3412035,0,100,29811.00022571601,24463.146362448097,24463.146362448097 +1739792495.3433146,0,118,29716.919441151353,25478.485816821492,24463.146362448097 +1739792495.3455496,1,137,29768.209507301384,25478.485816821492,24463.146362448097 +1739792495.3479667,2,153,29746.589075699114,25478.485816821492,24463.146362448097 +1739792495.350332,3,169,29509.299721914493,25478.485816821492,24463.146362448097 +1739792495.3527706,4,180,29399.075374787622,25478.485816821492,24463.146362448097 +1739792495.3553238,5,193,29574.561444586012,25478.485816821492,24463.146362448097 +1739792495.3578343,6,200,29516.09388510257,24913.674876673318,24463.146362448097 +1739792495.3604124,7,212,29558.429710240627,24913.674876673318,24463.146362448097 +1739792495.3630848,8,223,29520.02026486022,24602.457832625896,24463.146362448097 +1739792495.3657336,9,235,29571.319845795915,24913.674876673318,24463.146362448097 +1739792495.3684278,10,245,29543.366908732554,24913.674876673318,24463.146362448097 +1739792495.3712153,11,255,29519.89213196502,25770.61522353716,24463.146362448097 +1739792495.3740337,12,264,29586.830798740884,25770.61522353716,24463.146362448097 +1739792495.3769023,13,270,29679.327446063893,25823.776477013867,24463.146362448097 +1739792495.3798852,14,280,29745.290166700357,25853.31574649249,24463.146362448097 +1739792495.3828123,15,284,29757.893343799937,25756.77676340988,24463.146362448097 +1739792495.3857934,16,295,29649.381976886023,25756.77676340988,24463.146362448097 +1739792495.3888547,17,299,29779.189233752604,25756.77676340988,24463.146362448097 +1739792495.391923,18,309,29724.838169187307,25756.77676340988,24463.146362448097 +1739792495.3950653,19,317,29721.884346338655,25756.77676340988,24463.146362448097 +1739792495.3982162,20,319,29632.56301349741,25756.77676340988,24463.146362448097 +1739792495.4013844,21,324,29637.040944689004,26223.607981355355,24463.146362448097 +1739792495.404601,22,327,29623.592798388447,26126.526985474033,24463.146362448097 +1739792495.4078271,23,338,29632.89470626923,26126.526985474033,24463.146362448097 +1739792495.4111218,24,345,29746.471554255415,25410.770183284814,24463.146362448097 +1739792495.4144833,25,352,29690.815911774334,25133.623665110754,24463.146362448097 +1739792495.4180148,26,356,29691.703799902403,25133.623665110754,24463.146362448097 +1739792495.4214032,27,368,29747.16430190627,25133.623665110754,24463.146362448097 +1739792495.424853,28,374,29736.635830660245,25133.623665110754,24463.146362448097 +1739792495.4283328,29,380,29663.391617503938,25133.623665110754,24463.146362448097 +1739792495.4318607,30,387,29621.376444134803,25133.623665110754,24463.146362448097 +1739792495.435408,31,393,29638.266612042305,25133.623665110754,24463.146362448097 +1739792495.4390092,32,400,29588.199270405323,25133.623665110754,24463.146362448097 +1739792495.4426587,33,407,29610.303642781306,25133.623665110754,24463.146362448097 +1739792495.4463623,34,414,29631.487795483135,25133.623665110754,24463.146362448097 +1739792495.4500973,35,420,29627.28520086331,25133.623665110754,24463.146362448097 +1739792495.4541276,36,425,29625.58323391906,25028.991567469675,24463.146362448097 +1739792495.4580426,37,430,29554.81142963602,25028.991567469675,24463.146362448097 +1739792495.4618192,38,434,29664.627054363995,25028.991567469675,24463.146362448097 +1739792495.4656558,39,437,29697.721584340128,25065.35987271647,24463.146362448097 +1739792495.46944,40,443,29706.260186418353,25065.35987271647,24463.146362448097 +1739792495.4733546,41,447,29660.819028227364,25065.35987271647,24463.146362448097 +1739792495.4771543,42,451,29626.239804454184,25065.35987271647,24463.146362448097 +1739792495.4810894,43,455,29581.233672876755,25065.35987271647,24463.146362448097 +1739792495.4849637,44,457,29543.826763763107,25065.35987271647,24463.146362448097 +1739792495.4889758,45,459,29565.034100479646,25065.35987271647,24463.146362448097 +1739792495.492902,46,461,29509.028740672155,25065.35987271647,24463.146362448097 +1739792495.4969208,47,464,29491.38123794688,25220.552625583477,24463.146362448097 +1739792495.5009174,48,472,29430.392647405395,25220.552625583477,24463.146362448097 +1739792495.5051184,49,476,29434.725883888525,25698.695293309116,24463.146362448097 +1739792495.5094085,50,478,29427.20639587089,25698.695293309116,24463.146362448097 +1739792495.513749,51,482,29431.80746795821,25704.617360206823,24463.146362448097 +1739792495.5181284,52,488,29426.383031631478,25087.814356196406,24463.146362448097 +1739792495.522601,53,492,29428.17860300119,24793.590837847416,24463.146362448097 +1739792495.5269518,54,497,29399.017732743487,24426.476916651183,24426.476916651183 +1739792495.5314672,55,503,29429.667829477403,24426.476916651183,24426.476916651183 +1739792495.5360196,56,507,29480.33553142271,24426.476916651183,24426.476916651183 +1739792495.540703,57,512,29457.276375831356,24426.476916651183,24426.476916651183 +1739792495.5454893,58,515,29515.11520964415,24426.476916651183,24426.476916651183 +1739792495.550117,59,520,29464.817952739668,24426.476916651183,24426.476916651183 +1739792495.554871,60,522,29517.584874172193,24793.590837847416,24426.476916651183 +1739792495.5595717,61,526,29517.17661385085,24793.590837847416,24426.476916651183 +1739792495.564276,62,531,29536.469228579703,24793.590837847416,24426.476916651183 +1739792495.5690415,63,534,29598.020941047056,25087.814356196406,24426.476916651183 +1739792495.5738852,64,539,29575.851326185413,25087.814356196406,24426.476916651183 +1739792495.5786316,65,541,29578.867707067824,25087.814356196406,24426.476916651183 +1739792495.5835192,66,545,29572.52784072358,25087.814356196406,24426.476916651183 +1739792495.5885205,67,551,29553.50233073102,25087.814356196406,24426.476916651183 +1739792495.5934722,68,556,29551.960455953395,25087.814356196406,24426.476916651183 +1739792495.5985441,69,564,29579.547842447835,25087.814356196406,24426.476916651183 +1739792495.60399,70,570,29559.680440005184,24635.55403133076,24426.476916651183 +1739792495.609513,71,574,29607.859868083488,24635.55403133076,24426.476916651183 +1739792495.6142168,72,579,29620.036241932045,24321.404632147394,24321.404632147394 +1739792495.6191094,73,587,29606.37732835015,25334.91021056697,24321.404632147394 +1739792495.6242676,74,590,29647.080359508596,25334.91021056697,24321.404632147394 +1739792495.6294866,75,595,29622.322146324157,25334.91021056697,24321.404632147394 +1739792495.634774,76,600,29617.3108806286,25334.91021056697,24321.404632147394 +1739792495.640323,77,600,29607.723397039397,25334.91021056697,24321.404632147394 +1739792495.6462224,78,602,29629.51224049602,25334.91021056697,24321.404632147394 +1739792495.652583,79,604,29645.12028314122,25334.91021056697,24321.404632147394 +1739792495.659323,80,608,29674.358110117573,25334.91021056697,24321.404632147394 +1739792495.6660864,81,612,29690.062695210385,25334.91021056697,24321.404632147394 +1739792495.6725984,82,618,29688.480061601345,25273.359120957626,24321.404632147394 +1739792495.6787858,83,621,29708.950981250473,25273.359120957626,24321.404632147394 +1739792495.684909,84,624,29694.326647576596,25273.359120957626,24321.404632147394 +1739792495.6910784,85,627,29653.455955186873,25273.359120957626,24321.404632147394 +1739792495.697005,86,631,29632.878873282945,25273.359120957626,24321.404632147394 +1739792495.7030458,87,636,29610.670762079008,24985.168640399836,24321.404632147394 +1739792495.7090647,88,639,29586.80464050993,24985.168640399836,24321.404632147394 +1739792495.7151012,89,642,29578.052883095796,24474.204402049865,24321.404632147394 +1739792495.7212603,90,646,29692.332352874306,24985.168640399836,24321.404632147394 +1739792495.727285,91,651,29714.767327010974,24985.168640399836,24321.404632147394 +1739792495.7333648,92,656,29728.90106212964,24985.168640399836,24321.404632147394 +1739792495.7396388,93,661,29698.415872867492,24985.168640399836,24321.404632147394 +1739792495.7457914,94,661,29696.930488623082,24985.168640399836,24321.404632147394 +1739792495.7520318,95,665,29733.897801151492,24985.168640399836,24321.404632147394 +1739792495.758309,96,669,29734.49587090014,25273.359120957626,24321.404632147394 +1739792495.764662,97,671,29778.89154537319,25273.359120957626,24321.404632147394 +1739792495.7712302,98,673,29749.26581276467,25273.359120957626,24321.404632147394 +1739792495.777596,99,679,29716.147951294548,25273.359120957626,24321.404632147394 +1739792495.7841883,100,683,29767.73767227286,25273.359120957626,24321.404632147394 +1739792495.7907734,101,685,29768.126183861663,25273.359120957626,24321.404632147394 +1739792495.7973928,102,689,29820.004719774082,25273.359120957626,24321.404632147394 +1739792495.8041222,103,694,29803.891070146634,25273.359120957626,24321.404632147394 +1739792495.8109622,104,698,29755.427866371865,25273.359120957626,24321.404632147394 +1739792495.8176863,105,702,29730.52808718465,24710.59479062166,24321.404632147394 +1739792495.8244183,106,705,29768.850543943285,25273.359120957626,24321.404632147394 +1739792495.8312144,107,709,29750.018958224253,25273.359120957626,24321.404632147394 +1739792495.838253,108,709,29718.620675346952,25273.359120957626,24321.404632147394 +1739792495.845152,109,710,29717.176984056983,25273.359120957626,24321.404632147394 +1739792495.8522048,110,711,29698.658995862523,25273.359120957626,24321.404632147394 +1739792495.8590188,111,711,29672.865792530567,25273.359120957626,24321.404632147394 +1739792495.8659484,112,717,29656.453135714873,24854.170995924076,24321.404632147394 +1739792495.8731353,113,719,29639.793479344775,23213.149082044343,23213.149082044343 +1739792495.8801184,114,720,29688.66530978642,23213.149082044343,23213.149082044343 +1739792495.8873484,115,725,29671.81989705295,23213.149082044343,23213.149082044343 +1739792495.8943439,116,728,29669.292796261285,23213.149082044343,23213.149082044343 +1739792495.901525,117,732,29642.350638214804,23213.149082044343,23213.149082044343 +1739792495.9088304,118,738,29651.94245116185,23213.149082044343,23213.149082044343 +1739792495.9161503,119,742,29683.004443844886,23213.149082044343,23213.149082044343 +1739792495.9234726,120,745,29656.714113859416,23213.149082044343,23213.149082044343 +1739792495.9307063,121,746,29630.60352629955,23213.149082044343,23213.149082044343 +1739792495.9380052,122,748,29666.989591635844,23213.149082044343,23213.149082044343 +1739792495.9452999,123,750,29702.12024138279,23213.149082044343,23213.149082044343 +1739792495.952754,124,752,29705.728793716375,23213.149082044343,23213.149082044343 +1739792495.9603603,125,752,29770.575051749074,23213.149082044343,23213.149082044343 +1739792495.9682837,126,754,29773.328927701175,23213.149082044343,23213.149082044343 +1739792495.9761167,127,757,29751.37817973507,23213.149082044343,23213.149082044343 +1739792495.9839256,128,761,29755.371033145977,23213.149082044343,23213.149082044343 +1739792495.9917183,129,763,29754.53382145524,23213.149082044343,23213.149082044343 +1739792495.999419,130,767,29785.181326954094,23213.149082044343,23213.149082044343 +1739792496.007218,131,771,29855.17562731425,23213.149082044343,23213.149082044343 +1739792496.014952,132,773,29823.82683565977,23213.149082044343,23213.149082044343 +1739792496.0230277,133,773,29824.48672021995,23213.149082044343,23213.149082044343 +1739792496.0307593,134,777,29808.714770687726,23213.149082044343,23213.149082044343 +1739792496.0386002,135,779,29791.03424292737,23213.149082044343,23213.149082044343 +1739792496.0463123,136,784,29788.684395527045,23213.149082044343,23213.149082044343 +1739792496.0543382,137,787,29778.65382266978,23213.149082044343,23213.149082044343 +1739792496.0621233,138,792,29796.01420932674,23213.149082044343,23213.149082044343 +1739792496.0701072,139,793,29783.91012761548,23213.149082044343,23213.149082044343 +1739792496.0779197,140,794,29761.34504987737,23213.149082044343,23213.149082044343 +1739792496.0858822,141,798,29791.255578996024,23213.149082044343,23213.149082044343 +1739792496.09384,142,801,29750.263282525804,23213.149082044343,23213.149082044343 +1739792496.1020336,143,803,29728.38101153514,23213.149082044343,23213.149082044343 +1739792496.1103134,144,803,29750.40350168308,23213.149082044343,23213.149082044343 +1739792496.118619,145,809,29774.503733975453,23213.149082044343,23213.149082044343 +1739792496.1268785,146,817,29734.11977700069,23213.149082044343,23213.149082044343 +1739792496.135249,147,820,29770.222115152388,23213.149082044343,23213.149082044343 +1739792496.143721,148,828,29759.20719210186,23213.149082044343,23213.149082044343 +1739792496.1521215,149,832,29753.088866676793,23213.149082044343,23213.149082044343 +1739792496.1604757,150,835,29758.40224637541,23213.149082044343,23213.149082044343 +1739792496.168699,151,837,29759.14695609883,23213.149082044343,23213.149082044343 +1739792496.177123,152,848,29736.93428339686,23213.149082044343,23213.149082044343 +1739792496.1854339,153,851,29782.703407310793,23213.149082044343,23213.149082044343 +1739792496.1937246,154,853,29800.610188264014,23213.149082044343,23213.149082044343 +1739792496.201985,155,854,29791.45477721101,23213.149082044343,23213.149082044343 +1739792496.210273,156,858,29820.62249884964,23390.329076817598,23213.149082044343 +1739792496.2183962,157,858,29816.828653575547,23390.329076817598,23213.149082044343 +1739792496.2265553,158,860,29829.90157157328,24652.663979014666,23213.149082044343 +1739792496.2346778,159,861,29852.62782737644,24399.78286279196,23213.149082044343 +1739792496.2429416,160,864,29850.301442773667,24399.78286279196,23213.149082044343 +1739792496.2510781,161,865,29857.116049494765,24399.78286279196,23213.149082044343 +1739792496.2592802,162,865,29847.35157914193,23780.126577648454,23213.149082044343 +1739792496.2675312,163,866,29828.6815391761,23780.126577648454,23213.149082044343 +1739792496.2757688,164,869,29824.03252766408,23780.126577648454,23213.149082044343 +1739792496.2840405,165,870,29806.724398255115,23780.126577648454,23213.149082044343 +1739792496.2924755,166,875,29838.325658167738,23780.126577648454,23213.149082044343 +1739792496.3007557,167,875,29858.64420664031,23780.126577648454,23213.149082044343 +1739792496.3091638,168,877,29846.29037976146,23780.126577648454,23213.149082044343 +1739792496.317594,169,881,29832.62991439586,23780.126577648454,23213.149082044343 +1739792496.3259542,170,883,29850.3425270512,23780.126577648454,23213.149082044343 +1739792496.334323,171,883,29855.80018615417,23780.126577648454,23213.149082044343 +1739792496.3428073,172,886,29891.755161346733,23780.126577648454,23213.149082044343 +1739792496.3511872,173,888,29885.962833518486,24399.78286279196,23213.149082044343 +1739792496.3595676,174,891,29883.817911217266,24399.78286279196,23213.149082044343 +1739792496.3679743,175,893,29883.413877624553,24835.133519476105,23213.149082044343 +1739792496.3765032,176,899,29900.192616283497,24835.133519476105,23213.149082044343 +1739792496.3850896,177,901,29913.38062809923,24835.133519476105,23213.149082044343 +1739792496.3936021,178,907,29908.667972027717,24835.133519476105,23213.149082044343 +1739792496.4023004,179,913,29929.60463013729,24835.133519476105,23213.149082044343 +1739792496.4109473,180,915,29902.20511823086,24835.133519476105,23213.149082044343 +1739792496.4197798,181,917,29917.347126485896,24835.133519476105,23213.149082044343 +1739792496.4285183,182,920,29924.563041248213,24835.133519476105,23213.149082044343 +1739792496.4374487,183,924,29926.76115835232,24835.133519476105,23213.149082044343 +1739792496.4461603,184,928,29936.551607243007,24835.133519476105,23213.149082044343 +1739792496.455229,185,928,29967.14281594228,24835.133519476105,23213.149082044343 +1739792496.464149,186,930,29981.187172535705,24455.926470517974,23213.149082044343 +1739792496.4737163,187,933,29986.51902283441,24455.926470517974,23213.149082044343 +1739792496.483115,188,934,29981.473983242362,24455.926470517974,23213.149082044343 +1739792496.4924552,189,935,29992.442040207152,24455.926470517974,23213.149082044343 +1739792496.501589,190,938,30019.722708374866,24455.926470517974,23213.149082044343 +1739792496.510847,191,940,29996.741267591085,24455.926470517974,23213.149082044343 +1739792496.5202055,192,944,29988.330526304962,24455.926470517974,23213.149082044343 +1739792496.5294657,193,948,30030.29689991037,24455.926470517974,23213.149082044343 +1739792496.538722,194,950,30002.443672073347,24455.926470517974,23213.149082044343 +1739792496.5477502,195,952,30017.008998868627,24455.926470517974,23213.149082044343 +1739792496.557018,196,955,30029.12283588538,24455.926470517974,23213.149082044343 +1739792496.5662377,197,960,30016.052956731986,24455.926470517974,23213.149082044343 +1739792496.575438,198,962,30011.3576074543,24455.926470517974,23213.149082044343 +1739792496.584626,199,965,29994.913824472173,24455.926470517974,23213.149082044343 +1739792496.5937839,200,966,29985.12511702994,24455.926470517974,23213.149082044343 +1739792496.6030376,201,967,30015.262682358552,24455.926470517974,23213.149082044343 +1739792496.6122463,202,969,30038.15906313499,24455.926470517974,23213.149082044343 +1739792496.6215558,203,971,30013.810226707566,24455.926470517974,23213.149082044343 +1739792496.6307487,204,971,30006.307922447282,24455.926470517974,23213.149082044343 +1739792496.6401522,205,975,29956.473392390213,24455.926470517974,23213.149082044343 +1739792496.6496077,206,979,29919.711806933832,24002.440282889213,23213.149082044343 +1739792496.6592767,207,979,29942.838937667584,24002.440282889213,23213.149082044343 +1739792496.6693075,208,981,29941.061175244075,24002.440282889213,23213.149082044343 +1739792496.6800625,209,986,29930.064339981327,24002.440282889213,23213.149082044343 +1739792496.6915202,210,986,29915.869777912154,24002.440282889213,23213.149082044343 +1739792496.7026217,211,988,29928.294904702765,24002.440282889213,23213.149082044343 +1739792496.713135,212,990,29945.844860213154,24002.440282889213,23213.149082044343 +1739792496.7234378,213,993,29953.6732343276,24002.440282889213,23213.149082044343 +1739792496.7332106,214,997,29957.03957247286,24002.440282889213,23213.149082044343 +1739792496.743022,215,1000,29958.091652516945,24002.440282889213,23213.149082044343 +1739792496.7525535,216,1002,29960.032216374922,24002.440282889213,23213.149082044343 +1739792496.7620738,217,1007,29952.01921311563,24002.440282889213,23213.149082044343 +1739792496.7717848,218,1010,29970.652131836217,24002.440282889213,23213.149082044343 +1739792496.7812686,219,1012,29966.087503826537,24002.440282889213,23213.149082044343 +1739792496.7907999,220,1017,29957.87407629798,24002.440282889213,23213.149082044343 +1739792496.800146,221,1019,29984.17284964546,24002.440282889213,23213.149082044343 +1739792496.8096514,222,1023,29974.415622144294,24002.440282889213,23213.149082044343 +1739792496.819251,223,1027,29960.31261220333,24002.440282889213,23213.149082044343 +1739792496.8287332,224,1027,29963.624556092705,24002.440282889213,23213.149082044343 +1739792496.8384407,225,1030,30002.535830385958,24002.440282889213,23213.149082044343 +1739792496.8481991,226,1033,29985.42467725144,24002.440282889213,23213.149082044343 +1739792496.858023,227,1035,29977.284181857096,24002.440282889213,23213.149082044343 +1739792496.8676996,228,1035,29986.552498673707,24002.440282889213,23213.149082044343 +1739792496.8775504,229,1040,29980.092029940963,24002.440282889213,23213.149082044343 +1739792496.8875241,230,1042,29968.34367671187,24002.440282889213,23213.149082044343 +1739792496.8972712,231,1048,29968.36508813909,24002.440282889213,23213.149082044343 +1739792496.9071898,232,1048,29982.66900779442,24002.440282889213,23213.149082044343 +1739792496.9167845,233,1051,29994.0050306742,24635.69465515659,23213.149082044343 +1739792496.9265835,234,1054,29997.228856388876,24635.69465515659,23213.149082044343 +1739792496.9364312,235,1056,29977.310660538107,24635.69465515659,23213.149082044343 +1739792496.9462025,236,1058,29951.151072040637,24635.69465515659,23213.149082044343 +1739792496.956221,237,1059,29903.4293308802,24635.69465515659,23213.149082044343 +1739792496.966181,238,1061,29885.71963524356,24501.962459580413,23213.149082044343 +1739792496.9766989,239,1064,29923.79139527011,24501.962459580413,23213.149082044343 +1739792496.9874964,240,1064,29935.594165682982,24501.962459580413,23213.149082044343 +1739792496.9978333,241,1068,29940.360852228834,24501.962459580413,23213.149082044343 +1739792497.0083175,242,1069,29928.445461172294,24501.962459580413,23213.149082044343 +1739792497.0186489,243,1075,29942.69298093246,24501.962459580413,23213.149082044343 +1739792497.0288875,244,1077,29932.952629960346,24501.962459580413,23213.149082044343 +1739792497.039254,245,1078,29897.502419967095,24501.962459580413,23213.149082044343 +1739792497.049296,246,1080,29891.845305935156,24501.962459580413,23213.149082044343 +1739792497.0594788,247,1083,29882.58733907424,24501.962459580413,23213.149082044343 +1739792497.069507,248,1084,29845.83667125586,24501.962459580413,23213.149082044343 +1739792497.0796454,249,1086,29837.200143022186,24501.962459580413,23213.149082044343 +1739792497.089778,250,1089,29821.104214849143,23596.150666869195,23213.149082044343 +1739792497.1003156,251,1093,29803.641478634447,23596.150666869195,23213.149082044343 +1739792497.110592,252,1095,29830.744139353374,23596.150666869195,23213.149082044343 +1739792497.1208339,253,1098,29832.46743054057,23596.150666869195,23213.149082044343 +1739792497.1307535,254,1099,29814.952003903796,23596.150666869195,23213.149082044343 +1739792497.1409392,255,1100,29793.88572752205,23596.150666869195,23213.149082044343 +1739792497.1514697,256,1102,29807.314452906,23884.050765649823,23213.149082044343 +1739792497.1621315,257,1105,29775.05334753136,23884.050765649823,23213.149082044343 +1739792497.172861,258,1107,29802.186759849148,24357.19246763639,23213.149082044343 +1739792497.1833677,259,1109,29810.166272809867,24357.19246763639,23213.149082044343 +1739792497.1938212,260,1111,29809.02753936388,24357.19246763639,23213.149082044343 +1739792497.2042673,261,1113,29823.891460412528,24357.19246763639,23213.149082044343 +1739792497.2147422,262,1117,29826.138366108342,24357.19246763639,23213.149082044343 +1739792497.2252402,263,1122,29798.351461140293,24357.19246763639,23213.149082044343 +1739792497.2356355,264,1123,29769.026913740745,24357.19246763639,23213.149082044343 +1739792497.246115,265,1127,29737.459653250855,24357.19246763639,23213.149082044343 +1739792497.25668,266,1132,29729.00565011922,24357.19246763639,23213.149082044343 +1739792497.267091,267,1135,29733.870251518725,24357.19246763639,23213.149082044343 +1739792497.2775795,268,1136,29725.166993370156,24357.19246763639,23213.149082044343 +1739792497.2880945,269,1139,29710.607498386522,24357.19246763639,23213.149082044343 +1739792497.298516,270,1141,29703.703328678894,24357.19246763639,23213.149082044343 +1739792497.3089767,271,1143,29710.20451911544,24357.19246763639,23213.149082044343 +1739792497.3194778,272,1143,29659.547447609195,24357.19246763639,23213.149082044343 +1739792497.3298345,273,1143,29662.90772745881,24357.19246763639,23213.149082044343 +1739792497.3402445,274,1144,29681.814919669287,24357.19246763639,23213.149082044343 +1739792497.3505538,275,1144,29698.30580462002,24357.19246763639,23213.149082044343 +1739792497.3609788,276,1148,29697.122360206504,24357.19246763639,23213.149082044343 +1739792497.3715377,277,1151,29686.319381518697,24357.19246763639,23213.149082044343 +1739792497.3819146,278,1152,29666.4286198903,24357.19246763639,23213.149082044343 +1739792497.3925748,279,1154,29690.6439997859,24501.962459580413,23213.149082044343 +1739792497.4031355,280,1155,29722.36608060235,24501.962459580413,23213.149082044343 +1739792497.413608,281,1155,29734.907660980785,24083.875577659594,23213.149082044343 +1739792497.424222,282,1156,29760.07252073161,24083.875577659594,23213.149082044343 +1739792497.434664,283,1160,29747.126327760896,24083.875577659594,23213.149082044343 +1739792497.4453413,284,1162,29747.100880786842,24083.875577659594,23213.149082044343 +1739792497.4561381,285,1163,29759.801678185075,24083.875577659594,23213.149082044343 +1739792497.4666092,286,1167,29763.56685650144,24083.875577659594,23213.149082044343 +1739792497.4772868,287,1168,29776.45532745718,24083.875577659594,23213.149082044343 +1739792497.488648,288,1170,29766.987483691864,24083.875577659594,23213.149082044343 +1739792497.499674,289,1171,29773.87311285866,24083.875577659594,23213.149082044343 +1739792497.510821,290,1172,29769.373934924086,24083.875577659594,23213.149082044343 +1739792497.5219867,291,1176,29794.90833792784,24083.875577659594,23213.149082044343 +1739792497.5328362,292,1177,29794.43206629099,24083.875577659594,23213.149082044343 +1739792497.5437534,293,1180,29820.38895357363,24083.875577659594,23213.149082044343 +1739792497.5547297,294,1185,29815.134209018306,24083.875577659594,23213.149082044343 +1739792497.5655348,295,1186,29814.362427102762,24083.875577659594,23213.149082044343 +1739792497.576455,296,1187,29817.283334757263,24083.875577659594,23213.149082044343 +1739792497.5873923,297,1190,29823.07004055777,24083.875577659594,23213.149082044343 +1739792497.598144,298,1192,29816.089908584432,24083.875577659594,23213.149082044343 +1739792497.6093335,299,1195,29809.607467248636,24083.875577659594,23213.149082044343 +1739792497.6205635,300,1199,29824.482300618434,24083.875577659594,23213.149082044343 +1739792497.6315007,301,1200,29832.496270328593,24083.875577659594,23213.149082044343 +1739792497.6427069,302,1202,29859.968376451718,24083.875577659594,23213.149082044343 +1739792497.653948,303,1204,29875.499407188578,24709.719085849276,23213.149082044343 +1739792497.6654494,304,1205,29874.096774143796,24709.719085849276,23213.149082044343 +1739792497.6769745,305,1209,29884.122162154217,24709.719085849276,23213.149082044343 +1739792497.688479,306,1209,29865.6420775696,24588.065153865075,23213.149082044343 +1739792497.7004411,307,1210,29852.46797191053,24588.065153865075,23213.149082044343 +1739792497.7135758,308,1212,29852.077860014993,24588.065153865075,23213.149082044343 +1739792497.7268763,309,1212,29840.903439731253,24588.065153865075,23213.149082044343 +1739792497.739187,310,1215,29833.790139264725,24588.065153865075,23213.149082044343 +1739792497.750872,311,1217,29812.270708064374,24588.065153865075,23213.149082044343 +1739792497.7624013,312,1217,29832.565065706323,24588.065153865075,23213.149082044343 +1739792497.77391,313,1218,29865.560759906497,23828.66500589972,23213.149082044343 +1739792497.786512,314,1219,29878.021577467163,23828.66500589972,23213.149082044343 +1739792497.798363,315,1221,29838.372757840905,23828.66500589972,23213.149082044343 +1739792497.8094301,316,1225,29863.65325973507,23828.66500589972,23213.149082044343 +1739792497.8203435,317,1227,29848.700586702354,23828.66500589972,23213.149082044343 +1739792497.831274,318,1229,29875.72478138772,23828.66500589972,23213.149082044343 +1739792497.8419716,319,1229,29864.418811407635,23828.66500589972,23213.149082044343 +1739792497.8532047,320,1231,29842.47371355066,23828.66500589972,23213.149082044343 +1739792497.8644142,321,1232,29846.274611940007,23828.66500589972,23213.149082044343 +1739792497.8757606,322,1232,29856.809693066258,23828.66500589972,23213.149082044343 +1739792497.8872414,323,1234,29844.77858964623,23776.788926372148,23213.149082044343 +1739792497.898653,324,1236,29838.687228356914,23776.788926372148,23213.149082044343 +1739792497.9100864,325,1237,29852.168834229597,23776.788926372148,23213.149082044343 +1739792497.9216373,326,1237,29849.13079041003,23828.66500589972,23213.149082044343 +1739792497.933206,327,1238,29826.349503618734,23828.66500589972,23213.149082044343 +1739792497.94469,328,1239,29823.06272913776,23828.66500589972,23213.149082044343 +1739792497.9563768,329,1242,29842.36788681574,23828.66500589972,23213.149082044343 +1739792497.967889,330,1245,29841.752364948774,23828.66500589972,23213.149082044343 +1739792497.9794033,331,1247,29822.70555260626,23828.66500589972,23213.149082044343 +1739792497.9913607,332,1251,29836.609117755197,23828.66500589972,23213.149082044343 +1739792498.0034013,333,1254,29839.232659658395,23828.66500589972,23213.149082044343 +1739792498.0150952,334,1254,29843.903298652534,23828.66500589972,23213.149082044343 +1739792498.0268805,335,1255,29849.2992879157,23828.66500589972,23213.149082044343 +1739792498.038786,336,1256,29853.37758938452,23828.66500589972,23213.149082044343 +1739792498.0504918,337,1256,29850.877505673794,23828.66500589972,23213.149082044343 +1739792498.0620751,338,1259,29840.097596347106,23828.66500589972,23213.149082044343 +1739792498.073512,339,1260,29840.25131697669,23828.66500589972,23213.149082044343 +1739792498.0851262,340,1261,29831.753513059666,23828.66500589972,23213.149082044343 +1739792498.096489,341,1263,29806.01638370162,23828.66500589972,23213.149082044343 +1739792498.1084936,342,1268,29836.63120764293,23828.66500589972,23213.149082044343 +1739792498.121889,343,1270,29849.92275210023,23736.72733141377,23213.149082044343 +1739792498.1353676,344,1271,29834.2067619438,23736.72733141377,23213.149082044343 +1739792498.1492875,345,1271,29833.624494463176,23736.72733141377,23213.149082044343 +1739792498.1641622,346,1272,29835.16542618903,23736.72733141377,23213.149082044343 +1739792498.178323,347,1274,29838.425653516835,23736.72733141377,23213.149082044343 +1739792498.1916633,348,1275,29838.871104482758,23736.72733141377,23213.149082044343 +1739792498.2048745,349,1279,29822.894875230555,23736.72733141377,23213.149082044343 +1739792498.217533,350,1282,29823.048331113954,23736.72733141377,23213.149082044343 +1739792498.2299497,351,1285,29815.616125591238,23736.72733141377,23213.149082044343 +1739792498.2427356,352,1288,29789.926543929145,23828.66500589972,23213.149082044343 +1739792498.2553432,353,1289,29800.504985022155,24762.11517075395,23213.149082044343 +1739792498.2677634,354,1291,29806.36037899107,24762.11517075395,23213.149082044343 +1739792498.2798731,355,1292,29808.614447110802,24762.11517075395,23213.149082044343 +1739792498.2920313,356,1293,29785.484578067677,24602.96673739883,23213.149082044343 +1739792498.3052313,357,1294,29782.760764967345,24602.96673739883,23213.149082044343 +1739792498.319323,358,1296,29785.527205808987,24602.96673739883,23213.149082044343 +1739792498.333793,359,1298,29778.281621121176,24399.446889121253,23213.149082044343 +1739792498.3504546,360,1300,29781.550412802604,24399.446889121253,23213.149082044343 +1739792498.3658106,361,1302,29751.438283552732,24399.446889121253,23213.149082044343 +1739792498.3798041,362,1303,29744.715322212982,24399.446889121253,23213.149082044343 +1739792498.3938692,363,1307,29725.71591789167,24399.446889121253,23213.149082044343 +1739792498.4095309,364,1308,29721.55094092132,24399.446889121253,23213.149082044343 +1739792498.4256191,365,1308,29709.551522193837,24399.446889121253,23213.149082044343 +1739792498.4412758,366,1308,29702.974173130027,24399.446889121253,23213.149082044343 +1739792498.456198,367,1310,29677.235948592457,24399.446889121253,23213.149082044343 +1739792498.4697473,368,1313,29686.941025084503,24399.446889121253,23213.149082044343 +1739792498.4834764,369,1313,29679.20158118796,24384.017058198617,23213.149082044343 +1739792498.4974184,370,1314,29682.02606602051,24384.017058198617,23213.149082044343 +1739792498.5111334,371,1315,29694.752587274346,24384.017058198617,23213.149082044343 +1739792498.5244117,372,1321,29676.870417033955,24384.017058198617,23213.149082044343 +1739792498.5376344,373,1322,29674.259301063328,24384.017058198617,23213.149082044343 +1739792498.5504482,374,1325,29673.44152644395,24384.017058198617,23213.149082044343 +1739792498.5629232,375,1325,29645.876856052735,24384.017058198617,23213.149082044343 +1739792498.5753863,376,1326,29641.47633410524,24384.017058198617,23213.149082044343 +1739792498.5876803,377,1327,29645.33697056543,24384.017058198617,23213.149082044343 +1739792498.5997221,378,1327,29634.75294048158,24384.017058198617,23213.149082044343 +1739792498.6119215,379,1327,29604.55795324276,22113.828140405636,22113.828140405636 +1739792498.6240256,380,1330,29602.809893793383,24384.017058198617,22113.828140405636 +1739792498.6353917,381,1330,29610.84109795447,24384.017058198617,22113.828140405636 +1739792498.6469028,382,1331,29613.418989935624,24384.017058198617,22113.828140405636 +1739792498.658693,383,1331,29619.86495492996,24384.017058198617,22113.828140405636 +1739792498.6706994,384,1333,29629.093997421445,24399.446889121253,22113.828140405636 +1739792498.6827064,385,1337,29653.26507654945,24399.446889121253,22113.828140405636 +1739792498.6948388,386,1340,29638.497408255927,24399.446889121253,22113.828140405636 +1739792498.7071958,387,1346,29619.433702429964,23662.494486421736,22113.828140405636 +1739792498.719539,388,1348,29605.15463174427,23662.494486421736,22113.828140405636 +1739792498.7333133,389,1351,29606.938377197708,23662.494486421736,22113.828140405636 +1739792498.750388,390,1352,29600.700077608755,23662.494486421736,22113.828140405636 +1739792498.7662647,391,1354,29595.80862342772,23165.092379855472,22113.828140405636 +1739792498.7813418,392,1354,29559.975109853014,23662.494486421736,22113.828140405636 +1739792498.7965713,393,1356,29557.75225046264,23662.494486421736,22113.828140405636 +1739792498.8111367,394,1358,29566.430884618774,23662.494486421736,22113.828140405636 +1739792498.8248045,395,1359,29553.299602996507,23662.494486421736,22113.828140405636 +1739792498.837547,396,1360,29550.386009388243,23662.494486421736,22113.828140405636 +1739792498.849898,397,1362,29541.588797008408,23662.494486421736,22113.828140405636 +1739792498.8624718,398,1363,29553.97129103114,23662.494486421736,22113.828140405636 +1739792498.875029,399,1365,29555.734229125537,23662.494486421736,22113.828140405636 +1739792498.8877432,400,1367,29558.13387942999,23662.494486421736,22113.828140405636 +1739792498.9002006,401,1369,29554.68573811181,24438.14214979816,22113.828140405636 +1739792498.912904,402,1369,29555.788297770556,24438.14214979816,22113.828140405636 +1739792498.925498,403,1371,29561.97366915719,24438.14214979816,22113.828140405636 +1739792498.938209,404,1373,29566.94762309053,24438.14214979816,22113.828140405636 +1739792498.95061,405,1375,29580.31147900998,24438.14214979816,22113.828140405636 +1739792498.9633474,406,1378,29577.276180741545,24438.14214979816,22113.828140405636 +1739792498.975996,407,1379,29574.435689071946,24438.14214979816,22113.828140405636 +1739792498.9886508,408,1380,29571.562314375224,24438.14214979816,22113.828140405636 +1739792499.0015376,409,1383,29604.1783645949,24438.14214979816,22113.828140405636 +1739792499.0149107,410,1384,29587.90640416388,24438.14214979816,22113.828140405636 +1739792499.027961,411,1387,29603.10599782861,24438.14214979816,22113.828140405636 +1739792499.0408752,412,1387,29629.4656910698,24438.14214979816,22113.828140405636 +1739792499.053654,413,1388,29633.59576659232,24438.14214979816,22113.828140405636 +1739792499.0665233,414,1388,29648.373639744415,24438.14214979816,22113.828140405636 +1739792499.0792046,415,1389,29645.667673573236,24438.14214979816,22113.828140405636 +1739792499.0919387,416,1393,29642.215128479158,24474.980093555943,22113.828140405636 +1739792499.1051679,417,1395,29645.832546696533,24474.980093555943,22113.828140405636 +1739792499.118456,418,1397,29669.177221369333,24474.980093555943,22113.828140405636 +1739792499.1315005,419,1398,29683.41480762585,24474.980093555943,22113.828140405636 +1739792499.1445427,420,1400,29700.29086635648,24474.980093555943,22113.828140405636 +1739792499.1574693,421,1402,29708.915929466824,24474.980093555943,22113.828140405636 +1739792499.1702697,422,1402,29684.329843268068,24474.980093555943,22113.828140405636 +1739792499.183147,423,1403,29700.07374529641,24474.980093555943,22113.828140405636 +1739792499.1958728,424,1407,29703.976549674342,24474.980093555943,22113.828140405636 +1739792499.2090416,425,1410,29708.331529649782,24474.980093555943,22113.828140405636 +1739792499.2221136,426,1411,29715.694675358118,24474.980093555943,22113.828140405636 +1739792499.235265,427,1413,29708.24434706179,24474.980093555943,22113.828140405636 +1739792499.248644,428,1416,29709.706091502354,24474.980093555943,22113.828140405636 +1739792499.2620294,429,1418,29726.51465056061,24474.980093555943,22113.828140405636 +1739792499.2754483,430,1425,29730.847077380193,23362.654696686925,22113.828140405636 +1739792499.2887375,431,1426,29741.102250045744,23362.654696686925,22113.828140405636 +1739792499.3014996,432,1428,29784.681823694922,24474.980093555943,22113.828140405636 +1739792499.3144553,433,1429,29787.42050242974,24474.980093555943,22113.828140405636 +1739792499.3273184,434,1430,29784.057083189455,24474.980093555943,22113.828140405636 +1739792499.34011,435,1430,29763.779500947243,24316.906565407786,22113.828140405636 +1739792499.353057,436,1432,29768.795872903236,24316.906565407786,22113.828140405636 +1739792499.3659067,437,1435,29777.339127415955,24316.906565407786,22113.828140405636 +1739792499.3788884,438,1436,29781.7374698372,24316.906565407786,22113.828140405636 +1739792499.3917863,439,1439,29790.205172960297,24316.906565407786,22113.828140405636 +1739792499.4049568,440,1441,29825.939534180496,24316.906565407786,22113.828140405636 +1739792499.4179924,441,1443,29842.24042228565,24316.906565407786,22113.828140405636 +1739792499.4312136,442,1444,29845.298602094663,24316.906565407786,22113.828140405636 +1739792499.4452922,443,1444,29853.93649416366,24316.906565407786,22113.828140405636 +1739792499.460344,444,1444,29838.99434682235,24316.906565407786,22113.828140405636 +1739792499.4762518,445,1444,29837.572409496042,24222.009849637572,22113.828140405636 +1739792499.491415,446,1445,29827.978308556918,24222.009849637572,22113.828140405636 +1739792499.5058706,447,1445,29846.477689916246,24222.009849637572,22113.828140405636 +1739792499.5210555,448,1448,29851.663458955325,24222.009849637572,22113.828140405636 +1739792499.5360622,449,1449,29834.74976307522,24222.009849637572,22113.828140405636 +1739792499.5512154,450,1451,29850.526233330358,24222.009849637572,22113.828140405636 +1739792499.5654361,451,1453,29880.42047681369,24222.009849637572,22113.828140405636 +1739792499.5791469,452,1455,29861.340987407864,24222.009849637572,22113.828140405636 +1739792499.5920603,453,1456,29844.762896121352,24222.009849637572,22113.828140405636 +1739792499.6059875,454,1456,29828.773618913623,24222.009849637572,22113.828140405636 +1739792499.6195288,455,1456,29836.611838381887,24222.009849637572,22113.828140405636 +1739792499.6333303,456,1461,29832.28662996032,24222.009849637572,22113.828140405636 +1739792499.6469889,457,1464,29843.95279293215,24222.009849637572,22113.828140405636 +1739792499.6607294,458,1464,29844.51032114727,24222.009849637572,22113.828140405636 +1739792499.6743643,459,1464,29829.1461145646,24222.009849637572,22113.828140405636 +1739792499.6879194,460,1465,29837.245557560247,24222.009849637572,22113.828140405636 +1739792499.7018092,461,1465,29815.190027377103,24222.009849637572,22113.828140405636 +1739792499.7157052,462,1466,29824.8430264578,24222.009849637572,22113.828140405636 +1739792499.7295475,463,1466,29814.579513123754,24222.009849637572,22113.828140405636 +1739792499.7429023,464,1467,29811.046807318697,24222.009849637572,22113.828140405636 +1739792499.7567263,465,1468,29786.864728929835,24222.009849637572,22113.828140405636 +1739792499.7719007,466,1469,29767.61507111527,24222.009849637572,22113.828140405636 +1739792499.7876675,467,1471,29766.881761768433,24222.009849637572,22113.828140405636 +1739792499.8025444,468,1472,29778.04467611179,24222.009849637572,22113.828140405636 +1739792499.8162441,469,1473,29777.751853152648,24222.009849637572,22113.828140405636 +1739792499.829906,470,1476,29784.874321530762,24222.009849637572,22113.828140405636 +1739792499.8434942,471,1478,29794.854485370048,24222.009849637572,22113.828140405636 +1739792499.8565884,472,1478,29783.687956671347,24222.009849637572,22113.828140405636 +1739792499.8693697,473,1481,29785.788861262838,24222.009849637572,22113.828140405636 +1739792499.882532,474,1484,29780.464521300983,24222.009849637572,22113.828140405636 +1739792499.89565,475,1485,29787.282947276468,24222.009849637572,22113.828140405636 +1739792499.9088616,476,1486,29769.58941236081,23487.002601584714,22113.828140405636 +1739792499.92218,477,1488,29763.975191366862,23487.002601584714,22113.828140405636 +1739792499.9353912,478,1490,29769.324844418847,23487.002601584714,22113.828140405636 +1739792499.9486163,479,1492,29766.664809803147,23487.002601584714,22113.828140405636 +1739792499.961895,480,1493,29776.448040565625,23883.995682901696,22113.828140405636 +1739792499.9752412,481,1493,29785.12788954325,23883.995682901696,22113.828140405636 +1739792499.9886317,482,1496,29772.004775312336,23883.995682901696,22113.828140405636 +1739792500.0021183,483,1497,29763.17206701252,23883.995682901696,22113.828140405636 +1739792500.0156996,484,1499,29761.88871934434,23883.995682901696,22113.828140405636 +1739792500.0297332,485,1500,29766.157916399505,24302.856976273866,22113.828140405636 +1739792500.0434535,486,1501,29769.412019021445,24302.856976273866,22113.828140405636 +1739792500.057047,487,1502,29751.63543397884,24221.063207441246,22113.828140405636 +1739792500.070561,488,1504,29767.464469672075,24221.063207441246,22113.828140405636 +1739792500.0839162,489,1506,29764.786179970455,24221.063207441246,22113.828140405636 +1739792500.0977552,490,1508,29759.475140294024,24221.063207441246,22113.828140405636 +1739792500.1118221,491,1511,29773.69408733975,24221.063207441246,22113.828140405636 +1739792500.1255884,492,1511,29796.891563942605,24221.063207441246,22113.828140405636 +1739792500.139467,493,1512,29781.6367013116,24221.063207441246,22113.828140405636 +1739792500.1529415,494,1513,29762.32215075422,24221.063207441246,22113.828140405636 +1739792500.166458,495,1513,29727.691254545618,24221.063207441246,22113.828140405636 +1739792500.1809864,496,1515,29731.474236658578,24221.063207441246,22113.828140405636 +1739792500.196334,497,1516,29714.05567404392,24221.063207441246,22113.828140405636 +1739792500.211006,498,1517,29719.45609582033,24221.063207441246,22113.828140405636 +1739792500.2252696,499,1520,29713.978108582003,24221.063207441246,22113.828140405636 +1739792500.2388914,500,1525,29687.51066496968,22510.462263675374,22113.828140405636 +1739792500.2521996,501,1525,29666.060938820217,22510.462263675374,22113.828140405636 +1739792500.2658374,502,1527,29677.81852210944,22510.462263675374,22113.828140405636 +1739792500.279671,503,1528,29663.37918338922,22510.462263675374,22113.828140405636 +1739792500.2936444,504,1529,29650.312641452416,22510.462263675374,22113.828140405636 +1739792500.3074768,505,1531,29679.392039120783,22510.462263675374,22113.828140405636 +1739792500.3214686,506,1534,29691.322853035068,22510.462263675374,22113.828140405636 +1739792500.3348196,507,1538,29677.911899596587,24221.063207441246,22113.828140405636 +1739792500.3484125,508,1539,29671.791838497007,24378.59888027655,22113.828140405636 +1739792500.3620572,509,1541,29662.71331767184,24378.59888027655,22113.828140405636 +1739792500.3757236,510,1541,29644.851463821487,24378.59888027655,22113.828140405636 +1739792500.3893135,511,1541,29645.45777405541,24378.59888027655,22113.828140405636 +1739792500.4033413,512,1542,29646.145699923098,24949.433298830823,22113.828140405636 +1739792500.4173064,513,1543,29643.482431336895,24949.433298830823,22113.828140405636 +1739792500.4313025,514,1544,29651.33027864826,24949.433298830823,22113.828140405636 +1739792500.4453497,515,1544,29662.89939271987,24949.433298830823,22113.828140405636 +1739792500.459976,516,1545,29682.372528975826,24949.433298830823,22113.828140405636 +1739792500.4756951,517,1545,29699.833760122998,24949.433298830823,22113.828140405636 +1739792500.492283,518,1545,29690.51000904058,24949.433298830823,22113.828140405636 +1739792500.5087683,519,1547,29700.04972734986,24920.433680836904,22113.828140405636 +1739792500.5258775,520,1550,29712.67276555195,24920.433680836904,22113.828140405636 +1739792500.5418854,521,1554,29718.474405874054,24920.433680836904,22113.828140405636 +1739792500.5575078,522,1556,29724.846440679612,24920.433680836904,22113.828140405636 +1739792500.5726767,523,1559,29727.569697178926,24920.433680836904,22113.828140405636 +1739792500.5878804,524,1562,29712.633945995705,24920.433680836904,22113.828140405636 +1739792500.6030288,525,1564,29707.692961948316,24516.24915300047,22113.828140405636 +1739792500.6181068,526,1565,29693.60220096259,24516.24915300047,22113.828140405636 +1739792500.633085,527,1565,29678.84293913955,23886.507295526975,22113.828140405636 +1739792500.6476474,528,1567,29666.968794039138,23886.507295526975,22113.828140405636 +1739792500.6626914,529,1568,29653.534796935073,23886.507295526975,22113.828140405636 +1739792500.6787484,530,1570,29648.003784523564,23886.507295526975,22113.828140405636 +1739792500.6954277,531,1571,29674.486335057478,23886.507295526975,22113.828140405636 +1739792500.7119226,532,1573,29686.07338508753,23579.162792569332,22113.828140405636 +1739792500.7283537,533,1575,29687.51723451618,23579.162792569332,22113.828140405636 +1739792500.7452154,534,1576,29688.43436345352,23166.774077236343,22113.828140405636 +1739792500.7623267,535,1581,29697.992012727325,23166.774077236343,22113.828140405636 +1739792500.7808309,536,1584,29681.427011899832,23166.774077236343,22113.828140405636 +1739792500.8001544,537,1588,29673.303737289138,23166.774077236343,22113.828140405636 +1739792500.8196568,538,1591,29659.55843740091,23166.774077236343,22113.828140405636 +1739792500.8388739,539,1592,29651.786448555267,23166.774077236343,22113.828140405636 +1739792500.8583438,540,1596,29620.529454547563,23166.774077236343,22113.828140405636 +1739792500.8756058,541,1600,29611.32090700065,23166.774077236343,22113.828140405636 +1739792500.8915982,542,1603,29602.44751191321,23166.774077236343,22113.828140405636 +1739792500.9068205,543,1606,29618.961272794168,23166.774077236343,22113.828140405636 +1739792500.9222987,544,1606,29609.233659589,23166.774077236343,22113.828140405636 +1739792500.9383485,545,1607,29614.581772866837,23166.774077236343,22113.828140405636 +1739792500.9538448,546,1610,29617.148538229998,23166.774077236343,22113.828140405636 +1739792500.9685879,547,1611,29598.745202669797,23166.774077236343,22113.828140405636 +1739792500.9836533,548,1611,29594.10287317218,23166.774077236343,22113.828140405636 +1739792500.9982352,549,1616,29585.25685977032,23166.774077236343,22113.828140405636 +1739792501.0126047,550,1617,29601.659162688717,23166.774077236343,22113.828140405636 +1739792501.0272527,551,1618,29614.658764519976,23579.162792569332,22113.828140405636 +1739792501.0429928,552,1619,29607.048015548804,23579.162792569332,22113.828140405636 +1739792501.0581245,553,1620,29602.46363548571,23579.162792569332,22113.828140405636 +1739792501.073095,554,1621,29604.976155317618,23579.162792569332,22113.828140405636 +1739792501.0904381,555,1622,29607.62555794802,23579.162792569332,22113.828140405636 +1739792501.1099145,556,1623,29595.96005717263,23579.162792569332,22113.828140405636 +1739792501.1329932,557,1625,29594.785141689597,23579.162792569332,22113.828140405636 +1739792501.155064,558,1626,29596.850350175766,23579.162792569332,22113.828140405636 +1739792501.1739748,559,1628,29598.703202121727,23579.162792569332,22113.828140405636 +1739792501.190757,560,1629,29603.908494652722,23579.162792569332,22113.828140405636 +1739792501.2064795,561,1630,29581.226997964943,23579.162792569332,22113.828140405636 +1739792501.2237735,562,1632,29596.61672470743,23579.162792569332,22113.828140405636 +1739792501.246057,563,1632,29593.76949071505,23579.162792569332,22113.828140405636 +1739792501.269315,564,1635,29593.907801507656,23579.162792569332,22113.828140405636 +1739792501.2976313,565,1636,29599.629167150364,23579.162792569332,22113.828140405636 +1739792501.3238215,566,1637,29612.57152619886,23579.162792569332,22113.828140405636 +1739792501.3495114,567,1639,29625.08996010342,23579.162792569332,22113.828140405636 +1739792501.3734043,568,1640,29624.38421755104,23579.162792569332,22113.828140405636 +1739792501.3961306,569,1642,29620.312490653643,23579.162792569332,22113.828140405636 +1739792501.4185755,570,1643,29623.825891613356,23579.162792569332,22113.828140405636 +1739792501.4411337,571,1645,29632.122231681977,23579.162792569332,22113.828140405636 +1739792501.460945,572,1646,29640.531320289243,23579.162792569332,22113.828140405636 +1739792501.4826632,573,1648,29650.5552166067,23579.162792569332,22113.828140405636 +1739792501.5070643,574,1648,29653.29432668384,23579.162792569332,22113.828140405636 +1739792501.5287411,575,1652,29642.806520945407,23579.162792569332,22113.828140405636 +1739792501.5531092,576,1653,29642.74344957487,23579.162792569332,22113.828140405636 +1739792501.5753095,577,1657,29630.75860316756,23579.162792569332,22113.828140405636 +1739792501.5971222,578,1657,29618.13986523548,23579.162792569332,22113.828140405636 +1739792501.6181197,579,1659,29633.891091143436,23579.162792569332,22113.828140405636 +1739792501.6392553,580,1660,29636.331521418157,23579.162792569332,22113.828140405636 +1739792501.6575053,581,1660,29630.674771258018,23579.162792569332,22113.828140405636 +1739792501.6763163,582,1662,29625.336683041613,23579.162792569332,22113.828140405636 +1739792501.6950455,583,1663,29628.798704810113,23579.162792569332,22113.828140405636 +1739792501.714368,584,1663,29637.730829289085,23579.162792569332,22113.828140405636 +1739792501.7335052,585,1666,29649.95461545775,24684.731494156178,22113.828140405636 +1739792501.7537282,586,1668,29663.273259053014,24684.731494156178,22113.828140405636 +1739792501.7761629,587,1668,29678.458059046337,24684.731494156178,22113.828140405636 +1739792501.8007667,588,1669,29688.32311040118,24684.731494156178,22113.828140405636 +1739792501.8255198,589,1669,29684.099263218035,24684.731494156178,22113.828140405636 +1739792501.8525667,590,1671,29704.228714738394,24684.731494156178,22113.828140405636 +1739792501.8819132,591,1672,29706.619191418296,23722.505370612344,22113.828140405636 +1739792501.9134502,592,1672,29701.2682604636,23722.505370612344,22113.828140405636 +1739792501.9430246,593,1672,29709.80062440288,23722.505370612344,22113.828140405636 +1739792501.9700673,594,1672,29717.02272193032,23722.505370612344,22113.828140405636 +1739792501.9942243,595,1673,29719.91974203477,23722.505370612344,22113.828140405636 +1739792502.015899,596,1675,29722.6630971576,23722.505370612344,22113.828140405636 +1739792502.0378637,597,1678,29746.495221260197,23722.505370612344,22113.828140405636 +1739792502.0612245,598,1679,29762.591211188777,23722.505370612344,22113.828140405636 +1739792502.083217,599,1680,29771.76709044816,23722.505370612344,22113.828140405636 +1739792502.1047776,600,1682,29775.148224243414,23722.505370612344,22113.828140405636 +1739792502.125164,601,1685,29757.8358630122,23722.505370612344,22113.828140405636 +1739792502.1455572,602,1687,29757.29467670941,23722.505370612344,22113.828140405636 +1739792502.1651485,603,1689,29743.167192766578,23722.505370612344,22113.828140405636 +1739792502.1825252,604,1689,29769.811392210555,23722.505370612344,22113.828140405636 +1739792502.199033,605,1689,29755.759188532145,23722.505370612344,22113.828140405636 +1739792502.2147586,606,1691,29746.85901841162,23722.505370612344,22113.828140405636 +1739792502.2299752,607,1691,29756.281518289,23722.505370612344,22113.828140405636 +1739792502.2447727,608,1694,29755.753681784172,23722.505370612344,22113.828140405636 +1739792502.2593307,609,1695,29758.424651475612,23722.505370612344,22113.828140405636 +1739792502.273882,610,1696,29785.109902272263,23722.505370612344,22113.828140405636 +1739792502.2886765,611,1702,29763.80404881535,23722.505370612344,22113.828140405636 +1739792502.3045819,612,1703,29774.968434090875,24771.818038358353,22113.828140405636 +1739792502.3222587,613,1704,29767.572989599863,24404.846878678716,22113.828140405636 +1739792502.3429492,614,1707,29771.438542865806,24404.846878678716,22113.828140405636 +1739792502.3677945,615,1708,29776.24017902444,24404.846878678716,22113.828140405636 +1739792502.3932705,616,1710,29770.758478760526,24404.846878678716,22113.828140405636 +1739792502.4190912,617,1712,29777.605418485262,24404.846878678716,22113.828140405636 +1739792502.4408505,618,1714,29771.185946434707,24404.846878678716,22113.828140405636 +1739792502.464278,619,1717,29764.213605967918,24404.846878678716,22113.828140405636 +1739792502.4951162,620,1719,29770.503129911456,24404.846878678716,22113.828140405636 +1739792502.5317626,621,1719,29780.8324656297,24404.846878678716,22113.828140405636 +1739792502.566225,622,1719,29775.2325925757,24404.846878678716,22113.828140405636 +1739792502.597395,623,1720,29779.457423023025,24404.846878678716,22113.828140405636 +1739792502.6278288,624,1720,29781.678964127652,24404.846878678716,22113.828140405636 +1739792502.6567035,625,1722,29778.356826182546,24404.846878678716,22113.828140405636 +1739792502.6877015,626,1722,29774.814454913067,24404.846878678716,22113.828140405636 +1739792502.7216995,627,1723,29777.844614484908,24404.846878678716,22113.828140405636 +1739792502.7546322,628,1724,29769.087657496155,24404.846878678716,22113.828140405636 +1739792502.791839,629,1726,29770.576838630335,24404.846878678716,22113.828140405636 +1739792502.8312087,630,1727,29770.05815047933,24404.846878678716,22113.828140405636 +1739792502.8753214,631,1730,29786.765111734174,24404.846878678716,22113.828140405636 +1739792502.915683,632,1733,29785.476169825954,24404.846878678716,22113.828140405636 +1739792502.9518874,633,1735,29783.07992746277,24404.846878678716,22113.828140405636 +1739792502.9788463,634,1735,29792.831303204995,24404.846878678716,22113.828140405636 +1739792503.003105,635,1735,29800.249425214082,24404.846878678716,22113.828140405636 +1739792503.024931,636,1736,29831.68191734469,24404.846878678716,22113.828140405636 +1739792503.045867,637,1738,29852.17812487731,24404.846878678716,22113.828140405636 +1739792503.0646236,638,1739,29855.77452638454,24404.846878678716,22113.828140405636 +1739792503.083755,639,1743,29871.196799915786,24404.846878678716,22113.828140405636 +1739792503.10238,640,1745,29870.09313332016,24404.846878678716,22113.828140405636 +1739792503.1220233,641,1746,29873.474351807123,24404.846878678716,22113.828140405636 +1739792503.146132,642,1747,29882.409875705547,24404.846878678716,22113.828140405636 +1739792503.17108,643,1750,29883.525495415357,24404.846878678716,22113.828140405636 +1739792503.194466,644,1750,29874.614416753244,24404.846878678716,22113.828140405636 +1739792503.2160974,645,1752,29860.666702361956,24950.21017566693,22113.828140405636 +1739792503.2378235,646,1753,29877.919105349592,24950.21017566693,22113.828140405636 +1739792503.2574196,647,1754,29864.95378853241,24950.21017566693,22113.828140405636 +1739792503.2754576,648,1756,29863.70447043462,24502.03244361141,22113.828140405636 +1739792503.295689,649,1756,29852.129761087064,24502.03244361141,22113.828140405636 +1739792503.3172143,650,1758,29863.053524294257,24502.03244361141,22113.828140405636 +1739792503.3400338,651,1758,29858.07788896355,24502.03244361141,22113.828140405636 +1739792503.3647141,652,1759,29858.941841951466,24502.03244361141,22113.828140405636 +1739792503.386907,653,1761,29850.771842250113,24502.03244361141,22113.828140405636 +1739792503.4097974,654,1761,29847.62479568038,24502.03244361141,22113.828140405636 +1739792503.4304087,655,1761,29841.084192369144,24502.03244361141,22113.828140405636 +1739792503.4563391,656,1762,29837.99916056773,24502.03244361141,22113.828140405636 +1739792503.4824412,657,1763,29828.198253067727,24502.03244361141,22113.828140405636 +1739792503.5081608,658,1763,29834.952708279692,24502.03244361141,22113.828140405636 +1739792503.5299048,659,1763,29825.144677338485,24502.03244361141,22113.828140405636 +1739792503.552532,660,1766,29817.987558828463,24502.03244361141,22113.828140405636 +1739792503.5802102,661,1767,29811.396947758865,24502.03244361141,22113.828140405636 +1739792503.6087182,662,1769,29815.588413743888,24502.03244361141,22113.828140405636 +1739792503.635001,663,1769,29819.454417710724,24502.03244361141,22113.828140405636 +1739792503.658588,664,1769,29835.036272805948,24502.03244361141,22113.828140405636 +1739792503.6815715,665,1771,29822.31911181845,24502.03244361141,22113.828140405636 +1739792503.70884,666,1772,29809.612109277285,24502.03244361141,22113.828140405636 +1739792503.7372324,667,1772,29800.91681918825,24502.03244361141,22113.828140405636 +1739792503.7680151,668,1775,29800.019285325816,24502.03244361141,22113.828140405636 +1739792503.8001444,669,1776,29804.77470373999,24502.03244361141,22113.828140405636 +1739792503.8285363,670,1777,29794.422422879634,24502.03244361141,22113.828140405636 +1739792503.854467,671,1778,29791.893153045796,24502.03244361141,22113.828140405636 +1739792503.879239,672,1778,29785.229407962423,24502.03244361141,22113.828140405636 +1739792503.901462,673,1779,29793.57902456061,24502.03244361141,22113.828140405636 +1739792503.9226665,674,1779,29796.57379189118,24502.03244361141,22113.828140405636 +1739792503.9452581,675,1781,29801.19722653398,24950.21017566693,22113.828140405636 +1739792503.9706552,676,1781,29794.16552432766,24950.21017566693,22113.828140405636 +1739792503.9921656,677,1782,29788.72811115953,24950.21017566693,22113.828140405636 +1739792504.0128334,678,1785,29796.225178056677,24950.21017566693,22113.828140405636 +1739792504.0329132,679,1785,29799.1524917861,24950.21017566693,22113.828140405636 +1739792504.0536335,680,1788,29760.07413111224,24950.21017566693,22113.828140405636 +1739792504.0749593,681,1789,29739.445232449147,24950.21017566693,22113.828140405636 +1739792504.097968,682,1791,29748.844503009706,25074.112639798914,22113.828140405636 +1739792504.1233401,683,1792,29767.609607391736,25074.112639798914,22113.828140405636 +1739792504.148079,684,1794,29775.173914370534,25074.112639798914,22113.828140405636 +1739792504.1730952,685,1794,29780.53548366817,25074.112639798914,22113.828140405636 +1739792504.2010927,686,1796,29785.08610353385,25074.112639798914,22113.828140405636 +1739792504.2338681,687,1797,29778.11231469675,25074.112639798914,22113.828140405636 +1739792504.2691402,688,1798,29767.512685401794,25074.112639798914,22113.828140405636 +1739792504.3043365,689,1799,29763.127406527114,25074.112639798914,22113.828140405636 +1739792504.3326647,690,1801,29758.588438241197,25074.112639798914,22113.828140405636 +1739792504.3606765,691,1802,29754.015398389627,25074.112639798914,22113.828140405636 +1739792504.3919363,692,1803,29776.960469422193,24917.385552580126,22113.828140405636 +1739792504.4201984,693,1806,29779.434371718817,24917.385552580126,22113.828140405636 +1739792504.4449453,694,1808,29804.632081490672,24917.385552580126,22113.828140405636 +1739792504.4691393,695,1809,29816.49262674796,24917.385552580126,22113.828140405636 +1739792504.4922204,696,1811,29807.547449232592,24889.217063304623,22113.828140405636 +1739792504.514746,697,1811,29803.776902040103,24889.217063304623,22113.828140405636 +1739792504.5351555,698,1813,29812.52912748021,24889.217063304623,22113.828140405636 +1739792504.5548463,699,1813,29824.66432713716,24889.217063304623,22113.828140405636 +1739792504.5745842,700,1815,29816.56866697057,24889.217063304623,22113.828140405636 +1739792504.5971172,701,1817,29825.333520227374,24889.217063304623,22113.828140405636 +1739792504.6246228,702,1818,29833.1192137165,24619.60930541183,22113.828140405636 +1739792504.6470687,703,1818,29806.113435089002,24619.60930541183,22113.828140405636 +1739792504.6667092,704,1819,29796.71719239488,24619.60930541183,22113.828140405636 +1739792504.6890767,705,1819,29803.484881151482,24619.60930541183,22113.828140405636 +1739792504.7109513,706,1820,29808.892455852794,24619.60930541183,22113.828140405636 +1739792504.731759,707,1821,29814.15673595518,24619.60930541183,22113.828140405636 +1739792504.756572,708,1823,29818.70944366208,24619.60930541183,22113.828140405636 +1739792504.78146,709,1823,29809.232382467882,24619.60930541183,22113.828140405636 +1739792504.8054504,710,1824,29806.23409193921,24311.822410611698,22113.828140405636 +1739792504.8299837,711,1825,29816.727176569784,24311.822410611698,22113.828140405636 +1739792504.8547678,712,1828,29805.79878373029,24311.822410611698,22113.828140405636 +1739792504.879512,713,1830,29803.094756116356,24311.822410611698,22113.828140405636 +1739792504.9032466,714,1830,29794.161533375358,24311.822410611698,22113.828140405636 +1739792504.926737,715,1830,29813.873837452207,24311.822410611698,22113.828140405636 +1739792504.9540505,716,1831,29825.176354498803,24311.822410611698,22113.828140405636 +1739792504.9851406,717,1832,29812.70920280497,24311.822410611698,22113.828140405636 +1739792505.0234857,718,1832,29815.363792425123,24311.822410611698,22113.828140405636 +1739792505.0562143,719,1832,29826.898456334446,24311.822410611698,22113.828140405636 +1739792505.0845203,720,1832,29828.743103661207,24311.822410611698,22113.828140405636 +1739792505.1209834,721,1836,29825.92261909665,24311.822410611698,22113.828140405636 +1739792505.1698651,722,1836,29827.58861722729,24311.822410611698,22113.828140405636 +1739792505.2213132,723,1837,29830.657131709984,24311.822410611698,22113.828140405636 +1739792505.2734647,724,1839,29826.637849037295,24311.822410611698,22113.828140405636 +1739792505.327247,725,1840,29841.599772434995,24311.822410611698,22113.828140405636 +1739792505.3793585,726,1842,29850.15158167223,24311.822410611698,22113.828140405636 +1739792505.4329462,727,1842,29855.801893293556,24311.822410611698,22113.828140405636 +1739792505.4839706,728,1843,29868.26682777608,24311.822410611698,22113.828140405636 +1739792505.5292222,729,1843,29860.766675961317,24311.822410611698,22113.828140405636 +1739792505.5677793,730,1844,29866.55991048646,24311.822410611698,22113.828140405636 +1739792505.6053507,731,1845,29875.083345173003,24311.822410611698,22113.828140405636 +1739792505.6491055,732,1847,29867.44752864061,24311.822410611698,22113.828140405636 +1739792505.687769,733,1847,29854.02085612685,24311.822410611698,22113.828140405636 +1739792505.7257237,734,1849,29835.194676108593,24311.822410611698,22113.828140405636 +1739792505.7614534,735,1851,29851.115861018254,24311.822410611698,22113.828140405636 +1739792505.7914894,736,1854,29842.61754065747,24311.822410611698,22113.828140405636 +1739792505.8174345,737,1854,29843.85313352697,24311.822410611698,22113.828140405636 +1739792505.8457325,738,1855,29861.151976741196,24311.822410611698,22113.828140405636 +1739792505.8726008,739,1857,29866.53099675363,24311.822410611698,22113.828140405636 +1739792505.9047124,740,1858,29858.56073932068,24311.822410611698,22113.828140405636 +1739792505.9314723,741,1861,29866.063716293513,24311.822410611698,22113.828140405636 +1739792505.9660382,742,1862,29858.91032022615,24311.822410611698,22113.828140405636 +1739792506.0026915,743,1863,29855.54314347104,24045.402581952207,22113.828140405636 +1739792506.0356407,744,1863,29855.073781546685,24045.402581952207,22113.828140405636 +1739792506.0672834,745,1866,29849.128428757547,24045.402581952207,22113.828140405636 +1739792506.1008923,746,1866,29846.191959658972,24045.402581952207,22113.828140405636 +1739792506.12964,747,1866,29846.805799816488,24244.695856511633,22113.828140405636 +1739792506.1574998,748,1870,29847.529546377045,24244.695856511633,22113.828140405636 +1739792506.181054,749,1871,29862.669316150517,24244.695856511633,22113.828140405636 +1739792506.2065287,750,1872,29867.370365736584,24244.695856511633,22113.828140405636 +1739792506.2317562,751,1873,29864.565454578347,24244.695856511633,22113.828140405636 +1739792506.2524414,752,1874,29880.87931203587,24244.695856511633,22113.828140405636 +1739792506.27397,753,1877,29886.243051946036,24244.695856511633,22113.828140405636 +1739792506.2948434,754,1877,29881.597309701447,24244.695856511633,22113.828140405636 +1739792506.3167417,755,1880,29879.503535159773,24244.695856511633,22113.828140405636 +1739792506.3400755,756,1882,29884.571109753706,24244.695856511633,22113.828140405636 +1739792506.3680015,757,1885,29883.639630181464,24244.695856511633,22113.828140405636 +1739792506.4042275,758,1885,29876.98371287765,23796.82393778338,22113.828140405636 +1739792506.447235,759,1885,29875.245071537072,23796.82393778338,22113.828140405636 +1739792506.4831054,760,1887,29868.025752533198,23796.82393778338,22113.828140405636 +1739792506.5104935,761,1890,29880.961227912132,23796.82393778338,22113.828140405636 +1739792506.5388415,762,1890,29879.847268541085,23796.82393778338,22113.828140405636 +1739792506.5625148,763,1890,29889.258120699746,23796.82393778338,22113.828140405636 +1739792506.585438,764,1893,29891.43113829229,23796.82393778338,22113.828140405636 +1739792506.6083596,765,1895,29892.429194367647,23796.82393778338,22113.828140405636 +1739792506.64128,766,1895,29911.797474548315,23796.82393778338,22113.828140405636 +1739792506.6751366,767,1897,29913.89010805641,23796.82393778338,22113.828140405636 +1739792506.7150533,768,1899,29903.074101615493,23796.82393778338,22113.828140405636 +1739792506.765649,769,1900,29904.62843037231,23796.82393778338,22113.828140405636 +1739792506.8314517,770,1900,29907.20950998958,23796.82393778338,22113.828140405636 +1739792506.8815491,771,1900,29908.462375101117,23796.82393778338,22113.828140405636 +1739792506.9335139,772,1902,29904.514677753188,23796.82393778338,22113.828140405636 +1739792506.9862318,773,1903,29923.56788112415,23796.82393778338,22113.828140405636 +1739792507.0432603,774,1904,29917.723045191517,23796.82393778338,22113.828140405636 +1739792507.1124825,775,1906,29894.568054132727,23796.82393778338,22113.828140405636 +1739792507.1780963,776,1910,29893.80694886576,23796.82393778338,22113.828140405636 +1739792507.2293637,777,1911,29895.366569139715,23796.82393778338,22113.828140405636 +1739792507.2746408,778,1915,29908.894693772767,23796.82393778338,22113.828140405636 +1739792507.3133008,779,1915,29898.136443083116,23796.82393778338,22113.828140405636 +1739792507.356744,780,1915,29888.854195952354,23609.274497001672,22113.828140405636 +1739792507.3992884,781,1915,29891.979816215662,22603.324970991776,22113.828140405636 +1739792507.4351645,782,1915,29879.8390934688,23609.274497001672,22113.828140405636 +1739792507.4719224,783,1917,29882.93130093902,23609.274497001672,22113.828140405636 +1739792507.5067236,784,1917,29892.35707990338,23609.274497001672,22113.828140405636 +1739792507.541043,785,1920,29890.068424912075,23609.274497001672,22113.828140405636 +1739792507.5802622,786,1921,29894.38514825383,23609.274497001672,22113.828140405636 +1739792507.6208475,787,1922,29886.832112442775,23609.274497001672,22113.828140405636 +1739792507.6708627,788,1923,29889.864771634853,23609.274497001672,22113.828140405636 +1739792507.723651,789,1923,29886.95384135324,23609.274497001672,22113.828140405636 +1739792507.7848907,790,1924,29877.422973239518,23609.274497001672,22113.828140405636 +1739792507.837731,791,1925,29865.128466381095,23609.274497001672,22113.828140405636 +1739792507.8776398,792,1926,29867.2593753932,23609.274497001672,22113.828140405636 +1739792507.9161065,793,1926,29872.207147740093,23609.274497001672,22113.828140405636 +1739792507.9628513,794,1927,29878.03318447897,23609.274497001672,22113.828140405636 +1739792508.0071297,795,1929,29881.478264327918,23609.274497001672,22113.828140405636 +1739792508.0510597,796,1930,29870.3465739819,23609.274497001672,22113.828140405636 +1739792508.0956182,797,1931,29870.117843025295,23609.274497001672,22113.828140405636 +1739792508.1375268,798,1934,29878.173136440168,23609.274497001672,22113.828140405636 +1739792508.1702995,799,1936,29877.695110277815,24711.41893478064,22113.828140405636 +1739792508.2023702,800,1936,29858.48535434975,24711.41893478064,22113.828140405636 +1739792508.2433212,801,1936,29865.259413839536,24711.41893478064,22113.828140405636 +1739792508.2852063,802,1937,29862.735809143687,23405.531407418086,22113.828140405636 +1739792508.3321228,803,1937,29869.03295840155,23405.531407418086,22113.828140405636 +1739792508.3787282,804,1939,29860.568281151616,23405.531407418086,22113.828140405636 +1739792508.424862,805,1940,29882.448940036145,24711.41893478064,22113.828140405636 +1739792508.4735477,806,1941,29869.925027558267,24711.41893478064,22113.828140405636 +1739792508.5188198,807,1941,29861.26501674783,24711.41893478064,22113.828140405636 +1739792508.5656092,808,1941,29864.5077375853,24711.41893478064,22113.828140405636 +1739792508.6114519,809,1944,29866.461447894628,24711.41893478064,22113.828140405636 +1739792508.662949,810,1945,29872.23541389696,24711.41893478064,22113.828140405636 +1739792508.7099178,811,1946,29870.593249384026,24711.41893478064,22113.828140405636 +1739792508.7534585,812,1947,29860.609878965774,24711.41893478064,22113.828140405636 +1739792508.793018,813,1948,29852.092886459126,24589.64483993538,22113.828140405636 +1739792508.833018,814,1948,29850.75294433828,24711.41893478064,22113.828140405636 +1739792508.87634,815,1948,29835.580239354265,24711.41893478064,22113.828140405636 +1739792508.908655,816,1949,29821.122648022985,24581.614599915836,22113.828140405636 +1739792508.9434593,817,1949,29821.73450099553,24581.614599915836,22113.828140405636 +1739792508.9764857,818,1951,29808.98498070565,24581.614599915836,22113.828140405636 +1739792509.0210404,819,1953,29818.91471505466,24581.614599915836,22113.828140405636 +1739792509.0600126,820,1957,29821.80220645506,24581.614599915836,22113.828140405636 +1739792509.0944371,821,1960,29822.673811619727,24581.614599915836,22113.828140405636 +1739792509.1349077,822,1963,29822.022169127813,24581.614599915836,22113.828140405636 +1739792509.1847894,823,1965,29808.23232824868,24581.614599915836,22113.828140405636 +1739792509.2308013,824,1966,29813.05988688189,24581.614599915836,22113.828140405636 +1739792509.2668257,825,1966,29797.05270683213,24581.614599915836,22113.828140405636 +1739792509.2982292,826,1966,29800.18923367577,24961.789403245784,22113.828140405636 +1739792509.3355458,827,1967,29798.432327315448,24961.789403245784,22113.828140405636 +1739792509.366161,828,1967,29796.10186347654,24961.789403245784,22113.828140405636 +1739792509.3942933,829,1968,29791.27041910538,24476.73782031047,22113.828140405636 +1739792509.4254036,830,1968,29801.453523382548,24461.11121362005,22113.828140405636 +1739792509.4522119,831,1973,29810.727767273725,24461.11121362005,22113.828140405636 +1739792509.478977,832,1973,29808.32594626717,24461.11121362005,22113.828140405636 +1739792509.507208,833,1975,29796.708230675595,24461.11121362005,22113.828140405636 +1739792509.5400932,834,1976,29789.12853920962,24461.11121362005,22113.828140405636 +1739792509.567951,835,1980,29785.146643740507,24461.11121362005,22113.828140405636 +1739792509.5932498,836,1980,29782.456124479748,24461.11121362005,22113.828140405636 +1739792509.6229866,837,1981,29801.120943262027,24461.11121362005,22113.828140405636 +1739792509.655624,838,1982,29813.816189428035,24461.11121362005,22113.828140405636 +1739792509.6838098,839,1984,29807.74411247112,24461.11121362005,22113.828140405636 +1739792509.7090669,840,1988,29795.26825828912,24461.11121362005,22113.828140405636 +1739792509.7403035,841,1989,29799.699612132597,24461.11121362005,22113.828140405636 +1739792509.7722628,842,1989,29796.312006451542,24461.11121362005,22113.828140405636 +1739792509.7983854,843,1990,29797.7005710869,24461.11121362005,22113.828140405636 +1739792509.8218029,844,1990,29799.31249341702,24461.11121362005,22113.828140405636 +1739792509.849631,845,1991,29820.023066047233,24461.11121362005,22113.828140405636 +1739792509.8764307,846,1993,29811.915729102835,23876.020558652028,22113.828140405636 +1739792509.9034367,847,1993,29810.090485030865,23876.020558652028,22113.828140405636 +1739792509.9328272,848,1994,29821.04280219875,23876.020558652028,22113.828140405636 +1739792509.9578764,849,1994,29812.847080188254,23876.020558652028,22113.828140405636 +1739792509.980087,850,1996,29826.610671936418,23876.020558652028,22113.828140405636 +1739792510.0019357,851,1996,29835.273681671457,23876.020558652028,22113.828140405636 +1739792510.0295908,852,1996,29834.991212804893,23876.020558652028,22113.828140405636 +1739792510.0537586,853,1996,29837.145967838384,23876.020558652028,22113.828140405636 +1739792510.0805967,854,1996,29828.035924690408,23876.020558652028,22113.828140405636 +1739792510.1112027,855,1996,29825.191361896526,23876.020558652028,22113.828140405636 +1739792510.1392498,856,1996,29823.873995566162,23876.020558652028,22113.828140405636 +1739792510.1625073,857,1996,29825.2425653069,23876.020558652028,22113.828140405636 +1739792510.184919,858,1997,29828.3372452231,23876.020558652028,22113.828140405636 +1739792510.2111542,859,1997,29830.44738984724,23876.020558652028,22113.828140405636 +1739792510.2346284,860,1998,29830.283995727314,23876.020558652028,22113.828140405636 +1739792510.25738,861,1999,29835.035192165746,23876.020558652028,22113.828140405636 +1739792510.2872183,862,1999,29838.679416014747,23876.020558652028,22113.828140405636 +1739792510.31597,863,2000,29842.623027339705,23876.020558652028,22113.828140405636 +1739792510.3431165,864,2000,29849.672639673376,23876.020558652028,22113.828140405636 +1739792510.3710911,865,2000,29839.59713712666,23876.020558652028,22113.828140405636 +1739792510.406794,866,2000,29844.333585694952,23876.020558652028,22113.828140405636 +1739792510.4348643,867,2000,29846.70931458867,23876.020558652028,22113.828140405636 +1739792510.4586184,868,2001,29860.89303038812,23876.020558652028,22113.828140405636 +1739792510.4826012,869,2004,29860.43163711767,23876.020558652028,22113.828140405636 +1739792510.5085793,870,2006,29861.097199300977,23876.020558652028,22113.828140405636 +1739792510.5319917,871,2006,29860.98979595989,23876.020558652028,22113.828140405636 +1739792510.5568058,872,2008,29866.37753913459,23876.020558652028,22113.828140405636 +1739792510.5841966,873,2010,29864.552694141854,23876.020558652028,22113.828140405636 +1739792510.6092224,874,2010,29862.409574047037,23876.020558652028,22113.828140405636 +1739792510.6351843,875,2011,29869.918446241893,23876.020558652028,22113.828140405636 +1739792510.663468,876,2012,29881.22488174478,23876.020558652028,22113.828140405636 +1739792510.688355,877,2012,29875.358536086966,23876.020558652028,22113.828140405636 +1739792510.7112255,878,2012,29875.45981278433,23876.020558652028,22113.828140405636 +1739792510.7395315,879,2014,29877.729565896818,23876.020558652028,22113.828140405636 diff --git a/year4/semester2/CT421/assignments/assignment1/code/salesman.py b/year4/semester2/CT421/assignments/assignment1/code/salesman.py index 253ba031..24e4fcdd 100755 --- a/year4/semester2/CT421/assignments/assignment1/code/salesman.py +++ b/year4/semester2/CT421/assignments/assignment1/code/salesman.py @@ -1,8 +1,9 @@ #!/usr/bin/python3 import argparse -import re +import random import math +import time # function to read a TSP file in and construct a dictionary of its attributes def graph_from_file(input_file): @@ -10,8 +11,7 @@ def graph_from_file(input_file): print("Reading cities data from: " + input_file) - with open(input_file, "r") as file: - lines=file.readlines() + with open(input_file, "r") as file: lines=file.readlines() # assuming that the data will be available on specific line numbers and that fields must be included, which works for the provided datasets. # i would implement this in a better way if python didn't have such a terrible regex engine compared to perl (further evidence of why perl is the best and python sucks) @@ -34,6 +34,7 @@ def graph_from_file(input_file): return graph # function to generate an adjacency matrix from a graph +# assumes each cities name is an integer starting at 1. city 1 is indexed at row,column 0, city 2 at row,column 1, ..., city n at row,column n-1 def adjacency_matrix_from_graph(graph): matrix = [] cities = sorted(graph["cities"], key=lambda city: city["name"]) # sorting list of cities in case not sorted, assuming each city's name is an int @@ -54,18 +55,209 @@ def dist(city1, city2): return math.sqrt( (city2["x"] - city1["x"] )**2 + ( city2["y"] - city1["y"] )**2 ) +# function to initialise a population of potential solutions +# each potential solution is a list of city names, representing a permutation of the set of city names +# the start city is random, and it is implied that the salesman must return from the last city in the list to the start city, i.e. the start city appears only once in the list +def initialise_population(size, graph): + city_names = [city["name"] for city in graph["cities"]] + tours = [] + + for i in range(size): + tours.append(random.sample(city_names, len(city_names))) + + return tours + + +# function to calculate the fitness (total length) of a given tour +def fitness(tour, adjacency_matrix): + total_length = 0 + + for i in range(len(tour)): + # if city in question is the last city in the tour, get length to start city + if (i+1 == len(tour)): + total_length += adjacency_matrix[ tour[i] - 1 ][ tour[0] - 1 ] # recall that the tour contains the name of the city using 1-based indexing, but the adjacency matrix uses 0-based indexing, so subtract 1 from the tour's name for a city + else: + total_length += adjacency_matrix[ tour[i] - 1 ][ tour[i+1] - 1 ] + + return total_length + + +# function to calculate the fitness for each element in a list +def list_of_fitnesses(tours, adjacency_matrix): + return [fitness(tour, adjacency_matrix) for tour in tours] + + +# function to return a dictionary containing the details of the current best solution +def get_current_best(population, fitnesses, generation): + # not using min() and then indexof to find the best solution because that would be less efficient + index_of_current_best = min(enumerate(fitnesses), key=lambda index_fitness_tuple: index_fitness_tuple[1])[0] + + # creating a dictionary to store the details of the current best solution + current_best = { + "tour": population[index_of_current_best], + "fitness": fitnesses[index_of_current_best], + "generation": generation + } + return current_best + + +# function to randomly remove individuals for the population, with good solutions less likely to be removed and bad solutions more likely +# the number to be removed is defined by how many offspring were produced in this generation, to keep population stable +def deselect(population, fitnesses, num_to_remove): + # Compute survival probabilities in a single pass + total_inverse_fitness = sum(1.0 / fitness for fitness in fitnesses) + survival_probabilities = [(1.0 / fitness) / total_inverse_fitness for fitness in fitnesses] + + # Select individuals to remove using weighted random sampling + indices_to_remove = set(random.choices( range(len(population)), weights=[1 - p for p in survival_probabilities], k=num_to_remove)) + + survivors = [solution for index, solution in enumerate(population) if index not in indices_to_remove] + + return survivors + +# general crossover function +def crossover(population, crossover_rate, number_to_replace): + offspring = [] + + # iterate until the desired number of offspring are produced (fraction of the current population) + while len(offspring) < number_to_replace: + # randomly select two parents + parent1, parent2 = random.sample(population, 2) + + # probabilistically determine whether the pair will reproduce based off the crossover rate + if random.random() < crossover_rate: + # randomly alternate between the two crossover operators (50-50) + if random.random() < 0.5: + child = pmx_crossover(parent1, parent2) + else: + child = ox_crossover(parent1, parent2) + + offspring.append(child) + + return offspring + +# function to perform partially mapped crossover on two parents +def pmx_crossover(parent1, parent2): + size = len(parent1) + child = [None] * size + + # choose random crossover points + crossover_point1 = random.randint(0, size // 2) + crossover_point2 = random.randint(crossover_point1, size) + + # copy the middle segment defined by the crossover points from parent1 to the child + for index in range(crossover_point1, crossover_point2): + child[index] = parent1[index] + + # fill in the remaining positions using parent2 and the pmx mapping + for index in range(size): + if child[index] is None: + gene = parent2[index] + while gene in child: + gene = parent2[child.index(None)] + child[index] = gene + + return child + +# function to perform order crossover on two parents +def ox_crossover(parent1, parent2): + size = len(parent1) + child = [None] * size + + # select a two random indexes from parent1 to create a segment for crossover + crossover_point1 = random.randint(0, size // 2) + crossover_point2 = random.randint(crossover_point1, size) + + # copy the segment from parent1 to the offspring + for index in range(crossover_point1, crossover_point2): + child[index] = parent1[index] + + # fill remaining positions with parent2, avoiding duplicates + current_position = crossover_point2 + for index in range(size): + if parent2[index] not in child: + if current_position == size: + current_position = 0 + + child[current_position] = parent2[index] + current_position += 1 + + return child + + +# general mutation function +def mutate(offspring, mutation_rate): + offspring = [] + return offspring + + def main(): parser = argparse.ArgumentParser(description="Program to solve the travelling salesman problem for a given TSP file using a genetic algorithm.") parser.add_argument("-i", "--input-file", type=str, help="Path to input file in TSP format", required=True) + parser.add_argument("-s", "--size", type=int, help="Initial population size", required=False, default=100) + parser.add_argument("-g", "--num-generations", type=int, help="Number of generations", required=False, default=500) + parser.add_argument("-a", "--give-up-after", type=int, help="Number of generations to give up after if best solution has remained unchanged", required=False, default=100) + parser.add_argument("-d", "--deselection-proportion", type=float, help="The proportion of the population to be deselected on each generation", required=False, default=0.7) + parser.add_argument("-c", "--crossover-rate", type=float, help="Probability of a selected pair of solutions to sexually reproduce", required=False, default=0.8) + parser.add_argument("-m", "--mutation-rate", type=float, help="Probability of a selected offspring to undergo mutation", required=False, default=0.2) args=parser.parse_args() - input_file=args.input_file + print("Input file: " + str(args.input_file)) + print("Initial population size: " + str(args.size)) + print("Number of generations: " + str(args.num_generations)) + print("Will give up after: " + str(args.give_up_after) + " generations") + print("Deselection proportion: " + str(args.deselection_proportion)) + print("Crossover rate: " + str(args.crossover_rate)) + print("Mutation rate: " + str(args.crossover_rate)) - graph = graph_from_file(input_file) + graph = graph_from_file(args.input_file) adjacency_matrix = adjacency_matrix_from_graph(graph) - for row in adjacency_matrix: - print(row) + # get initial population & its details + population = initialise_population(args.size, graph) + fitnesses = list_of_fitnesses(population, adjacency_matrix) + current_best = get_current_best(population, fitnesses, 0) + + # appending results to an array of strings rather than to a string as it's more efficient + results = ["timestamp,generation,population_size,avg_fitness,generation_best,current_best"] + results.append(str(time.time()) + "," + "0," + str(len(population)) + "," + str(sum(fitnesses)/len(fitnesses)) + "," + str(current_best["fitness"]) + "," + str(current_best["fitness"])) + + number_to_replace = int(len(population) * args.deselection_proportion) + + # this is where efficiency gets critical lol + for generation in range(args.num_generations): + print("Generation " + str(generation) + " of " + str(args.num_generations)) + # deselect solutions from population probabilistically + population = deselect(population, fitnesses, number_to_replace) + + # create a number of offspring with crossover to replace the number deselected + offspring = crossover(population, args.crossover_rate, number_to_replace) + + # mutate offspring and add them to the original population to restore size + # population.append(mutate(offspring, args.mutation_rate)) + population += offspring + + # calculate fitnesses + fitnesses = list_of_fitnesses(population, adjacency_matrix) + + # getting best solution from this generation and updating current_best if relevant + generation_best = get_current_best(population, fitnesses, generation) + if generation_best["fitness"] < current_best["fitness"]: + current_best = generation_best + + results.append(str(time.time()) + "," + str(generation) + "," + str(len(population)) + "," + str(sum(fitnesses)/len(fitnesses)) + "," + str(generation_best["fitness"]) + "," + str(current_best["fitness"])) + + if (generation - current_best["generation"]) >= args.give_up_after: + print("Best solution has not changed in " + str(args.give_up_after) + " generations. Giving up.") + break + + print("Best solution found: " + str(current_best["tour"])) + print("Fitness of best solution: " + str(current_best["fitness"])) + print("Best solution found in generation: " + str(current_best["generation"])) + + with open("output.csv", "w") as file: + for line in results: + file.write(line + "\n") if __name__ == "__main__":