-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathga_script_TSP_data.py
329 lines (288 loc) · 104 KB
/
ga_script_TSP_data.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
from cifo.algorithm.genetic_algorithm import GeneticAlgorithm
from cifo.custom_problem.travel_salesman_problem import (
TravelSalesmanProblem
)
from cifo.algorithm.ga_operators import (
initialize_using_random, initialize_using_hc, initialize_using_greedy, initialize_using_multiple,
roulettewheel_selection, rank_selection, tournament_selection,
cycle_crossover, pmx_crossover, order1_crossover, heuristic_crossover, multiple_crossover,
swap_mutation, insert_mutation, inversion_mutation, scramble_mutation, greedy_mutation,
multiple_mutation,
elitism_replacement, standard_replacement
)
from cifo.util.observer import LocalSearchObserver
import numpy as np
from copy import deepcopy
from os import listdir, path, mkdir
from os.path import isfile, join
from pandas import pandas as pd
# Problem
#--------------------------------------------------------------------------------------------------
# Decision Variables
input = [
[0,36.96584005,51.47535512,81.37883643,67.09706382,96.25912034,33.37095504,49.05139087,82.42814829,17.53944615,28.60425589,51.23577205,81.61379496,51.51224221,49.22279957,42.77989519,52.41229411,8.559339301,29.73906448,81.02061035,47.6395033,57.71653277,58.75682446,62.03784071,31.25151882,50.1453012,24.63358841,18.94551955,30.25790504,85.21792873,36.85186187,56.53666255,62.03497797,37.68030795,16.01323158,63.58061167,63.59738826,62.15986186,23.10591688,37.37057763,8.517827435,58.29133094,69.49677904,87.08357383,34.45822295,25.69816455,34.67118709,66.44842139,85.07076451,23.63220219,17.29653852,32.6772139,71.67238993,31.40561027,74.5859657,13.37462792,74.65274849,68.78350664,28.32893632,16.45723427,40.79505789,32.14446993,22.8157847,61.17311404,67.85584464,50.50121842,17.32224642,69.64537022,8.58156977,67.23338249,38.25387274,72.79577656,45.89074932,62.00721071,21.98649411,45.34735754,23.43343436,64.20771523,40.49933354,33.55673111,49.24624472,80.86344475,47.42370856,61.25720927,57.6628477,77.27561713,51.02315985,74.39466341,48.992992,55.93722702],
[36.96584005,0,61.91619178,85.79358509,56.34475438,68.71598221,4.09671684,36.54433609,93.72104677,44.14412909,26.24710648,19.03207804,64.5753318,27.03707842,25.97304705,6.288581842,24.73396593,45.43488009,16.97199729,53.72595597,62.78665591,62.66049676,29.58502223,68.28070695,61.67825794,38.42329848,60.23006801,37.50720546,54.44740046,55.15306618,73.80628982,47.35539658,66.44844157,73.28046004,52.53609876,42.98509658,56.44437672,45.2803504,59.30269394,31.97786358,45.30930669,27.20468134,63.6108007,55.78010425,70.4261779,15.74337821,47.21292078,74.88684535,92.9748268,16.96133125,31.60291136,5.074596635,85.38521764,54.70583033,61.30430838,47.80276173,69.84275638,76.85850099,65.22136526,46.8267315,22.40937611,57.95619821,14.16705865,38.74170375,47.70704542,62.00538466,43.02981561,36.79869334,36.12941277,45.68338293,28.53063986,47.58183111,67.32112581,65.51898315,56.29357404,67.25267976,59.14111513,28.71109276,28.38619482,36.2971628,12.36567547,89.48057197,69.15888966,32.97194384,70.14129461,88.05203116,67.93350969,78.96061085,46.92748861,30.70635332],
[51.47535512,61.91619178,0,30.12739296,34.32168728,77.5059462,61.5682967,34.02388454,32.4626629,34.82777207,35.89770585,80.87587171,50.98237406,88.0571181,47.40236359,67.33435037,53.43310071,51.21862313,69.14400337,66.21221522,7.704441461,9.593636341,57.4876327,11.33612019,35.13486982,32.84725272,48.04081167,33.01855188,25.45017471,74.07837052,63.69004377,29.24684645,12.77136775,52.8532566,58.65344852,46.76357494,28.00948541,41.06769324,50.23083385,30.7481669,54.3915391,89.01432619,29.07080451,77.90618437,53.2270194,47.57798198,17.18198031,14.99119164,33.78825151,62.82597756,37.2387574,57.39802441,23.46906511,23.96565857,41.55026146,61.56812262,31.04718986,17.31950789,57.5602719,66.80842471,43.10727162,26.88431343,55.80029958,48.55206336,47.82748521,1.756097224,34.63436043,69.43283815,59.80526894,49.58840516,82.08238552,57.8575155,18.53404505,13.64674759,43.58962278,19.35438187,65.47198371,72.36893294,36.32124112,25.65451483,70.73797899,29.68527208,19.45055536,57.1279573,8.299614076,26.8990232,11.25378185,23.36537322,20.04259069,50.95819548],
[81.37883643,85.79358509,30.12739296,0,37.21722808,76.48807317,86.43915517,50.8763981,16.95722606,64.95087496,61.83589079,103.8634962,47.30436892,112.7980726,64.8761096,90.24285873,70.22633254,81.34434756,96.0442537,70.3880371,35.78202274,24.24507559,71.96946167,19.37521169,63.37526204,49.05400159,77.08824341,62.62519364,55.05226011,78.88788215,91.63491725,40.90806144,19.9825785,79.72543295,88.66544299,55.93476365,32.96766048,49.91345665,79.48902462,54.04525819,84.51888691,111.6741138,27.21850364,83.20502139,80.80726257,73.57781442,46.73164905,15.77474108,9.952222922,90.22073739,66.17762274,81.99956364,21.62870557,53.5661923,39.74527651,91.69545258,22.63249346,13.56114691,86.40797705,96.908213,64.07557403,55.81968779,82.72565019,59.69642067,54.29393411,31.35794367,64.73513554,81.5395926,89.56859859,57.03539385,109.3865792,64.25980069,43.76726745,20.56223307,73.00400991,44.69897732,95.295789,88.01495982,57.5493408,51.90873636,92.09652621,9.872316245,43.60848828,70.22414233,26.07082464,14.63480364,35.16985029,7.105278528,38.86753431,65.57023747],
[67.09706382,56.34475438,34.32168728,37.21722808,0,43.59366384,58.29161593,20.31675998,51.67686132,56.11335592,39.58953826,72.13101415,16.99604614,82.70502943,31.40835035,59.25143367,35.61861625,70.96491807,70.4389576,34.21788459,41.53797188,26.00616209,35.92765333,29.42793491,64.73610319,18.59220295,74.6919135,49.67898839,53.3220593,42.64267312,91.63981465,10.59793698,26.05816786,82.95220875,79.88302257,18.92064634,6.346555621,13.21973692,76.07302332,30.20892423,73.44068499,79.26934489,10.0022536,46.85364962,82.36870577,48.9125185,38.69088846,35.5394843,46.8328863,66.15335728,49.80804838,53.93180439,49.27624405,52.12712667,7.97355102,80.06310262,15.4835237,36.05691643,83.99093755,83.48826871,34.17726096,56.27310949,58.49661182,23.04740214,17.10135502,35.93888128,55.2538331,44.49069143,73.40127474,19.81843985,83.67740667,27.25070344,52.34515721,24.41151696,69.55450444,53.06277272,87.67367524,51.82744073,29.64281404,33.75771598,59.40666597,45.0567817,53.50509341,33.7103468,39.54346114,46.88289588,45.56794452,32.53430646,19.51990277,30.04357507],
[96.25912034,68.71598221,77.5059462,76.48807317,43.59366384,0,72.47243672,50.06228402,92.81301887,91.26418592,68.41680842,74.93333561,29.23631172,87.1278692,47.14876994,67.41423968,45.09209506,102.6764506,85.68646696,15.3530153,84.31054248,69.58238422,39.33680693,72.90228637,103.9528975,49.87227468,111.1125908,83.41081452,92.56036134,14.8811854,127.9588518,49.00461456,69.53351239,121.5018726,111.6208805,34.00677791,49.90513048,37.95185423,111.7774078,61.53131213,104.2571439,78.72248755,51.74422784,16.94546442,120.1748139,71.49495035,77.77226649,78.64004368,86.42265386,84.66437298,80.87124749,69.65293466,92.22185505,91.64501695,37.78068492,109.5271755,54.35690276,78.83191575,119.5276078,110.941469,55.47124348,96.01940891,78.72671487,35.35327344,30.94460191,79.0296676,90.15543841,33.83137551,99.73565532,30.33959232,96.16046994,23.53771557,94.80882302,67.89447183,105.9444089,95.4344487,119.4173287,44.99278733,56.58403582,68.42130935,63.25393012,85.75545489,96.14809699,36.15160615,83.1269977,88.71627873,88.73319996,73.76075343,59.53302641,40.51150177],
[33.37095504,4.09671684,61.5682967,86.43915517,58.29161593,72.47243672,0,38.19208399,93.67680502,41.62607878,25.67283055,20.3149458,67.31937837,26.56554161,28.70620141,9.410360624,28.07408411,41.89251044,13.37334085,57.39654209,61.93721037,62.9398976,33.21825803,68.51120096,59.14009647,40.03969311,57.008972,35.41500084,52.45823092,59.05264616,70.21903725,48.92956631,66.85341664,70.10585675,48.76854456,45.83770249,57.9804223,47.73541567,55.9675217,32.39998875,41.62245928,28.39793514,65.12415772,59.76260244,67.17055105,14.28932418,46.23800466,74.96773527,93.30010409,12.86792308,29.44086153,4.476357764,84.99776738,52.81478252,63.60787391,43.88788493,71.32307909,77.00439692,61.68779028,42.78372004,24.12024212,55.86760893,10.59215285,41.73344219,50.58600584,61.54158951,40.55149516,40.82286591,32.16340907,48.69057054,25.68847215,51.00757633,65.85910942,66.00931437,53.23456125,65.73735032,55.25477018,32.80407705,29.53878797,35.92848429,15.90024322,89.69753364,67.68897081,36.5541143,69.7087206,88.01687463,66.97812302,79.51886225,47.62984302,33.87317717],
[49.05139087,36.54433609,34.02388454,50.8763981,20.31675998,50.06228402,38.19208399,0,61.63440847,41.3909688,20.52847865,53.48391436,32.67777145,63.35132466,14.21943136,40.10190957,20.00334258,54.18856524,50.13586611,36.02798386,38.73912257,30.42124467,23.48964941,35.88279059,54.09966051,1.892680154,61.15423517,33.77226909,42.8577365,42.71308346,78.08950408,10.81667845,33.22251871,71.45892057,63.24661711,16.06269698,19.90780727,13.19480763,61.95526826,11.91952342,56.24859066,61.07914101,27.07554054,46.01127832,70.11458966,28.71794353,28.43858182,42.91902081,59.15483093,45.86755716,32.22362479,33.77804063,55.640096,42.06882907,26.61506862,62.36441381,33.31476815,44.42823553,69.79264411,65.08394915,14.14059573,46.45454243,38.24222087,15.84473767,19.52302462,34.98391461,40.3219133,35.45282164,54.48583033,19.72472768,63.41211685,27.14985362,47.85222188,31.91212405,55.96705788,48.28387172,71.13180141,38.78975634,9.423436624,18.36319692,41.32821609,56.22774898,49.4715299,23.15657816,41.85106319,56.11258746,43.96025898,44.51508698,14.1796579,16.93508883],
[82.42814829,93.72104677,32.4626629,16.95722606,51.67686132,92.81301887,93.67680502,61.63440847,0,65.02569706,68.09826375,112.4824753,63.57783926,120.2342558,75.84651745,98.82565712,81.60332591,80.62202689,101.6046475,85.69069682,34.80190914,31.49866369,84.28859349,25.87462116,58.88908526,59.98301959,73.04226603,64.81087282,53.18749698,94.17626033,85.55411429,52.98763436,28.41336895,72.90526152,86.73121337,69.59013644,46.45825372,63.43285275,75.72615848,61.86998035,83.89457611,120.5393616,41.98620315,98.43779011,74.67323263,79.88040999,49.37719374,18.95085851,8.449825262,95.28265717,69.46446101,89.40400475,11.33995507,51.80792407,55.44155076,90.88526727,38.4798688,17.22909914,81.71893723,96.64328971,73.40239426,52.78316896,88.2531548,72.86163299,68.65689959,32.87719683,65.12581247,94.85899785,90.96126766,71.22100427,114.5305542,78.91356287,38.85387076,29.76767626,69.78714641,39.68852345,92.46168147,100.1442727,66.58122986,57.80602505,101.6027762,7.144220362,38.00030628,83.0050743,24.99261514,5.669493281,31.72658997,19.2460315,48.00984528,77.69760707],
[17.53944615,44.14412909,34.82777207,64.95087496,56.11335592,91.26418592,41.62607878,41.3909688,65.02569706,0,24.1431118,61.64689134,72.14173135,64.66798108,46.59200799,50.43120356,51.35317466,16.46243063,42.99583475,76.68690015,30.32050654,42.07389798,57.54551886,45.83151431,17.53574573,41.8968331,19.87753543,8.129597631,12.91176976,82.34379,36.710848,46.09750793,46.28265837,31.38250647,24.54656419,57.31678464,51.52780656,54.33730542,20.56469547,29.73287385,19.58488,69.46159011,56.47553816,84.96858051,29.41009684,28.94002318,19.12234405,49.63711927,68.00087288,36.24130242,12.9558554,39.11595946,54.18085473,13.95199625,64.01157447,26.76649487,60.94002097,51.97558235,28.42342284,32.01022601,38.2561172,15.37049574,31.87973472,56.1029176,60.90776411,33.67834624,1.21148597,69.72638468,26.12101454,61.02269334,53.79033078,67.91962912,28.5050947,46.49872896,14.76581969,28.01603972,32.01880962,67.01549648,35.03695856,23.2064086,56.17644338,63.75320089,30.10439663,59.23349458,40.44326362,59.95979591,33.5067342,58.11563544,36.74628412,53.02684118],
[28.60425589,26.24710648,35.89770585,61.83589079,39.58953826,68.41680842,25.67283055,20.52847865,68.09826375,24.1431118,0,45.27918233,53.19589251,52.17175995,22.5152128,32.01024505,27.22372482,34.31792974,34.20865267,53.42969233,36.55093549,37.83579719,33.40256929,43.28593417,40.1926705,21.75238374,43.74861234,16.02043472,30.69122099,58.5617639,60.11732626,29.03235452,41.9359784,55.51930828,43.32628702,35.1182889,37.13839688,33.56779616,43.98379573,9.404353633,36.10410678,53.45156166,43.80235329,61.00871794,53.51963793,11.83741967,21.08734904,49.52638721,68.09736049,28.53427595,12.4712982,21.55753605,59.32634532,30.55916426,46.66859853,41.96272138,49.62249792,51.62746901,51.5006253,44.55554257,14.11408073,34.45364333,20.92524672,33.07425564,39.29569461,35.87624728,22.9421972,45.62108817,34.01778634,38.80642773,47.57493599,44.88155204,41.72652147,41.27367946,38.78100329,41.76456306,51.18038272,43.66465309,11.97303822,10.29224231,36.32535403,64.36477138,43.56301625,35.15148147,44.04022611,62.45048397,41.73238314,54.7871948,23.98383968,29.06494692],
[51.23577205,19.03207804,80.87587171,103.8634962,72.13101415,74.93333561,20.3149458,53.48391436,112.4824753,61.64689134,45.27918233,0,77.49027672,12.20190133,40.72365041,13.67682718,37.15183638,59.73405371,22.5771438,61.42067875,81.81483661,81.22482964,39.53922617,86.87025632,79.07198716,55.37172386,75.70414385,55.69742364,72.74923249,60.19854668,87.3905677,64.18576479,84.87671156,88.82262183,65.27592373,56.17688538,73.20189638,59.85410819,74.32961036,50.6151472,58.79832547,8.173920439,80.32260142,59.42834956,85.67356705,34.46195397,66.21646994,93.58432755,111.4102904,27.69945222,49.7155111,23.85707394,104.3408145,73.1232539,75.9399862,59.38001356,86.55778533,95.49917098,79.21929067,56.60343519,39.7984275,76.12523042,29.83663864,51.56150288,60.57478696,81.00030396,60.61177719,41.10383398,47.68355252,58.06005941,24.9841031,57.5142413,86.1244348,83.85965862,72.36862732,86.01862283,70.67550115,30.03295003,46.34813522,55.29751161,12.99757915,108.0317102,87.9574932,42.91845687,89.12193016,106.8140112,86.94915876,97.16755962,65.14645001,43.31765491],
[81.61379496,64.5753318,50.98237406,47.30436892,16.99604614,29.23631172,67.31937837,32.67777145,63.57783926,72.14173135,53.19589251,77.49027672,0,89.06129619,38.63293845,66.01881354,40.60301617,86.27337468,80.35374061,24.92602638,58.35656759,42.16899925,38.13660519,44.71071308,81.61447937,31.47820168,91.15837995,65.22565249,70.16279388,33.0618978,108.1631675,26.07171551,41.39493672,99.79531609,95.2964141,21.63344792,23.08103863,20.09405404,92.40240724,44.24824763,88.53280155,83.64665723,23.09670909,37.38046427,99.1080403,60.64692812,55.40945714,49.95618614,57.25179469,77.0964338,64.54694733,63.31901799,63.34442896,69.0004293,9.440820741,94.85641515,25.14248603,49.95720448,100.3302194,97.74186337,44.32795286,73.18743867,69.78316218,26.08763168,17.00307717,52.64683151,71.20806521,42.11941586,87.15948459,19.43021798,92.98815103,22.13197639,69.21350848,39.79936276,85.98455778,69.95046864,103.1581144,52.02078003,41.80994593,49.18154626,64.49973345,56.51973172,70.31903551,34.93678484,55.50444351,59.53548371,62.16705935,44.56357224,36.1473593,34.37176642],
[51.51224221,27.03707842,88.0571181,112.7980726,82.70502943,87.1278692,26.56554161,63.35132466,120.2342558,64.66798108,52.17175995,12.20190133,89.06129619,0,51.47837328,23.46106833,48.49719712,59.58052824,21.90364274,73.59763755,88.07110794,89.46984158,51.37878858,95.05546887,81.5226969,65.24167349,76.06739602,59.89354101,76.72730703,72.37666542,85.76528821,74.16185681,93.34107608,88.963191,63.61636196,67.56977021,83.24793491,70.86005967,74.30249464,58.84724264,58.01981003,11.18259065,90.41243635,71.53117183,85.58435062,40.51500289,72.33240969,101.5326416,119.825443,28.5157592,54.00584457,30.90529083,111.4414079,77.31747234,87.00140895,57.11118733,96.65636344,103.5646263,78.13844687,53.21899332,49.29322132,79.80389074,33.41163564,63.00833211,72.07774852,87.97477181,63.76930929,53.30119723,46.14539857,69.65781642,17.24209904,69.50658293,91.09933215,92.45647888,73.42821083,90.87745424,67.90111298,42.19299662,55.41874692,62.45391801,24.75329066,116.2492147,92.89853464,54.80077347,96.14571838,114.576373,92.97500279,105.9332831,73.93204535,54.72147414],
[49.22279957,25.97304705,47.40236359,64.8761096,31.40835035,47.14876994,28.70620141,14.21943136,75.84651745,46.59200799,22.5152128,40.72365041,38.63293845,51.47837328,0,28.03714239,6.039546399,56.0180331,41.86153342,31.84046402,51.23725264,44.55455077,11.23996338,50.0617232,61.90526799,15.93201048,66.26357282,38.46398485,51.47162885,36.22507275,82.57246787,24.09914333,47.43770617,77.91162827,64.82378081,17.14386686,32.85342605,19.44036816,66.47268753,18.92843595,57.3735974,47.91770635,39.8623748,38.52049015,75.99861591,24.42334677,38.58132712,57.09176475,73.31892669,39.18314142,34.79463581,24.81787863,69.63303235,51.00631508,35.57067353,62.42333583,46.05420463,58.63277647,73.91690943,63.81361902,8.556791469,55.24588765,32.39251633,13.23801035,21.89826192,48.17172314,45.40068999,23.78215757,52.62908978,20.14722763,54.3574184,23.93835979,59.30621344,46.13154504,61.28285282,59.60077375,72.53476327,24.96682566,12.52238966,26.55495701,28.03804869,70.43632237,61.04059265,12.6426726,55.46866702,70.31329117,56.58831363,58.63999673,28.11631627,6.721991448],
[42.77989519,6.288581842,67.33435037,90.24285873,59.25143367,67.41423968,9.410360624,40.10190957,98.82565712,50.43120356,32.01024505,13.67682718,66.01881354,23.46106833,28.03714239,0,25.44937494,51.30285843,19.4433461,52.84433101,68.54132999,67.54882711,29.2223344,73.19491251,67.96582705,41.99445921,66.34089889,43.77298567,60.68429261,53.30653379,79.62551903,50.87696837,71.20256879,79.41802403,58.11359601,44.41402369,59.94209237,47.45264561,65.34378553,36.95573012,51.01043514,21.72008198,67.09438115,53.46182747,76.51947191,21.95270208,53.07667675,79.91842597,97.73802215,21.32478847,37.88086207,11.34800082,90.78395263,60.92017626,63.59404498,53.0830108,73.33926811,81.82646537,71.09814261,51.64414306,26.23085107,64.21046946,19.99643125,39.93552164,49.01812003,67.50803443,49.31796912,34.36824279,41.28979698,46.73696255,28.74968289,47.54473864,73.38188735,70.19200182,62.47818919,73.33517016,64.47949806,25.00815855,32.70171479,41.84615526,6.57799819,94.35488298,75.22119806,32.69469072,75.60179631,93.1581319,73.74147312,83.52018256,51.48559479,31.66727078],
[52.41229411,24.73396593,53.43310071,70.22633254,35.61861625,45.09209506,28.07408411,20.00334258,81.60332591,51.35317466,27.22372482,37.15183638,40.60301617,48.49719712,6.039546399,25.44937494,0,59.65661314,41.44721601,29.78168242,57.26022654,50.41907264,6.36749395,55.88488612,67.15051129,21.6205071,70.7908833,43.23987214,56.9540204,32.9042152,86.80868221,29.32082261,53.19174178,82.73533982,68.26761527,19.07459239,37.76235636,22.85122048,70.82869695,24.71586099,60.75681163,43.87197441,44.59882895,34.67494271,80.67773505,26.89054804,44.40353726,62.92173281,78.85543303,39.72324125,39.10650463,24.78695314,75.57418572,56.55375788,38.83317897,65.36141287,50.70003783,64.41395914,78.09866129,66.23267784,13.16538865,60.73961987,33.63577589,14.51984392,23.60164947,54.2096828,50.14843873,18.41521817,54.99430225,21.28781746,53.21444103,22.94136663,65.22364009,51.84824276,65.90867476,65.50035467,75.84155051,18.9379438,18.2967151,32.2647524,24.18586114,76.07207134,66.96920678,9.01156842,61.48340901,76.10055527,62.61515247,64.13596726,34.04965709,6.231497522],
[8.559339301,45.43488009,51.21862313,81.34434756,70.96491807,102.6764506,41.89251044,54.18856524,80.62202689,16.46243063,34.31792974,59.73405371,86.27337468,59.58052824,56.0180331,51.30285843,59.65661314,0,37.98818326,87.5803858,46.28540115,58.52079224,66.02390356,62.28169901,25.48423437,55.06775285,16.54288132,21.31414443,27.45184343,92.21633533,28.38094234,60.58604319,62.74046684,29.39122848,9.058064475,69.3942478,66.87603158,67.38328885,14.73684119,42.28234808,3.275658063,66.69477667,72.25570962,94.28830054,26.06954266,33.39817849,35.47487686,65.92281255,84.06604769,32.07188887,22.00623411,41.04271026,69.53721923,28.81536815,78.69791455,10.36714836,76.98735638,68.25675872,19.79596435,16.0442723,47.47880852,28.39829223,31.31640779,67.36842137,73.45706587,50.01319941,16.84971034,77.27968899,14.16907854,73.09479318,45.50920305,79.14098779,42.62847895,62.93719486,14.82835849,41.95793057,16.94323656,72.31376878,46.27056645,37.23725892,57.74653557,79.79165302,43.96041711,68.3405345,56.46048714,75.74970281,48.89766393,74.54581467,52.05453573,62.7329447],
[29.73906448,16.97199729,69.14400337,96.0442537,70.4389576,85.68646696,13.37334085,50.13586611,101.6046475,42.99583475,34.20865267,22.5771438,80.35374061,21.90364274,41.86153342,19.4433461,41.44721601,37.98818326,0,70.68778037,68.15923203,71.99227053,46.52728895,77.37194199,59.65920407,51.91048602,54.36390452,38.84481352,55.3385333,72.04015407,65.05974979,60.61798991,76.12895969,67.36043299,42.87372079,59.00261903,69.51493014,60.55517697,52.72110194,42.52949314,36.70176786,28.86292382,76.56139855,72.51274487,64.05725806,22.55740061,52.57023708,83.39417632,102.1298714,6.776196518,33.16785742,17.04939671,92.12039297,56.03013405,76.19041669,36.83413638,82.65995718,85.56198171,57.06857864,34.08473252,36.44974996,58.26429755,13.38738466,54.99175866,63.75820513,68.81910098,42.15104009,53.44099944,25.22946577,61.94540263,13.45088892,64.38047937,70.14097201,75.48213955,51.57047207,69.84878175,48.10271094,44.44753771,40.98492289,44.25553882,25.52194391,98.29992635,71.90471764,49.88918494,76.91867761,96.01841079,72.78963632,88.99142027,57.8373748,47.21524899],
[81.02061035,53.72595597,66.21221522,70.3880371,34.21788459,15.3530153,57.39654209,36.02798386,85.69069682,76.68690015,53.42969233,61.42067875,24.92602638,73.59763755,31.84046402,52.84433101,29.78168242,87.5803858,70.68778037,0,72.4688534,59.25667118,24.18016904,63.33112485,90.12336825,36.12926825,96.56439929,68.72428744,78.87700306,8.502714444,113.2909538,36.99524889,59.9932439,107.3407975,96.4829317,20.17976313,40.07707459,25.24452092,97.10188548,47.03437328,89.08342682,66.00806032,43.70483815,12.81905506,105.8434992,56.15031981,64.3173973,69.68434194,80.26777022,69.43843684,65.90098024,54.4416989,83.43073202,78.06233916,30.69133669,94.25575598,47.75932434,70.2680168,104.7779101,95.60278578,40.22753703,82.45006457,63.4034301,20.58796947,18.38487265,67.59619223,75.55192032,20.94139977,84.39191365,16.83677737,81.55751664,8.8781391,82.56323054,58.35282869,91.43153972,83.11358458,104.2502301,32.20689882,41.74614401,54.21216857,49.18838281,78.89951661,84.02712866,20.9027895,72.65751306,81.03855073,77.23633225,66.45315552,47.0695164,25.17666698],
[47.6395033,62.78665591,7.704441461,35.78202274,41.53797188,84.31054248,61.93721037,38.73912257,34.80190914,30.32050654,36.55093549,81.81483661,58.35656759,88.07110794,51.23725264,68.54132999,57.26022654,46.28540115,68.15923203,72.4688534,0,17.29226569,61.84556102,18.29134983,28.01020448,37.8262404,41.39303121,30.21613674,19.32632513,80.11403479,56.5646103,35.52872466,20.23114455,45.41702373,53.11705964,52.6491023,35.29361644,47.22484726,43.73798389,33.25952935,49.53224979,89.9887052,36.72769402,83.80778849,45.95963346,47.67606105,15.73880271,20.02909663,37.78068639,61.59891954,35.25041159,58.01064061,24.30502461,17.85029858,48.95147709,56.63848697,38.73540627,22.31115973,50.80925951,62.1930023,45.89356261,20.09451674,55.05215376,53.98364816,54.1413242,5.94859768,30.36291416,74.10498968,56.16244907,55.68996605,80.65659655,63.92147515,10.90023522,21.23880167,37.22427283,11.69091797,59.56414433,76.06208879,39.36925392,26.86981009,72.53384817,33.50731012,11.96825494,61.8484927,10.17554353,29.64882139,5.378550746,29.48409483,25.51473195,55.48401863],
[57.71653277,62.66049676,9.593636341,24.24507559,26.00616209,69.58238422,62.9398976,30.42124467,31.49866369,42.07389798,37.83579719,81.22482964,42.16899925,89.46984158,44.55455077,67.54882711,50.41907264,58.52079224,71.99227053,59.25667118,17.29226569,0,53.60142471,5.653098271,44.40362725,28.87969241,56.88243946,38.8031046,34.1749497,67.40954811,72.87405967,23.10523353,4.336273539,62.29643726,66.44062129,40.70746827,19.67804913,34.68195008,58.93134828,30.68315663,61.58316575,89.22579248,19.70001829,71.41698315,62.5439722,49.65260451,23.14901331,12.58042421,30.36024419,66.06157244,42.03139885,58.56516833,25.36813519,32.72153396,32.73941118,68.74911082,21.45642931,14.31817098,66.44432748,73.6286078,41.91735793,36.00310878,58.63193167,43.20729777,41.01060949,11.34870487,41.68327077,64.88323697,65.71788877,43.10613371,85.27487943,51.30839192,28.05093017,4.45419603,52.23265248,28.89193669,73.56000314,69.18462349,35.11105945,27.7540973,70.13804123,26.82327619,28.85956963,52.70661739,13.54586909,25.88191364,20.22978013,17.14009925,16.53366803,46.97351916],
[58.75682446,29.58502223,57.4876327,71.96946167,35.92765333,39.33680693,33.21825803,23.48964941,84.28859349,57.54551886,33.40256929,39.53922617,38.13660519,51.37878858,11.23996338,29.2223344,6.36749395,66.02390356,46.52728895,24.18016904,61.84556102,53.60142471,0,58.89201298,73.10444919,24.82356559,77.06378766,49.42041596,62.71135546,26.6765532,93.14259316,31.35529199,56.00766575,88.91683057,74.62709763,17.63442951,39.05457479,22.71786629,77.13936056,30.11999149,67.11404898,45.51050551,45.48932464,28.3272172,86.91012921,33.18369753,49.709192,65.91189225,80.96947444,45.33034156,45.4085176,30.31729512,78.94555973,62.24435156,37.84665244,71.66617498,51.36208826,67.24188857,84.43844621,72.43103849,19.2898948,66.48584769,39.57858342,13.0657049,21.52251677,58.39804387,56.34473999,12.55545902,61.19453258,18.80486909,57.69907793,18.32672978,70.27852223,54.57052172,72.1527806,70.60526326,82.18884763,16.04792918,23.73929225,37.76805096,26.63422845,78.44217153,71.98825461,3.473104442,65.33961031,78.89774663,67.15078614,66.22941257,37.64940945,6.627974548],
[62.03784071,68.28070695,11.33612019,19.37521169,29.42793491,72.90228637,68.51120096,35.88279059,25.87462116,45.83151431,43.28593417,86.87025632,44.71071308,95.05546887,50.0617232,73.19491251,55.88488612,62.28169901,77.37194199,63.33112485,18.29134983,5.653098271,58.89201298,0,46.24978258,34.29028747,59.34312402,43.25281486,36.78472159,71.61220255,74.81991987,27.99104606,3.37150965,63.68712233,69.88500035,45.37827511,23.29193995,39.26731323,61.55629112,36.30817277,65.41568383,94.87577513,21.6558735,75.70176085,64.24776522,55.11902278,27.37230655,7.038273386,24.81873552,71.35823043,46.85270021,64.1506069,20.36942679,35.29936308,35.42117067,72.59725672,21.79702261,8.66955737,68.84498073,77.68796265,47.56346924,38.12568098,63.99396403,48.13624028,45.30166248,12.85884338,45.55194321,69.96623287,70.19929446,47.55536298,90.60377791,55.6602716,28.27422218,5.016833776,54.92245577,29.17880861,76.77359018,74.57975077,40.76145634,33.11819108,75.78774544,21.20191839,28.74052772,57.86840565,11.30062309,20.27983563,19.76350972,12.35688762,22.13534975,52.2676687],
[31.25151882,61.67825794,35.13486982,63.37526204,64.73610319,103.9528975,59.14009647,54.09966051,58.88908526,17.53574573,40.1926705,79.07198716,81.61447937,81.5226969,61.90526799,67.96582705,67.15051129,25.48423437,59.65920407,90.12336825,28.01020448,44.40362725,73.10444919,46.24978258,0,54.11868494,14.15354277,24.75180994,11.49408812,96.53014154,28.57108367,56.00551012,47.90287058,18.24952351,28.99751767,70.09774538,59.14564488,66.08932991,16.86814001,43.5706143,28.51139951,86.80930267,62.44709325,99.52226962,18.14762426,46.38295605,26.38747341,47.64062116,63.81943007,53.00817778,30.29506479,56.64529777,47.54922608,12.61407833,72.66901621,34.49302365,65.56519614,49.8149951,23.09876361,40.73728688,53.9994212,8.551633652,49.24579588,69.72325098,73.03484281,33.47919647,18.65130624,85.54694951,39.09455435,73.68681741,69.40356026,81.24608235,20.13122776,48.69532735,11.52273275,19.25659709,33.79921807,83.76802524,49.63827426,36.05450287,73.67626617,59.55315587,20.88887842,74.38794983,37.30449569,54.72209858,28.30250066,57.37445258,45.54075609,67.95880917],
[50.1453012,38.42329848,32.84725272,49.05400159,18.59220295,49.87227468,40.03969311,1.892680154,59.98301959,41.8968331,21.75238374,55.37172386,31.47820168,65.24167349,15.93201048,41.99445921,21.6205071,55.06775285,51.91048602,36.12926825,37.8262404,28.87969241,24.82356559,34.29028747,54.11868494,0,61.56979046,34.42246454,42.79133022,43.05771014,78.54604703,8.932641124,31.57125831,71.6409426,64.12171295,15.99504306,18.02337083,12.44952112,62.45248708,12.81796061,57.20261479,62.95729536,25.19098197,46.47046133,70.38733249,30.34912434,28.19079897,41.32853786,57.39363906,47.56159501,33.1725315,35.61728702,54.16629328,41.94690126,25.09378727,63.41735362,31.42854203,42.79596799,70.31984035,66.27053263,16.01559138,46.33434781,39.91175035,16.32205873,19.08825264,33.87165402,40.8540514,36.58761643,55.76465122,19.56848339,65.20954021,27.26652786,47.17257887,30.23309714,56.37280871,47.63468965,72.00479217,40.30578585,11.05617646,18.72926838,43.19451337,54.50788342,48.75899467,24.28383238,40.56185726,54.48285095,42.99116066,42.73204055,12.85938108,18.21817412],
[24.63358841,60.23006801,48.04081167,77.08824341,74.6919135,111.1125908,57.008972,61.15423517,73.04226603,19.87753543,43.74861234,75.70414385,91.15837995,76.06739602,66.26357282,66.34089889,70.7908833,16.54288132,54.36390452,96.56439929,41.39303121,56.88243946,77.06378766,59.34312402,14.15354277,61.56979046,0,27.90320905,22.7076145,102.1729287,17.02729369,65.1085966,60.66936719,13.12903385,16.32922665,77.13780581,69.6013791,73.96813802,2.872907088,49.5891799,18.62355128,82.88784535,73.74180921,104.7318482,10.21825232,46.45763557,36.14580851,61.31485593,77.88967387,48.23206371,31.71253341,55.49864854,61.70249517,24.16341045,82.66032731,22.8189645,77.46792845,63.5402809,9.568230777,29.03529213,57.82383968,21.2985386,46.46946832,75.97994489,80.63788851,46.48435344,21.0187439,89.0468046,30.57424092,80.83621911,61.99310698,87.79360231,34.25312992,61.28956745,5.202059657,33.38982214,19.87368999,85.48778603,54.89701298,42.84140421,72.58904502,73.61286094,35.0422942,78.89939376,51.06374339,68.84342907,42.23869129,70.87679541,55.17286163,72.77673918],
[18.94551955,37.50720546,33.01855188,62.62519364,49.67898839,83.41081452,35.41500084,33.77226909,64.81087282,8.129597631,16.02043472,55.69742364,65.22565249,59.89354101,38.46398485,43.77298567,43.23987214,21.31414443,38.84481352,68.72428744,30.21613674,38.8031046,49.42041596,43.25281486,24.75180994,34.42246454,27.90320905,0,17.05360431,74.27083441,44.57150172,39.36606041,43.12961626,39.49887377,30.20447918,49.54809705,45.57364928,46.86437726,28.38200688,21.94729039,23.93918448,63.69642777,51.07935682,76.86147622,37.53520326,21.88810188,15.91938746,47.9979314,66.79727401,32.10783826,5.984498915,32.43302698,54.52011935,17.49111317,57.45340374,30.84669109,56.00422724,50.31630764,36.11991109,35.13968221,30.13053033,20.46617297,26.51430386,48.15914003,53.28263497,32.21583886,6.936832776,61.6253927,26.94949649,53.2631161,50.76700941,59.99532883,31.30314143,43.07217781,22.8486794,31.03206225,38.0115404,59.15010284,27.00694393,16.04734413,49.21013847,62.66103411,33.07686432,51.10601006,39.82439659,59.45671402,34.38902089,55.59717557,30.76455759,44.9128289],
[30.25790504,54.44740046,25.45017471,55.05226011,53.3220593,92.56036134,52.45823092,42.8577365,53.18749698,12.91176976,30.69122099,72.74923249,70.16279388,76.72730703,51.47162885,60.68429261,56.9540204,27.45184343,55.3385333,78.87700306,19.32632513,34.1749497,62.71135546,36.78472159,11.49408812,42.79133022,22.7076145,17.05360431,0,85.45472869,38.97364843,44.51180761,37.98867838,29.63490716,33.83387737,58.78574992,47.82377105,54.65698323,24.80085862,32.77355314,30.72714533,80.74911849,51.42575647,88.55614031,29.14308493,38.73444737,14.89639758,39.33554399,56.91937858,48.56240877,23.03782575,49.37558248,42.08559407,1.489695361,61.27115651,37.69808566,54.88622465,41.62950362,32.27129043,43.49161884,43.92763917,3.789269098,43.45855499,58.58857199,61.62430578,23.95980051,13.47505991,75.23912641,38.80869977,62.34464963,66.54784303,69.99998764,15.63541982,38.58524327,18.14094758,15.11622267,40.24857035,74.27955581,39.0244344,25.13606894,65.92317395,52.62682429,17.20194977,63.77183285,29.4135187,48.39134637,21.46216613,48.58666297,34.06010948,57.28386989],
[85.21792873,55.15306618,74.07837052,78.88788215,42.64267312,14.8811854,59.05264616,42.71308346,94.17626033,82.34379,58.5617639,60.19854668,33.0618978,72.37666542,36.22507275,53.30653379,32.9042152,92.21633533,72.04015407,8.502714444,80.11403479,67.40954811,26.6765532,71.61220255,96.53014154,43.05771014,102.1729287,74.27083441,85.45472869,0,118.6764633,44.83518636,68.2894267,113.3740602,100.9657701,27.47712458,48.41466199,33.01110429,102.5259625,53.04807666,93.48332106,63.85034454,52.19042494,4.344192799,111.6936123,59.79218149,71.15158848,78.03887264,88.7699716,71.57936873,70.95927914,56.61780639,91.78237505,84.72321266,39.17784777,98.24670601,56.25770888,78.66687961,110.0599134,99.10598972,44.78154125,89.10085918,66.1694825,26.88483055,26.40192395,75.41057357,81.1783617,19.18521278,87.86871389,24.48998384,81.96742787,16.22163807,89.9974075,66.65405523,97.10674056,90.51081451,108.617396,30.19212064,47.32627294,60.47806116,48.79274422,87.3962057,91.51198326,23.96707588,80.72916903,89.49847722,84.99070991,74.94274053,54.61374442,29.54258423],
[36.85186187,73.80628982,63.69004377,91.63491725,91.63981465,127.9588518,70.21903725,78.08950408,85.55411429,36.710848,60.11732626,87.3905677,108.1631675,85.76528821,82.57246787,79.62551903,86.80868221,28.38094234,65.05974979,113.2909538,56.5646103,72.87405967,93.14259316,74.81991987,28.57108367,78.54604703,17.02729369,44.57150172,38.97364843,118.6764633,0,82.12390812,76.44967954,12.92940951,22.20565565,94.02702215,86.45460784,90.96076574,16.18965731,66.43354018,28.70359282,93.91144661,90.36743191,121.0929517,10.90754416,61.38005932,53.00320984,75.99040469,91.29062491,59.7421853,47.78510626,69.41805478,74.34375897,40.35544323,99.61218872,28.68669798,93.83762274,78.10769869,8.744308277,33.36873219,74.05296048,36.87110665,59.66675092,92.73059229,97.59500823,62.04429293,37.80678804,104.8523653,39.84618207,97.73347015,69.99520347,104.5663186,47.90892214,77.2059088,22.22528106,46.98333649,18.86042676,100.4857013,71.55310176,59.81822564,86.09809167,87.09994439,48.24967304,95.15802874,65.62290029,81.9525446,56.46596008,85.81985114,72.12954801,89.17537411],
[56.53666255,47.35539658,29.24684645,40.90806144,10.59793698,49.00461456,48.92956631,10.81667845,52.98763436,46.09750793,29.03235452,64.18576479,26.07171551,74.16185681,24.09914333,50.87696837,29.32082261,60.58604319,60.61798991,36.99524889,35.52872466,23.10523353,31.35529199,27.99104606,56.00551012,8.932641124,65.1085966,39.36606041,44.51180761,44.83518636,82.12390812,0,24.91760726,74.06020459,69.55058239,17.67088532,9.091174953,11.82520916,66.33144655,19.6363616,62.997341,71.6883852,16.25891966,48.69557814,73.22076242,38.70374219,29.63301166,34.90836097,49.67169109,56.04144465,39.25993411,44.49273755,48.32873591,43.43632157,18.1177488,69.55593695,22.49844098,36.07345989,74.25917297,72.9104507,24.94668045,47.72838779,48.33726062,20.1475265,18.62687261,30.60548898,45.18267382,42.01044151,62.80354078,20.34740556,73.97134122,28.61709852,45.84686606,23.40539594,59.92808865,46.45357427,77.37523363,47.32382332,19.6331596,23.34998594,51.8608488,47.08726333,47.23247071,30.02626434,36.05273795,47.66325406,40.24194483,34.92764533,10.608964,24.81918894],
[62.03497797,66.44844157,12.77136775,19.9825785,26.05816786,69.53351239,66.85341664,33.22251871,28.41336895,46.28265837,41.9359784,84.87671156,41.39493672,93.34107608,47.43770617,71.20256879,53.19174178,62.74046684,76.12895969,59.9932439,20.23114455,4.336273539,56.00766575,3.37150965,47.90287058,31.57125831,60.66936719,43.12961626,37.98867838,68.2894267,76.44967954,24.91760726,0,65.59596567,70.58094495,42.17964497,19.93716317,36.05022733,62.78610681,34.49596665,65.82044578,92.82898492,18.3801825,72.39115434,65.99820326,53.72439712,27.43420833,9.995943844,26.54007271,70.25464025,46.36192195,62.45199747,23.58920636,36.51854372,32.08246243,72.99214962,18.92280286,11.24167907,70.214163,77.91353052,45.34427118,39.61239244,62.78713946,45.03590662,42.00615884,14.45623403,45.9179312,66.9268651,70.05028183,44.29190657,89.44289719,52.36969803,30.63101418,1.647087788,56.10658311,31.51369546,77.63360274,71.78393245,38.60166982,31.93793411,73.57681724,23.22013671,31.23601516,54.88759481,14.336341,22.92258114,22.33176473,12.88793885,19.81636675,49.39393802],
[37.68030795,73.28046004,52.8532566,79.72543295,82.95220875,121.5018726,70.10585675,71.45892057,72.90526152,31.38250647,55.51930828,88.82262183,99.79531609,88.963191,77.91162827,79.41802403,82.73533982,29.39122848,67.36043299,107.3407975,45.41702373,62.29643726,88.91683057,63.68712233,18.24952351,71.6409426,13.12903385,39.49887377,29.63490716,113.3740602,12.92940951,74.06020459,65.59596567,0,26.95713468,87.52073823,77.39238789,83.81949259,14.66070567,60.36602478,31.07153602,95.96823101,80.64589613,116.1430503,3.66130862,59.22786905,44.43656296,64.25351971,78.8760384,61.30737079,43.97336063,68.50424477,61.76985754,30.83062352,90.89501109,33.90239225,83.61023018,66.29005341,13.23127436,39.72519125,69.62736268,26.78856708,59.581793,86.7946048,90.687594,51.14493759,32.58834469,101.1065031,43.09455668,91.1662655,74.4642292,98.48963632,35.99483743,66.49476765,17.15064512,35.06063517,27.24524982,98.06800087,66.08393471,53.14191317,85.62850453,74.73169028,36.12700606,90.54155963,53.91311975,69.47900477,44.68621014,74.18636143,63.6736881,84.26505137],
[16.01323158,52.53609876,58.65344852,88.66544299,79.88302257,111.6208805,48.76854456,63.24661711,86.73121337,24.54656419,43.32628702,65.27592373,95.2964141,63.61636196,64.82378081,58.11359601,68.26761527,9.058064475,42.87372079,96.4829317,53.11705964,66.44062129,74.62709763,69.88500035,28.99751767,64.12171295,16.32922665,30.20447918,33.83387737,100.9657701,22.20565565,69.55058239,70.58094495,26.95713468,0,78.4249639,75.6709493,76.44132672,13.575903,51.33972617,7.525142581,71.71404775,80.89005082,102.9385079,23.31529079,41.68236201,43.65756282,73.04682752,90.74390707,37.71802032,31.05767793,48.46739524,75.48062136,35.2910035,87.65105464,6.958946816,85.4648791,75.36090703,14.68330869,12.87210501,56.31070466,33.95048022,38.38992677,76.34393178,82.50583969,57.32991747,25.1439691,85.64028754,17.64738581,82.12196701,48.16093096,88.09286693,48.06135793,70.8860818,17.47716417,47.29444588,7.885195667,80.16245419,55.2905607,46.2031471,64.65872009,86.44958621,49.17419403,77.03926939,63.24138701,82.10918015,55.12970979,82.01341268,60.83958983,71.54523017],
[63.58061167,42.98509658,46.76357494,55.93476365,18.92064634,34.00677791,45.83770249,16.06269698,69.59013644,57.31678464,35.1182889,56.17688538,21.63344792,67.56977021,17.14386686,44.41402369,19.07459239,69.3942478,59.00261903,20.17976313,52.6491023,40.70746827,17.63442951,45.37827511,70.09774538,15.99504306,77.13780581,49.54809705,58.78574992,27.47712458,94.02702215,17.67088532,42.17964497,87.52073823,78.4249639,0,23.18618127,6.163113103,77.86213978,27.60780948,71.2217556,62.6702918,28.84198236,31.17526407,86.16856402,40.44748832,44.1573482,52.15070238,65.36123383,56.14409349,47.41031811,41.95549514,65.74609222,57.93993696,20.21756974,76.95409087,34.37428806,53.10930824,85.65669188,79.07213516,23.79317529,62.32705295,49.10067624,4.651297345,4.756069247,48.04226015,56.22300223,25.61302395,68.09190142,3.717195114,71.45638722,11.37413484,62.53807598,40.59810684,71.96119135,63.06314443,86.28922907,33.15206679,23.1452782,34.41536306,43.18510062,63.26870273,64.04156932,15.01312109,53.7210224,64.48401737,57.56769405,50.79050958,27.14007085,12.86466693],
[63.59738826,56.44437672,28.00948541,32.96766048,6.346555621,49.90513048,57.9804223,19.90780727,46.45825372,51.52780656,37.13839688,73.20189638,23.08103863,83.24793491,32.85342605,59.94209237,37.76235636,66.87603158,69.51493014,40.07707459,35.29361644,19.67804913,39.05457479,23.29193995,59.14564488,18.02337083,69.6013791,45.57364928,47.82377105,48.41466199,86.45460784,9.091174953,19.93716317,77.39238789,75.6709493,23.18618127,0,17.06283772,71.11457749,27.78582186,69.49585206,80.64149458,7.167744835,52.55785952,76.95350335,47.39012125,33.46080271,29.62471416,42.2247468,64.76409804,46.33762721,53.53376255,43.36772698,46.57551808,13.73725906,76.290448,13.40878868,30.31488715,79.00201176,80.0522842,34.03505473,50.63071448,57.03751252,26.7550239,22.31095436,29.64186878,50.74199194,48.6867799,70.34307142,24.78829731,82.90445875,32.65829038,46.13663672,18.2924367,64.51673476,46.87033785,83.37830608,55.10106198,28.56797735,30.0406641,60.78361237,40.08312439,47.2609945,37.25649195,33.22188804,41.45296053,39.24712929,27.60817173,14.83138779,32.75012183],
[62.15986186,45.2803504,41.06769324,49.91345665,13.21973692,37.95185423,47.73541567,13.19480763,63.43285275,54.33730542,33.56779616,59.85410819,20.09405404,70.86005967,19.44036816,47.45264561,22.85122048,67.38328885,60.55517697,25.24452092,47.22484726,34.68195008,22.71786629,39.26731323,66.08932991,12.44952112,73.96813802,46.86437726,54.65698323,33.01110429,90.96076574,11.82520916,36.05022733,83.81949259,76.44132672,6.163113103,17.06283772,0,74.88611238,25.10778673,69.4339028,66.71651568,22.95678672,36.87777319,82.66973574,40.55397616,39.83202115,46.01087188,59.27453215,57.07535201,45.41469206,43.59350559,59.6289487,53.71517348,16.14255091,75.49838364,28.68846586,46.95208545,82.76064757,78.07127376,24.29128286,58.08332756,49.7106415,9.859556889,7.039556009,42.41017211,53.29969217,31.64116415,67.32958436,8.522209718,73.41460154,16.79194608,57.36062298,34.46156986,68.76790767,57.92820879,84.3265183,38.61110223,21.87938275,31.14759739,46.95951602,57.13426888,58.80426008,20.51358527,47.81988532,58.32098096,52.01950572,44.67043386,21.86093017,17.00339351],
[23.10591688,59.30269394,50.23083385,79.48902462,76.07302332,111.7774078,55.9675217,61.95526826,75.72615848,20.56469547,43.98379573,74.32961036,92.40240724,74.30249464,66.47268753,65.34378553,70.82869695,14.73684119,52.72110194,97.10188548,43.73798389,58.93134828,77.13936056,61.55629112,16.86814001,62.45248708,2.872907088,28.38200688,24.80085862,102.5259625,16.18965731,66.33144655,62.78610681,14.66070567,13.575903,77.86213978,71.11457749,74.88611238,0,50.26023454,16.48317533,81.3861742,75.44495829,104.9871124,11.3533992,45.95317324,37.72485761,63.71499022,80.469711,46.73378481,31.73224915,54.66405282,64.38861548,26.27725817,84.02829351,20.19567425,79.31738967,65.95748229,7.927859135,26.36369015,57.97675864,23.67014455,45.38722997,76.54099635,81.47242138,48.70645126,21.64089768,88.98522143,28.50570611,81.57135442,59.92123103,88.37715854,36.89869871,63.35756776,6.713428322,36.04706887,17.02921621,85.075071,55.36651722,43.74054558,71.66792085,76.18677996,37.73646927,79.08213653,53.50955553,71.47006697,44.76983144,73.20408295,56.56158711,73.04874162],
[37.37057763,31.97786358,30.7481669,54.04525819,30.20892423,61.53131213,32.39998875,11.91952342,61.86998035,29.73287385,9.404353633,50.6151472,44.24824763,58.84724264,18.92843595,36.95573012,24.71586099,42.28234808,42.52949314,47.03437328,33.25952935,30.68315663,30.11999149,36.30817277,43.5706143,12.81796061,49.5891799,21.94729039,32.77355314,53.04807666,66.43354018,19.6363616,34.49596665,60.36602478,51.33972617,27.60780948,27.78582186,25.10778673,50.26023454,0,44.38738446,58.67139236,34.54351622,55.96050492,58.81085863,20.00983295,19.68782668,42.97128166,61.00473988,37.29888888,20.35578755,27.974571,54.04283154,32.21827692,37.39184208,50.61327785,40.45990782,44.90639933,58.04890758,53.58234533,12.635986,36.51724707,29.57770684,26.45339293,31.36294396,31.14588244,28.62690969,42.67525415,43.25660113,31.32083303,55.97882314,38.2252695,40.58109806,33.61697729,44.43227795,40.82846363,59.22471245,43.10281882,6.421520851,7.666067481,40.01950299,57.50497173,42.34790678,31.01268968,39.04629883,56.20240316,38.63485985,47.11933211,15.34843463,24.51377144],
[8.517827435,45.30930669,54.3915391,84.51888691,73.44068499,104.2571439,41.62245928,56.24859066,83.89457611,19.58488,36.10410678,58.79832547,88.53280155,58.01981003,57.3735974,51.01043514,60.75681163,3.275658063,36.70176786,89.08342682,49.53224979,61.58316575,67.11404898,65.41568383,28.51139951,57.20261479,18.62355128,23.93918448,30.72714533,93.48332106,28.70359282,62.997341,65.82044578,31.07153602,7.525142581,71.2217556,69.49585206,69.4339028,16.48317533,44.38738446,0,65.53807911,74.99926138,95.43027963,27.6124793,34.15862881,38.48833532,69.13072326,87.31163695,31.10473596,24.0322386,41.12247774,72.81263292,32.08902013,81.11475897,7.181634816,79.82179224,71.46607262,20.4215083,12.76902926,48.87932827,31.65423906,31.14236809,69.02996463,75.37363995,53.20521034,19.90253121,78.1170809,12.02676509,74.90639265,43.43832347,80.7435937,45.8906023,65.98781156,17.56183654,45.21530569,15.16726293,72.72002098,48.07667536,39.68299164,57.52195903,83.03954083,47.21278214,69.54546323,59.70618396,79.01492666,52.17105166,77.69869396,54.69959905,64.09553996],
[58.29133094,27.20468134,89.01432619,111.6741138,79.26934489,78.72248755,28.39793514,61.07914101,120.5393616,69.46159011,53.45156166,8.173920439,83.64665723,11.18259065,47.91770635,21.72008198,43.87197441,66.69477667,28.86292382,66.00806032,89.9887052,89.22579248,45.51050551,94.87577513,86.80930267,62.95729536,82.88784535,63.69642777,80.74911849,63.85034454,93.91144661,71.6883852,92.82898492,95.96823101,71.71404775,62.6702918,80.64149458,66.71651568,81.3861742,58.67139236,65.53807911,0,87.720683,62.56981665,92.73914675,42.60240506,74.38815891,101.623996,119.3466065,34.66086463,57.71192956,32.02266164,112.4748919,81.15313552,82.68293329,65.54257852,93.93657134,103.5177204,85.92562719,62.25583208,47.60791318,84.08541874,37.58439441,58.02214339,66.90401312,89.15271315,68.45001247,45.19919206,54.06710378,64.27324168,27.81504207,62.95219214,94.24850784,91.78357661,79.74699614,94.13297782,76.66959746,33.88123211,54.2465989,63.45485521,19.88021997,116.0119827,96.07989881,48.75927501,97.26773002,114.872618,95.12220892,105.0326446,73.05849741,49.90199756],
[69.49677904,63.6108007,29.07080451,27.21850364,10.0022536,51.74422784,65.12415772,27.07554054,41.98620315,56.47553816,43.80235329,80.32260142,23.09670909,90.41243635,39.8623748,67.09438115,44.59882895,72.25570962,76.56139855,43.70483815,36.72769402,19.70001829,45.48932464,21.6558735,62.44709325,25.19098197,73.74180921,51.07935682,51.42575647,52.19042494,90.36743191,16.25891966,18.3801825,80.64589613,80.89005082,28.84198236,7.167744835,22.95678672,75.44495829,34.54351622,74.99926138,87.720683,0,56.45674941,80.49904391,54.33175137,37.768712,26.93025138,36.87565984,71.70543462,52.35718524,60.67238168,40.4783747,50.0844112,13.97436578,81.92064827,6.245278202,27.09283448,83.2509698,85.94209158,41.2014306,53.89724828,63.97330427,32.81416312,27.07940685,30.81071042,55.78173729,54.44692153,76.52468317,29.81785418,89.96961991,37.12731495,47.60228648,16.8225858,68.76753058,48.41347877,88.48224955,61.48830503,35.66797728,36.06326175,67.85039541,35.23802239,48.49840771,43.45349366,32.6419878,37.39550395,39.92978536,22.75515984,20.52229521,39.35911958],
[87.08357383,55.78010425,77.90618437,83.20502139,46.85364962,16.94546442,59.76260244,46.01127832,98.43779011,84.96858051,61.00871794,59.42834956,37.38046427,71.53117183,38.52049015,53.46182747,34.67494271,94.28830054,72.51274487,12.81905506,83.80778849,71.41698315,28.3272172,75.70176085,99.52226962,46.47046133,104.7318482,76.86147622,88.55614031,4.344192799,121.0929517,48.69557814,72.39115434,116.1430503,102.9385079,31.17526407,52.55785952,36.87777319,104.9871124,55.96050492,95.43027963,62.56981665,56.45674941,0,114.3666332,61.4915434,74.41738995,82.17933478,93.07986268,72.45473459,73.31271317,57.60880974,95.91692794,87.87027348,43.50805692,99.97106454,60.5776014,82.84248458,112.4339112,100.5769305,47.04949111,92.23529144,67.3905616,30.17574474,30.4196737,79.20679122,83.79036137,19.09806442,89.35737835,28.36580121,81.91269109,20.11661611,93.56090732,70.76014725,99.7096031,94.05291899,110.5148595,29.44822777,50.06378611,63.48266423,48.55703296,91.67716851,95.10277068,25.97431571,84.67623265,93.72900094,88.74293168,79.2117883,58.29305684,31.955111],
[34.45822295,70.4261779,53.2270194,80.80726257,82.36870577,120.1748139,67.17055105,70.11458966,74.67323263,29.41009684,53.51963793,85.67356705,99.1080403,85.58435062,75.99861591,76.51947191,80.67773505,26.06954266,64.05725806,105.8434992,45.95963346,62.5439722,86.91012921,64.24776522,18.14762426,70.38733249,10.21825232,37.53520326,29.14308493,111.6936123,10.90754416,73.22076242,65.99820326,3.66130862,23.31529079,86.16856402,76.95350335,82.66973574,11.3533992,58.81085863,27.6124793,92.73914675,80.49904391,114.3666332,0,56.65351091,43.70223425,65.20370143,80.38322876,58.08713802,41.70554267,65.71017717,63.44852521,30.43745854,90.33379946,30.26603685,83.70550092,67.29903219,9.652416723,36.06814782,67.63062306,26.64577897,56.61156513,85.26412721,89.47056475,51.55122061,30.59837632,98.9963316,39.61850921,89.83931367,70.94503773,97.01977267,37.05234075,66.81974418,14.78018854,36.12387038,23.66469209,95.64110338,64.36737484,51.75350922,82.78834877,76.19389685,37.35795547,88.64095608,54.8364757,71.0460687,45.65102071,75.07121309,62.96171387,82.43336544],
[25.69816455,15.74337821,47.57798198,73.57781442,48.9125185,71.49495035,14.28932418,28.71794353,79.88040999,28.94002318,11.83741967,34.46195397,60.64692812,40.51500289,24.42334677,21.95270208,26.89054804,33.39817849,22.55740061,56.15031981,47.67606105,49.65260451,33.18369753,55.11902278,46.38295605,30.34912434,46.45763557,21.88810188,38.73444737,59.79218149,61.38005932,38.70374219,53.72439712,59.22786905,41.68236201,40.44748832,47.39012125,40.55397616,45.95317324,20.00983295,34.15862881,42.60240506,54.33175137,61.4915434,56.65351091,0,31.960803,61.35624633,79.93287593,17.37583787,16.09955958,10.69511956,70.93012152,38.96966649,55.30171185,38.48284555,60.35030352,63.46306775,52.64231046,39.45829387,16.65784295,42.27832481,9.64741925,37.26339047,45.07262194,47.4643078,27.7789542,43.9586227,28.24161413,43.87760483,35.99453995,48.35962763,51.66888384,53.02190866,42.07936401,51.57567588,49.10872122,39.13871341,19.30110353,22.09902998,27.33346426,76.20138538,53.50348146,35.84656255,55.63473438,74.24098643,52.69492461,66.55062619,35.28543113,30.9872945],
[34.67118709,47.21292078,17.18198031,46.73164905,38.69088846,77.77226649,46.23800466,28.43858182,49.37719374,19.12234405,21.08734904,66.21646994,55.40945714,72.33240969,38.58132712,53.07667675,44.40353726,35.47487686,52.57023708,64.3173973,15.73880271,23.14901331,49.709192,27.37230655,26.38747341,28.19079897,36.14580851,15.91938746,14.89639758,71.15158848,53.00320984,29.63301166,27.43420833,44.43656296,43.65756282,44.1573482,33.46080271,39.83202115,37.72485761,19.68782668,38.48833532,74.38815891,37.768712,74.41738995,43.70223425,31.960803,0,32.11935234,50.96352596,46.08862414,20.10149161,42.37355143,39.56434643,13.89074517,46.66278617,45.63827101,41.94514723,34.42864838,45.58046883,50.4809201,31.99620069,18.25170511,39.37804123,44.27771626,46.82776298,16.52645959,18.62917227,62.24806707,42.84100452,47.65776522,65.26238038,55.45730656,21.05603644,27.52206414,31.08543755,21.23446106,51.03080245,62.66971221,26.10736176,12.28313584,57.36062902,46.86706314,22.86127639,50.3581418,24.45190393,43.90857635,20.74522732,39.72769888,19.26223053,43.83605472],
[66.44842139,74.88684535,14.99119164,15.77474108,35.5394843,78.64004368,74.96773527,42.91902081,18.95085851,49.63711927,49.52638721,93.58432755,49.95618614,101.5326416,57.09176475,79.91842597,62.92173281,65.92281255,83.39417632,69.68434194,20.02909663,12.58042421,65.91189225,7.038273386,47.64062116,41.32853786,61.31485593,47.9979314,39.33554399,78.03887264,75.99040469,34.90836097,9.995943844,64.25351971,73.04682752,52.15070238,29.62471416,46.01087188,63.71499022,42.97128166,69.13072326,101.623996,26.93025138,82.17933478,65.20370143,61.35624633,32.11935234,0,18.88662749,77.23565405,52.07754363,70.65060736,13.74639386,37.85326196,40.90081993,76.28911479,25.69040093,2.339243595,70.64733437,81.64722231,54.45434498,40.04528401,70.00780269,55.03171474,51.85434011,15.9743086,49.50485387,76.91366126,74.79436523,54.19708124,96.50951803,62.22060503,28.26240784,11.55399846,57.23910396,29.1966843,79.58344148,81.61593526,47.63087644,39.26217925,82.65194402,14.91700004,28.27678745,64.85093099,10.36817663,13.31164857,19.5717282,9.985902984,29.11383,59.28961986],
[85.07076451,92.9748268,33.78825151,9.952222922,46.8328863,86.42265386,93.30010409,59.15483093,8.449825262,68.00087288,68.09736049,111.4102904,57.25179469,119.825443,73.31892669,97.73802215,78.85543303,84.06604769,102.1298714,80.26777022,37.78068639,30.36024419,80.96947444,24.81873552,63.81943007,57.39363906,77.88967387,66.79727401,56.91937858,88.7699716,91.29062491,49.67169109,26.54007271,78.8760384,90.74390707,65.36123383,42.2247468,59.27453215,80.469711,61.00473988,87.31163695,119.3466065,36.87565984,93.07986268,80.38322876,79.93287593,50.96352596,18.88662749,0,96.0389025,70.95951885,88.9223367,17.4167417,55.47486731,49.66055359,94.41833812,32.53985477,16.63043752,86.87882026,99.95402306,71.80164658,57.02832218,88.74412004,68.96773356,63.9341694,34.61095097,67.95648408,90.9103659,93.48483751,66.63028998,115.3061282,73.99533908,43.70391397,27.56535389,74.26183074,44.59643572,96.88841847,96.97983933,65.10232251,57.89954415,100.0060286,4.296063045,43.13331682,79.38832495,27.60564788,9.465834758,35.74465473,14.74462485,46.29149459,74.47897182],
[23.63220219,16.96133125,62.82597756,90.22073739,66.15335728,84.66437298,12.86792308,45.86755716,95.28265717,36.24130242,28.53427595,27.69945222,77.0964338,28.5157592,39.18314142,21.32478847,39.72324125,32.07188887,6.776196518,69.43843684,61.59891954,66.06157244,45.33034156,71.35823043,53.00817778,47.56159501,48.23206371,32.10783826,48.56240877,71.57936873,59.7421853,56.04144465,70.25464025,61.30737079,37.71802032,56.14409349,64.76409804,57.07535201,46.73378481,37.29888888,31.10473596,34.66086463,71.70543462,72.45473459,58.08713802,17.37583787,46.08862414,77.23565405,96.0389025,0,26.48786847,15.01399707,85.65273604,49.25696197,72.30725996,32.1576297,77.71110582,79.43300541,51.52331741,30.3396452,32.78426656,51.49366328,7.73264866,52.42088249,60.88162599,62.43916193,35.38618886,53.60473352,20.32307694,59.30852452,19.27459115,62.54449471,63.391953,69.68005605,45.21176425,63.09228607,43.56422152,45.63776178,36.51276862,38.31685538,27.85941787,92.15235224,65.15113995,48.53753469,70.50001788,89.72334541,66.16441741,83.13998872,52.44498896,45.07329279],
[17.29653852,31.60291136,37.2387574,66.17762274,49.80804838,80.87124749,29.44086153,32.22362479,69.46446101,12.9558554,12.4712982,49.7155111,64.54694733,54.00584457,34.79463581,37.88086207,39.10650463,22.00623411,33.16785742,65.90098024,35.25041159,42.03139885,45.4085176,46.85270021,30.29506479,33.1725315,31.71253341,5.984498915,23.03782575,70.95927914,47.78510626,39.25993411,46.36192195,43.97336063,31.05767793,47.41031811,46.33762721,45.41469206,31.73224915,20.35578755,24.0322386,57.71192956,52.35718524,73.31271317,41.70554267,16.09955958,20.10149161,52.07754363,70.95951885,26.48786847,0,26.53322301,59.46583517,23.46428622,57.33566985,30.3400514,57.66424473,54.36058778,39.12227767,33.73032619,26.26793902,26.427812,20.59898609,45.52019351,51.45093624,36.62794038,11.76692301,57.33428992,24.23710324,51.11651167,45.41558556,57.34045517,37.10751974,46.11729685,26.93028724,36.87300145,38.93890502,54.15090192,24.32736856,16.31450543,43.42587346,66.90572064,38.89962198,47.37315805,44.50108526,64.00899054,39.7005891,59.08873236,31.83503047,41.42506554],
[32.6772139,5.074596635,57.39802441,81.99956364,53.93180439,69.65293466,4.476357764,33.77804063,89.40400475,39.11595946,21.55753605,23.85707394,63.31901799,30.90529083,24.81787863,11.34800082,24.78695314,41.04271026,17.04939671,54.4416989,58.01064061,58.56516833,30.31729512,64.1506069,56.64529777,35.61728702,55.49864854,32.43302698,49.37558248,56.61780639,69.41805478,44.49273755,62.45199747,68.50424477,48.46739524,41.95549514,53.53376255,43.59350559,54.66405282,27.974571,41.12247774,32.02266164,60.67238168,57.60880974,65.71017717,10.69511956,42.37355143,70.65060736,88.9223367,15.01399707,26.53322301,0,80.85315409,49.64076752,59.37162262,44.08915764,66.86606701,72.6691016,60.7772177,43.62077027,19.75631389,52.88170319,10.24660154,37.97987328,46.71138274,57.42119002,37.99417798,38.93613717,32.64054726,44.92698579,29.8561093,47.69026684,62.33338531,61.59104885,51.4608292,62.25200781,55.31610924,31.91799273,25.06797769,31.74356224,17.16731399,85.34599824,64.16972604,33.53891315,65.57837542,83.73977936,63.11465616,75.09180653,43.17426343,30.33094716],
[71.67238993,85.38521764,23.46906511,21.62870557,49.27624405,92.22185505,84.99776738,55.640096,11.33995507,54.18085473,59.32634532,104.3408145,63.34442896,111.4414079,69.63303235,90.78395263,75.57418572,69.53721923,92.12039297,83.43073202,24.30502461,25.36813519,78.94555973,20.36942679,47.54922608,54.16629328,61.70249517,54.52011935,42.08559407,91.78237505,74.34375897,48.32873591,23.58920636,61.76985754,75.48062136,65.74609222,43.36772698,59.6289487,64.38861548,54.04283154,72.81263292,112.4748919,40.4783747,95.91692794,63.44852521,70.93012152,39.56434643,13.74639386,17.4167417,85.65273604,59.46583517,80.85315409,0,40.73653794,54.44369089,79.75446771,38.56621917,13.39595246,70.3935027,85.57684479,66.16018049,41.53222365,78.87022173,68.47540987,65.5698532,23.46664352,54.35033829,90.23629286,80.23779723,67.87916071,104.806429,75.93631199,27.52994476,25.19824161,58.4732696,28.35777555,81.14246154,94.4284239,59.31866626,49.11255701,94.06077945,13.6216879,26.66039519,78.07383586,15.29569246,7.980974265,20.69499333,19.88297536,41.5248005,72.31921582],
[31.40561027,54.70583033,23.96565857,53.5661923,52.12712667,91.64501695,52.81478252,42.06882907,51.80792407,13.95199625,30.55916426,73.1232539,69.0004293,77.31747234,51.00631508,60.92017626,56.55375788,28.81536815,56.03013405,78.06233916,17.85029858,32.72153396,62.24435156,35.29936308,12.61407833,41.94690126,24.16341045,17.49111317,1.489695361,84.72321266,40.35544323,43.43632157,36.51854372,30.83062352,35.2910035,57.93993696,46.57551808,53.71517348,26.27725817,32.21827692,32.08902013,81.15313552,50.0844112,87.87027348,30.43745854,38.96966649,13.89074517,37.85326196,55.47486731,49.25696197,23.46428622,49.64076752,40.73653794,0,60.0655218,39.08740817,53.48711319,40.14901305,33.72297896,44.8461669,43.58808449,4.387771027,43.98468433,57.84317907,60.70137646,22.47159543,14.42670919,74.78668742,39.9728749,61.47635225,67.39229907,69.18897655,14.55839904,37.126157,19.62406827,14.0958446,41.73249311,74.04647779,38.52203087,24.55771207,66.06484283,51.18359047,16.18584225,63.2309666,27.9509868,46.98057842,20.0823774,47.09707594,32.94047349,56.72916661],
[74.5859657,61.30430838,41.55026146,39.74527651,7.97355102,37.78068492,63.60787391,26.61506862,55.44155076,64.01157447,46.66859853,75.9399862,9.440820741,87.00140895,35.57067353,63.59404498,38.83317897,78.69791455,76.19041669,30.69133669,48.95147709,32.73941118,37.84665244,35.42117067,72.66901621,25.09378727,82.66032731,57.45340374,61.27115651,39.17784777,99.61218872,18.1177488,32.08246243,90.89501109,87.65105464,20.21756974,13.73725906,16.14255091,84.02829351,37.39184208,81.11475897,82.68293329,13.97436578,43.50805692,90.33379946,55.30171185,46.66278617,40.90081993,49.66055359,72.30725996,57.33566985,59.37162262,54.44369089,60.0655218,0,87.65494986,17.12090315,41.05186123,91.94852611,90.91366134,39.74144766,64.19005048,64.75589647,24.83771049,16.69519045,43.22014576,63.13571693,44.45978553,80.64517966,19.61098908,89.22755771,25.35493325,59.82192047,30.47107472,77.51943073,60.56770222,95.46447334,53.11085567,36.03383171,41.46075722,63.00790661,48.50752845,60.90795501,35.10059906,46.11185954,51.09838952,52.72778282,36.23113674,27.48751916,32.78967384],
[13.37462792,47.80276173,61.56812262,91.69545258,80.06310262,109.5271755,43.88788493,62.36441381,90.88526727,26.76649487,41.96272138,59.38001356,94.85641515,57.11118733,62.42333583,53.0830108,65.36141287,10.36714836,36.83413638,94.25575598,56.63848697,68.74911082,71.66617498,72.59725672,34.49302365,63.41735362,22.8189645,30.84669109,37.69808566,98.24670601,28.68669798,69.55593695,72.99214962,33.90239225,6.958946816,76.95409087,76.290448,75.49838364,20.19567425,50.61327785,7.181634816,65.54257852,81.92064827,99.97106454,30.26603685,38.48284555,45.63827101,76.28911479,94.41833812,32.1576297,30.3400514,44.08915764,79.75446771,39.08740817,87.65494986,0,86.8278876,78.6233224,21.56697101,6.283297532,54.05791235,38.39970647,33.85584202,74.51415628,81.22879906,60.37389862,27.07575283,82.17061147,11.839035,80.60453604,41.37191323,86.09900245,52.64790169,73.14859771,23.09298476,51.94073532,11.41324175,75.9956973,53.87205412,46.34190782,59.65996162,90.14116481,53.90364017,74.28251897,66.81403048,86.05824753,59.16018946,84.87963288,61.53858402,69.12109652],
[74.65274849,69.84275638,31.04718986,22.63249346,15.4835237,54.35690276,71.32307909,33.31476815,38.4798688,60.94002097,49.62249792,86.55778533,25.14248603,96.65636344,46.05420463,73.33926811,50.70003783,76.98735638,82.65995718,47.75932434,38.73540627,21.45642931,51.36208826,21.79702261,65.56519614,31.42854203,77.46792845,56.00422724,54.88622465,56.25770888,93.83762274,22.49844098,18.92280286,83.61023018,85.4648791,34.37428806,13.40878868,28.68846586,79.31738967,40.45990782,79.82179224,93.93657134,6.245278202,60.5776014,83.70550092,60.35030352,41.94514723,25.69040093,32.53985477,77.71110582,57.66424473,66.86606701,38.56621917,53.48711319,17.12090315,86.8278876,0,25.31346761,87.02472159,91.05384697,47.43412231,57.06625994,69.97907706,38.52925079,32.14691615,32.80053194,60.32176214,59.86975755,81.89274638,34.98485298,96.08294305,41.84026305,49.40114306,17.64131187,72.60859499,50.26279135,92.94199968,67.29897649,41.83345706,41.46692354,74.06198244,31.47196174,50.09332794,49.19206746,33.09761211,34.40031558,41.23650836,19.42378116,25.94871876,45.34639631],
[68.78350664,76.85850099,17.31950789,13.56114691,36.05691643,78.83191575,77.00439692,44.42823553,17.22909914,51.97558235,51.62746901,95.49917098,49.95720448,103.5646263,58.63277647,81.82646537,64.41395914,68.25675872,85.56198171,70.2680168,22.31115973,14.31817098,67.24188857,8.66955737,49.8149951,42.79596799,63.5402809,50.31630764,41.62950362,78.66687961,78.10769869,36.07345989,11.24167907,66.29005341,75.36090703,53.10930824,30.31488715,46.95208545,65.95748229,44.90639933,71.46607262,103.5177204,27.09283448,82.84248458,67.29903219,63.46306775,34.42864838,2.339243595,16.63043752,79.43300541,54.36058778,72.6691016,13.39595246,40.14901305,41.05186123,78.6233224,25.31346761,0,72.84829346,83.98575294,56.23295161,42.28788519,72.17460283,56.12996224,52.61633255,18.31345239,51.84409234,78.07271923,77.12462961,55.02896221,98.70450894,62.9713996,30.2977952,12.6803651,59.50015051,31.23163064,81.87416574,83.02540841,49.42920307,41.3827671,84.45606173,12.7432491,30.23567382,66.08337298,12.51069328,11.68689278,21.64801254,8.219114626,30.79161077,60.63102968],
[28.32893632,65.22136526,57.5602719,86.40797705,83.99093755,119.5276078,61.68779028,69.79264411,81.71893723,28.42342284,51.5006253,79.21929067,100.3302194,78.13844687,73.91690943,71.09814261,78.09866129,19.79596435,57.06857864,104.7779101,50.80925951,66.44432748,84.43844621,68.84498073,23.09876361,70.31984035,9.568230777,36.11991109,32.27129043,110.0599134,8.744308277,74.25917297,70.214163,13.23127436,14.68330869,85.65669188,79.00201176,82.76064757,7.927859135,58.04890758,20.4215083,85.92562719,83.2509698,112.4339112,9.652416723,52.64231046,45.58046883,70.64733437,86.87882026,51.52331741,39.12227767,60.7772177,70.3935027,33.72297896,91.94852611,21.56697101,87.02472159,72.84829346,0,26.99859965,65.38554543,30.738927,51.11215371,84.24434924,89.31491168,55.98782806,29.47289498,96.11790036,32.00600689,89.36954842,62.8403452,96.08751315,43.17531474,70.84733226,14.49555629,42.28285663,14.01677717,91.75659637,63.03198244,51.62342812,77.54094162,82.62201172,43.80485864,86.4844685,60.34615897,77.71828798,51.3967389,80.28447813,64.47634147,80.53919439],
[16.45723427,46.8267315,66.80842471,96.908213,83.48826871,110.941469,42.78372004,65.08394915,96.64328971,32.01022601,44.55554257,56.60343519,97.74186337,53.21899332,63.81361902,51.64414306,66.23267784,16.0442723,34.08473252,95.60278578,62.1930023,73.6286078,72.43103849,77.68796265,40.73728688,66.27053263,29.03529213,35.13968221,43.49161884,99.10598972,33.36873219,72.9104507,77.91353052,39.72519125,12.87210501,79.07213516,80.0522842,78.07127376,26.36369015,53.58234533,12.76902926,62.25583208,85.94209158,100.5769305,36.06814782,39.45829387,50.4809201,81.64722231,99.95402306,30.3396452,33.73032619,43.62077027,85.57684479,44.8461669,90.91366134,6.283297532,91.05384697,83.98575294,26.99859965,0,55.67944605,44.38955598,33.43885919,76.33174889,83.48840982,65.68502821,32.17532302,82.34138814,11.2384754,82.66046247,36.85295753,87.70009243,58.63530735,77.98376498,29.36684842,57.94924414,14.79064647,75.43164602,56.23574028,50.011897,58.1941588,95.69145906,59.93427387,75.2315276,72.3578662,91.73331476,64.92518711,90.01889084,65.44560243,70.43006517],
[40.79505789,22.40937611,43.10727162,64.07557403,34.17726096,55.47124348,24.12024212,14.14059573,73.40239426,38.2561172,14.11408073,39.7984275,44.32795286,49.29322132,8.556791469,26.23085107,13.16538865,47.47880852,36.44974996,40.22753703,45.89356261,41.91735793,19.2898948,47.56346924,53.9994212,16.01559138,57.82383968,30.13053033,43.92763917,44.78154125,74.05296048,24.94668045,45.34427118,69.62736268,56.31070466,23.79317529,34.03505473,24.29128286,57.97675864,12.635986,48.87932827,47.60791318,41.2014306,47.04949111,67.63062306,16.65784295,31.99620069,54.45434498,71.80164658,32.78426656,26.26793902,19.75631389,66.16018049,43.58808449,39.74144766,54.05791235,47.43412231,56.23295161,65.38554543,55.67944605,0,47.71681524,25.47244894,20.68253095,28.43779165,43.61355855,37.05594314,31.58028275,44.56617099,27.22421575,49.55696355,32.06273526,53.02543735,44.24136109,52.88323575,53.22768562,64.04570331,30.68943007,6.847948396,19.71495076,28.23563707,68.56356447,54.81357106,21.1069278,51.37643081,67.76447403,51.26970785,57.42771956,25.52892228,15.25700746],
[32.14446993,57.95619821,26.88431343,55.81968779,56.27310949,96.01940891,55.86760893,46.45454243,52.78316896,15.37049574,34.45364333,76.12523042,73.18743867,79.80389074,55.24588765,64.21046946,60.73961987,28.39829223,58.26429755,82.45006457,20.09451674,36.00310878,66.48584769,38.12568098,8.551633652,46.33434781,21.2985386,20.46617297,3.789269098,89.10085918,36.87110665,47.72838779,39.61239244,26.78856708,33.95048022,62.32705295,50.63071448,58.08332756,23.67014455,36.51724707,31.65423906,84.08541874,53.89724828,92.23529144,26.64577897,42.27832481,18.25170511,40.04528401,57.02832218,51.49366328,26.427812,52.88170319,41.53222365,4.387771027,64.19005048,38.39970647,57.06625994,42.28788519,30.738927,44.38955598,47.71681524,0,46.66625407,62.22300504,65.07498159,25.27944939,16.13023515,79.01718955,40.58891679,65.86130362,69.15440399,73.57659326,14.24991425,40.33969813,17.26262852,13.56130537,39.86060821,78.05943691,42.7876743,28.86787846,69.52666871,52.73403237,15.56455071,67.52444498,29.85432657,48.22603046,21.28960774,49.5782924,37.19754047,61.03081565],
[22.8157847,14.16705865,55.80029958,82.72565019,58.49661182,78.72671487,10.59215285,38.24222087,88.2531548,31.87973472,20.92524672,29.83663864,69.78316218,33.41163564,32.39251633,19.99643125,33.63577589,31.31640779,13.38738466,63.4034301,55.05215376,58.63193167,39.57858342,63.99396403,49.24579588,39.91175035,46.46946832,26.51430386,43.45855499,66.1694825,59.66675092,48.33726062,62.78713946,59.581793,38.38992677,49.10067624,57.03751252,49.7106415,45.38722997,29.57770684,31.14236809,37.58439441,63.97330427,67.3905616,56.61156513,9.64741925,39.37804123,70.00780269,88.74412004,7.73264866,20.59898609,10.24660154,78.87022173,43.98468433,64.75589647,33.85584202,69.97907706,72.17460283,51.11215371,33.43885919,25.47244894,46.66625407,0,45.57239882,53.80622225,55.51074264,30.87844,48.94353094,22.40302938,52.37851047,26.66127826,56.12006382,57.68814097,62.16795885,42.80067508,57.46672895,45.11619118,42.16424798,28.85585321,30.88348318,26.4326218,84.91272494,59.48689915,42.61074226,63.6334992,82.65758854,59.80631258,75.66060118,44.76194754,38.5835255],
[61.17311404,38.74170375,48.55206336,59.69642067,23.04740214,35.35327344,41.73344219,15.84473767,72.86163299,56.1029176,33.07425564,51.56150288,26.08763168,63.00833211,13.23801035,39.93552164,14.51984392,67.36842137,54.99175866,20.58796947,53.98364816,43.20729777,13.0657049,48.13624028,69.72325098,16.32205873,75.97994489,48.15914003,58.58857199,26.88483055,92.73059229,20.1475265,45.03590662,86.7946048,76.34393178,4.651297345,26.7550239,9.859556889,76.54099635,26.45339293,69.02996463,58.02214339,32.81416312,30.17574474,85.26412721,37.26339047,44.27771626,55.03171474,68.96773356,52.42088249,45.52019351,37.97987328,68.47540987,57.84317907,24.83771049,74.51415628,38.52925079,56.12996224,84.24434924,76.33174889,20.68253095,62.22300504,45.57239882,0,9.084555942,49.71807009,54.97104939,22.00140896,65.24245651,6.957152207,67.26138507,11.84478706,63.48627568,43.49936626,70.84429603,63.95431529,84.16859722,28.79387767,21.23782897,33.7121549,38.56600073,66.704911,65.0614907,10.66295706,55.85892147,67.64090587,59.05953908,54.30171493,28.58191281,8.289088535],
[67.85584464,47.70704542,47.82748521,54.29393411,17.10135502,30.94460191,50.58600584,19.52302462,68.65689959,60.90776411,39.29569461,60.57478696,17.00307717,72.07774852,21.89826192,49.01812003,23.60164947,73.45706587,63.75820513,18.38487265,54.1413242,41.01060949,21.52251677,45.30166248,73.03484281,19.08825264,80.63788851,53.28263497,61.62430578,26.40192395,97.59500823,18.62687261,42.00615884,90.687594,82.50583969,4.756069247,22.31095436,7.039556009,81.47242138,31.36294396,75.37363995,66.90401312,27.07940685,30.4196737,89.47056475,45.07262194,46.82776298,51.85434011,63.9341694,60.88162599,51.45093624,46.71138274,65.5698532,60.70137646,16.69519045,81.22879906,32.14691615,52.61633255,89.31491168,83.48840982,28.43779165,65.07498159,53.80622225,9.084555942,0,49.21612329,59.84310474,27.90442482,72.56454035,2.921718006,76.19313859,10.36664375,64.35232443,40.38223191,75.44415357,64.9293121,90.38339409,36.44360687,27.35674766,37.80010923,47.57740334,62.11668007,65.77939426,18.56416758,54.33647491,63.73656332,58.86621746,49.59142461,28.86563831,17.37015267],
[50.50121842,62.00538466,1.756097224,31.35794367,35.93888128,79.0296676,61.54158951,34.98391461,32.87719683,33.67834624,35.87624728,81.00030396,52.64683151,87.97477181,48.17172314,67.50803443,54.2096828,50.01319941,68.81910098,67.59619223,5.94859768,11.34870487,58.39804387,12.85884338,33.47919647,33.87165402,46.48435344,32.21583886,23.95980051,75.41057357,62.04429293,30.60548898,14.45623403,51.14493759,57.32991747,48.04226015,29.64186878,42.41017211,48.70645126,31.14588244,53.20521034,89.15271315,30.81071042,79.20679122,51.55122061,47.4643078,16.52645959,15.9743086,34.61095097,62.43916193,36.62794038,57.42119002,23.46664352,22.47159543,43.22014576,60.37389862,32.80053194,18.31345239,55.98782806,65.68502821,43.61355855,25.27944939,55.51074264,49.71807009,49.21612329,0,33.53225228,70.42960186,58.88355837,50.92429961,81.67009296,59.18938904,16.79158098,15.37215607,42.08544901,17.60699817,64.07559932,73.13235916,36.87214256,25.70822282,71.05216572,30.45068058,17.73393428,58.12658373,8.170987228,27.3847309,9.704759042,24.69874496,21.14826194,51.90214837],
[17.32224642,43.02981561,34.63436043,64.73513554,55.2538331,90.15543841,40.55149516,40.3219133,65.12581247,1.21148597,22.9421972,60.61177719,71.20806521,63.76930929,45.40068999,49.31796912,50.14843873,16.84971034,42.15104009,75.55192032,30.36291416,41.68327077,56.34473999,45.55194321,18.65130624,40.8540514,21.0187439,6.936832776,13.47505991,81.1783617,37.80678804,45.18267382,45.9179312,32.58834469,25.1439691,56.22300223,50.74199194,53.29969217,21.64089768,28.62690969,19.90253121,68.45001247,55.78173729,83.79036137,30.59837632,27.7789542,18.62917227,49.50485387,67.95648408,35.38618886,11.76692301,37.99417798,54.35033829,14.42670919,63.13571693,27.07575283,60.32176214,51.84409234,29.47289498,32.17532302,37.05594314,16.13023515,30.87844,54.97104939,59.84310474,33.53225228,0,68.51920293,25.89012464,59.93134889,53.10084415,66.79330785,28.97930917,46.09333939,15.92853401,28.52156362,32.70258778,65.80770077,33.88142261,22.19290271,55.03602074,63.72135874,30.61158683,58.04280091,40.44383184,60.01160044,33.71038334,57.86357108,35.93806269,51.84508121],
[69.64537022,36.79869334,69.43283815,81.5395926,44.49069143,33.83137551,40.82286591,35.45282164,94.85899785,69.72638468,45.62108817,41.10383398,42.11941586,53.30119723,23.78215757,34.36824279,18.41521817,77.27968899,53.44099944,20.94139977,74.10498968,64.88323697,12.55545902,69.96623287,85.54694951,36.58761643,89.0468046,61.6253927,75.23912641,19.18521278,104.8523653,42.01044151,66.9268651,101.1065031,85.64028754,25.61302395,48.6867799,31.64116415,88.98522143,42.67525415,78.1170809,45.19919206,54.44692153,19.09806442,98.9963316,43.9586227,62.24806707,76.91366126,90.9103659,53.60473352,57.33428992,38.93613717,90.23629286,74.78668742,44.45978553,82.17061147,59.86975755,78.07271923,96.11790036,82.34138814,31.58028275,79.01718955,48.94353094,22.00140896,27.90442482,70.42960186,68.51920293,0,71.19193906,24.99731553,62.89393272,19.98994086,82.73886155,65.41420713,84.21784401,83.08239441,93.01580431,11.3196036,36.29304605,50.32313568,29.62669499,88.69881879,84.43413486,12.3050187,77.10426916,89.61867454,79.3708149,76.27576981,49.43169982,18.62853682],
[8.58156977,36.12941277,59.80526894,89.56859859,73.40127474,99.73565532,32.16340907,54.48583033,90.96126766,26.12101454,34.01778634,47.68355252,87.15948459,46.14539857,52.62908978,41.28979698,54.99430225,14.16907854,25.22946577,84.39191365,56.16244907,65.71788877,61.19453258,70.19929446,39.09455435,55.76465122,30.57424092,26.94949649,38.80869977,87.86871389,39.84618207,62.80354078,70.05028183,43.09455668,17.64738581,68.09190142,70.34307142,67.32958436,28.50570611,43.25660113,12.02676509,54.06710378,76.52468317,89.35737835,39.61850921,28.24161413,42.84100452,74.79436523,93.48483751,20.32307694,24.23710324,32.64054726,80.23779723,39.9728749,80.64517966,11.839035,81.89274638,77.12462961,32.00600689,11.2384754,44.56617099,40.58891679,22.40302938,65.24245651,72.56454035,58.88355837,25.89012464,71.19193906,0,71.64856093,31.42593973,76.53954898,54.43355417,69.94344863,28.94099563,53.87679735,23.25134977,64.54268285,45.45127729,40.46493183,47.8677641,89.29466521,55.94819613,63.99379733,66.14835664,85.78013369,59.59818726,82.54613126,56.0166392,59.22554537],
[67.23338249,45.68338293,49.58840516,57.03539385,19.81843985,30.33959232,48.69057054,19.72472768,71.22100427,61.02269334,38.80642773,58.06005941,19.43021798,69.65781642,20.14722763,46.73696255,21.28781746,73.09479318,61.94540263,16.83677737,55.68996605,43.10613371,18.80486909,47.55536298,73.68681741,19.56848339,80.83621911,53.2631161,62.34464963,24.48998384,97.73347015,20.34740556,44.29190657,91.1662655,82.12196701,3.717195114,24.78829731,8.522209718,81.57135442,31.32083303,74.90639265,64.27324168,29.81785418,28.36580121,89.83931367,43.87760483,47.65776522,54.19708124,66.63028998,59.30852452,51.11651167,44.92698579,67.87916071,61.47635225,19.61098908,80.60453604,34.98485298,55.02896221,89.36954842,82.66046247,27.22421575,65.86130362,52.37851047,6.957152207,2.921718006,50.92429961,59.93134889,24.99731553,71.64856093,0,74.20831285,8.269762082,65.73047785,42.68124705,75.65707642,66.27794795,89.98341256,33.55245638,26.83440391,38.0870276,45.06998688,64.7401243,67.20173754,15.75779973,56.31387274,66.2411035,60.52022003,52.21937088,30.24548289,15.08448974],
[38.25387274,28.53063986,82.08238552,109.3865792,83.67740667,96.16046994,25.68847215,63.41211685,114.5305542,53.79033078,47.57493599,24.9841031,92.98815103,17.24209904,54.3574184,28.74968289,53.21444103,45.50920305,13.45088892,81.55751664,80.65659655,85.27487943,57.69907793,90.60377791,69.40356026,65.20954021,61.99310698,50.76700941,66.54784303,81.96742787,69.99520347,73.97134122,89.44289719,74.4642292,48.16093096,71.45638722,82.90445875,73.41460154,59.92123103,55.97882314,43.43832347,27.81504207,89.96961991,81.91269109,70.94503773,35.99453995,65.26238038,96.50951803,115.3061282,19.27459115,45.41558556,29.8561093,104.806429,67.39229907,89.22755771,41.37191323,96.08294305,98.70450894,62.8403452,36.85295753,49.55696355,69.15440399,26.66127826,67.26138507,76.19313859,81.67009296,53.10084415,62.89393272,31.42593973,74.20831285,0,75.91893895,81.79465318,88.82923693,60.07646844,81.42406121,51.64251038,52.76060592,54.34768713,57.52079117,33.38876645,111.4260077,83.50534798,61.14930506,89.7031931,108.9813827,85.08970749,102.3195329,71.2795562,59.23325207],
[72.79577656,47.58183111,57.8575155,64.25980069,27.25070344,23.53771557,51.00757633,27.14985362,78.91356287,67.91962912,44.88155204,57.5142413,22.13197639,69.50658293,23.93835979,47.54473864,22.94136663,79.14098779,64.38047937,8.8781391,63.92147515,51.30839192,18.32672978,55.6602716,81.24608235,27.26652786,87.79360231,59.99532883,69.99998764,16.22163807,104.5663186,28.61709852,52.36969803,98.48963632,88.09286693,11.37413484,32.65829038,16.79194608,88.37715854,38.2252695,80.7435937,62.95219214,37.12731495,20.11661611,97.01977267,48.35962763,55.45730656,62.22060503,73.99533908,62.54449471,57.34045517,47.69026684,75.93631199,69.18897655,25.35493325,86.09900245,41.84026305,62.9713996,96.08751315,87.70009243,32.06273526,73.57659326,56.12006382,11.84478706,10.36664375,59.18938904,66.79330785,19.98994086,76.53954898,8.269762082,75.91893895,0,73.89018928,50.74711784,82.64867969,74.42251991,95.8983171,30.20046223,33.08030135,45.35256832,44.76623017,72.30529727,75.38130407,14.85369641,64.56142373,74.04551332,68.775842,59.78441009,38.44301646,17.53654317],
[45.89074932,67.32112581,18.53404505,43.76726745,52.34515721,94.80882302,65.85910942,47.85222188,38.85387076,28.5050947,41.72652147,86.1244348,69.21350848,91.09933215,59.30621344,73.38188735,65.22364009,42.62847895,70.14097201,82.56323054,10.90023522,28.05093017,70.27852223,28.27422218,20.13122776,47.17257887,34.25312992,31.30314143,15.63541982,89.9974075,47.90892214,45.84686606,30.63101418,35.99483743,48.06135793,62.53807598,46.13663672,57.36062298,36.89869871,40.58109806,45.8906023,94.24850784,47.60228648,93.56090732,37.05234075,51.66888384,21.05603644,28.26240784,43.70391397,63.391953,37.10751974,62.33338531,27.52994476,14.55839904,59.82192047,52.64790169,49.40114306,30.2977952,43.17531474,58.63530735,53.02543735,14.24991425,57.68814097,63.48627568,64.35232443,16.79158098,28.97930917,82.73886155,54.43355417,65.73047785,81.79465318,73.89018928,0,31.78554414,30.94643286,0.934300913,53.6125568,83.66606081,46.96198593,33.32899868,78.02531467,39.44733417,1.83984043,70.63258699,17.94549941,34.59300172,8.719031149,38.21238636,35.5011783,64.15406021],
[62.00721071,65.51898315,13.64674759,20.56223307,24.41151696,67.89447183,66.00931437,31.91212405,29.76767626,46.49872896,41.27367946,83.85965862,39.79936276,92.45647888,46.13154504,70.19200182,51.84824276,62.93719486,75.48213955,58.35282869,21.23880167,4.45419603,54.57052172,5.016833776,48.69532735,30.23309714,61.28956745,43.07217781,38.58524327,66.65405523,77.2059088,23.40539594,1.647087788,66.49476765,70.8860818,40.59810684,18.2924367,34.46156986,63.35756776,33.61697729,65.98781156,91.78357661,16.8225858,70.76014725,66.81974418,53.02190866,27.52206414,11.55399846,27.56535389,69.68005605,46.11729685,61.59104885,25.19824161,37.126157,30.47107472,73.14859771,17.64131187,12.6803651,70.84733226,77.98376498,44.24136109,40.33969813,62.16795885,43.49936626,40.38223191,15.37215607,46.09333939,65.41420713,69.94344863,42.68124705,88.82923693,50.74711784,31.78554414,0,56.66280737,32.65618496,78.01364735,70.38463929,37.53774582,31.38759381,72.45863497,24.38152248,32.45312724,53.40481671,15.83415014,24.32850328,23.60444369,13.53482915,18.72626696,47.9643968],
[21.98649411,56.29357404,43.58962278,73.00400991,69.55450444,105.9444089,53.23456125,55.96705788,69.78714641,14.76581969,38.78100329,72.36862732,85.98455778,73.42821083,61.28285282,62.47818919,65.90867476,14.82835849,51.57047207,91.43153972,37.22427283,52.23265248,72.1527806,54.92245577,11.52273275,56.37280871,5.202059657,22.8486794,18.14094758,97.10674056,22.22528106,59.92808865,56.10658311,17.15064512,17.47716417,71.96119135,64.51673476,68.76790767,6.713428322,44.43227795,17.56183654,79.74699614,68.76753058,99.7096031,14.78018854,42.07936401,31.08543755,57.23910396,74.26183074,45.21176425,26.93028724,51.4608292,58.4732696,19.62406827,77.51943073,23.09298476,72.60859499,59.50015051,14.49555629,29.36684842,52.88323575,17.26262852,42.80067508,70.84429603,75.44415357,42.08544901,15.92853401,84.21784401,28.94099563,75.65707642,60.07646844,82.64867969,30.94643286,56.66280737,0,30.13472327,22.67872471,80.94333675,49.80270146,37.6455585,68.61395036,69.96998854,31.93536384,73.92472384,47.10238479,65.37679813,38.51780217,66.64825392,50.03475107,67.75881503],
[45.34735754,67.25267976,19.35438187,44.69897732,53.06277272,95.4344487,65.73735032,48.28387172,39.68852345,28.01603972,41.76456306,86.01862283,69.95046864,90.87745424,59.60077375,73.33517016,65.50035467,41.95793057,69.84878175,83.11358458,11.69091797,28.89193669,70.60526326,29.17880861,19.25659709,47.63468965,33.38982214,31.03206225,15.11622267,90.51081451,46.98333649,46.45357427,31.51369546,35.06063517,47.29444588,63.06314443,46.87033785,57.92820879,36.04706887,40.82846363,45.21530569,94.13297782,48.41347877,94.05291899,36.12387038,51.57567588,21.23446106,29.1966843,44.59643572,63.09228607,36.87300145,62.25200781,28.35777555,14.0958446,60.56770222,51.94073532,50.26279135,31.23163064,42.28285663,57.94924414,53.22768562,13.56130537,57.46672895,63.95431529,64.9293121,17.60699817,28.52156362,83.08239441,53.87679735,66.27794795,81.42406121,74.42251991,0.934300913,32.65618496,30.13472327,0,52.79090221,83.8890531,47.22281644,33.51735775,78.0357684,40.34368171,2.090029404,71.00171494,18.87854938,35.46589069,9.650994188,39.14618757,36.0675194,64.51401743],
[23.43343436,59.14111513,65.47198371,95.295789,87.67367524,119.4173287,55.25477018,71.13180141,92.46168147,32.01880962,51.18038272,70.67550115,103.1581144,67.90111298,72.53476327,64.47949806,75.84155051,16.94323656,48.10271094,104.2502301,59.56414433,73.56000314,82.18884763,76.77359018,33.79921807,72.00479217,19.87368999,38.0115404,40.24857035,108.617396,18.86042676,77.37523363,77.63360274,27.24524982,7.885195667,86.28922907,83.37830608,84.3265183,17.02921621,59.22471245,15.16726293,76.66959746,88.48224955,110.5148595,23.66469209,49.10872122,51.03080245,79.58344148,96.88841847,43.56422152,38.93890502,55.31610924,81.14246154,41.73249311,95.46447334,11.41324175,92.94199968,81.87416574,14.01677717,14.79064647,64.04570331,39.86060821,45.11619118,84.16859722,90.38339409,64.07559932,32.70258778,93.01580431,23.25134977,89.98341256,51.64251038,95.8983171,53.6125568,78.01364735,22.67872471,52.79090221,0,87.17447959,63.14951581,54.03598421,71.05490169,92.59375025,54.55645628,84.66669477,69.58263747,88.047628,61.14920075,88.76861806,68.55024758,79.25640275],
[64.20771523,28.71109276,72.36893294,88.01495982,51.82744073,44.99278733,32.80407705,38.78975634,100.1442727,67.01549648,43.66465309,30.03295003,52.02078003,42.19299662,24.96682566,25.00815855,18.9379438,72.31376878,44.44753771,32.20689882,76.06208879,69.18462349,16.04792918,74.57975077,83.76802524,40.30578585,85.48778603,59.15010284,74.27955581,30.19212064,100.4857013,47.32382332,71.78393245,98.06800087,80.16245419,33.15206679,55.10106198,38.61110223,85.075071,43.10281882,72.72002098,33.88123211,61.48830503,29.44822777,95.64110338,39.13871341,62.66971221,81.61593526,96.97983933,45.63776178,54.15090192,31.91799273,94.4284239,74.04647779,53.11085567,75.9956973,67.29897649,83.02540841,91.75659637,75.43164602,30.68943007,78.05943691,42.16424798,28.79387767,36.44360687,73.13235916,65.80770077,11.3196036,64.54268285,33.55245638,52.76060592,30.20046223,83.66606081,70.38463929,80.94333675,83.8890531,87.17447959,0,36.78051365,50.39637913,19.41028952,94.3966247,85.44177128,18.15069495,80.41904713,94.70404902,81.43044441,82.23610424,52.9240558,22.50473552],
[40.49933354,28.38619482,36.32124112,57.5493408,29.64281404,56.58403582,29.53878797,9.423436624,66.58122986,35.03695856,11.97303822,46.34813522,41.80994593,55.41874692,12.52238966,32.70171479,18.2967151,46.27056645,40.98492289,41.74614401,39.36925392,35.11105945,23.73929225,40.76145634,49.63827426,11.05617646,54.89701298,27.00694393,39.0244344,47.32627294,71.55310176,19.6331596,38.60166982,66.08393471,55.2905607,23.1452782,28.56797735,21.87938275,55.36651722,6.421520851,48.07667536,54.2465989,35.66797728,50.06378611,64.36737484,19.30110353,26.10736176,47.63087644,65.10232251,36.51276862,24.32736856,25.06797769,59.31866626,38.52203087,36.03383171,53.87205412,41.83345706,49.42920307,63.03198244,56.23574028,6.847948396,42.7876743,28.85585321,21.23782897,27.35674766,36.87214256,33.88142261,36.29304605,45.45127729,26.83440391,54.34768713,33.08030135,46.96198593,37.53774582,49.80270146,47.22281644,63.14951581,36.78051365,0,14.03295892,35.02724027,61.81073442,48.71978952,24.76840446,44.5748074,60.93838392,44.74709378,50.82046234,18.81197066,18.32054533],
[33.55673111,36.2971628,25.65451483,51.90873636,33.75771598,68.42130935,35.92848429,18.36319692,57.80602505,23.2064086,10.29224231,55.29751161,49.18154626,62.45391801,26.55495701,41.84615526,32.2647524,37.23725892,44.25553882,54.21216857,26.86981009,27.7540973,37.76805096,33.11819108,36.05450287,18.72926838,42.84140421,16.04734413,25.13606894,60.47806116,59.81822564,23.34998594,31.93793411,53.14191317,46.2031471,34.41536306,30.0406641,31.14759739,43.74054558,7.666067481,39.68299164,63.45485521,36.06326175,63.48266423,51.75350922,22.09902998,12.28313584,39.26217925,57.89954415,38.31685538,16.31450543,31.74356224,49.11255701,24.55771207,41.46075722,46.34190782,41.46692354,41.3827671,51.62342812,50.011897,19.71495076,28.86787846,30.88348318,33.7121549,37.80010923,25.70822282,22.19290271,50.32313568,40.46493183,38.0870276,57.52079117,45.35256832,33.32899868,31.38759381,37.6455585,33.51735775,54.03598421,50.39637913,14.03295892,0,45.66875024,54.125226,35.12626458,38.67539148,33.84920678,52.15867362,32.1765956,44.82411753,15.5522142,32.17150539],
[49.24624472,12.36567547,70.73797899,92.09652621,59.40666597,63.25393012,15.90024322,41.32821609,101.6027762,56.17644338,36.32535403,12.99757915,64.49973345,24.75329066,28.03804869,6.57799819,24.18586114,57.74653557,25.52194391,49.18838281,72.53384817,70.13804123,26.63422845,75.78774544,73.67626617,43.19451337,72.58904502,49.21013847,65.92317395,48.79274422,86.09809167,51.8608488,73.57681724,85.62850453,64.65872009,43.18510062,60.78361237,46.95951602,71.66792085,40.01950299,57.52195903,19.88021997,67.85039541,48.55703296,82.78834877,27.33346426,57.36062902,82.65194402,100.0060286,27.85941787,43.42587346,17.16731399,94.06077945,66.06484283,63.00790661,59.65996162,74.06198244,84.45606173,77.54094162,58.1941588,28.23563707,69.52666871,26.4326218,38.56600073,47.57740334,71.05216572,55.03602074,29.62669499,47.8677641,45.06998688,33.38876645,44.76623017,78.02531467,72.45863497,68.61395036,78.0357684,71.05490169,19.41028952,35.02724027,45.66875024,0,96.79686086,79.86390559,30.04890317,79.0370801,95.95500987,77.8184477,85.55561823,53.76045237,30.33065566],
[80.86344475,89.48057197,29.68527208,9.872316245,45.0567817,85.75545489,89.69753364,56.22774898,7.144220362,63.75320089,64.36477138,108.0317102,56.51973172,116.2492147,70.43632237,94.35488298,76.07207134,79.79165302,98.29992635,78.89951661,33.50731012,26.82327619,78.44217153,21.20191839,59.55315587,54.50788342,73.61286094,62.66103411,52.62682429,87.3962057,87.09994439,47.08726333,23.22013671,74.73169028,86.44958621,63.26870273,40.08312439,57.13426888,76.18677996,57.50497173,83.03954083,116.0119827,35.23802239,91.67716851,76.19389685,76.20138538,46.86706314,14.91700004,4.296063045,92.15235224,66.90572064,85.34599824,13.6216879,51.18359047,48.50752845,90.14116481,31.47196174,12.7432491,82.62201172,95.69145906,68.56356447,52.73403237,84.91272494,66.704911,62.11668007,30.45068058,63.72135874,88.69881879,89.29466521,64.7401243,111.4260077,72.30529727,39.44733417,24.38152248,69.96998854,40.34368171,92.59375025,94.3966247,61.81073442,54.125226,96.79686086,0,38.90528983,77.00059046,23.33496061,5.683607743,31.45226042,12.52539118,43.03645924,71.89758244],
[47.42370856,69.15888966,19.45055536,43.60848828,53.50509341,96.14809699,67.68897081,49.4715299,38.00030628,30.10439663,43.56301625,87.9574932,70.31903551,92.89853464,61.04059265,75.22119806,66.96920678,43.96041711,71.90471764,84.02712866,11.96825494,28.85956963,71.98825461,28.74052772,20.88887842,48.75899467,35.0422942,33.07686432,17.20194977,91.51198326,48.24967304,47.23247071,31.23601516,36.12700606,49.17419403,64.04156932,47.2609945,58.80426008,37.73646927,42.34790678,47.21278214,96.07989881,48.49840771,95.10277068,37.35795547,53.50348146,22.86127639,28.27678745,43.13331682,65.15113995,38.89962198,64.16972604,26.66039519,16.18584225,60.90795501,53.90364017,50.09332794,30.23567382,43.80485864,59.93427387,54.81357106,15.56455071,59.48689915,65.0614907,65.77939426,17.73393428,30.61158683,84.43413486,55.94819613,67.20173754,83.50534798,75.38130407,1.83984043,32.45312724,31.93536384,2.090029404,54.55645628,85.44177128,48.71978952,35.12626458,79.86390559,38.90528983,0,72.30737061,18.07795193,33.91636494,8.986948887,38.25852416,36.95776743,65.8376319],
[61.25720927,32.97194384,57.1279573,70.22414233,33.7103468,36.15160615,36.5541143,23.15657816,83.0050743,59.23349458,35.15148147,42.91845687,34.93678484,54.80077347,12.6426726,32.69469072,9.01156842,68.3405345,49.88918494,20.9027895,61.8484927,52.70661739,3.473104442,57.86840565,74.38794983,24.28383238,78.89939376,51.10601006,63.77183285,23.96707588,95.15802874,30.02626434,54.88759481,90.54155963,77.03926939,15.01312109,37.25649195,20.51358527,79.08213653,31.01268968,69.54546323,48.75927501,43.45349366,25.97431571,88.64095608,35.84656255,50.3581418,64.85093099,79.38832495,48.53753469,47.37315805,33.53891315,78.07383586,63.2309666,35.10059906,74.28251897,49.19206746,66.08337298,86.4844685,75.2315276,21.1069278,67.52444498,42.61074226,10.66295706,18.56416758,58.12658373,58.04280091,12.3050187,63.99379733,15.75779973,61.14930506,14.85369641,70.63258699,53.40481671,73.92472384,71.00171494,84.66669477,18.15069495,24.76840446,38.67539148,30.04890317,77.00059046,72.30737061,0,64.81582349,77.68886603,67.09831944,64.67745014,37.13234029,6.52305319],
[57.6628477,70.14129461,8.299614076,26.07082464,39.54346114,83.1269977,69.7087206,41.85106319,24.99261514,40.44326362,44.04022611,89.12193016,55.50444351,96.14571838,55.46866702,75.60179631,61.48340901,56.46048714,76.91867761,72.65751306,10.17554353,13.54586909,65.33961031,11.30062309,37.30449569,40.56185726,51.06374339,39.82439659,29.4135187,80.72916903,65.62290029,36.05273795,14.336341,53.91311975,63.24138701,53.7210224,33.22188804,47.81988532,53.50955553,39.04629883,59.70618396,97.26773002,32.6419878,84.67623265,54.8364757,55.63473438,24.45190393,10.36817663,27.60564788,70.50001788,44.50108526,65.57837542,15.29569246,27.9509868,46.11185954,66.81403048,33.09761211,12.51069328,60.34615897,72.3578662,51.37643081,29.85432657,63.6334992,55.85892147,54.33647491,8.170987228,40.44383184,77.10426916,66.14835664,56.31387274,89.7031931,64.56142373,17.94549941,15.83415014,47.10238479,18.87854938,69.58263747,80.41904713,44.5748074,33.84920678,79.0370801,23.33496061,18.07795193,64.81582349,0,19.65437995,9.230338235,20.27363802,27.70379843,58.76340355],
[77.27561713,88.05203116,26.8990232,14.63480364,46.88289588,88.71627873,88.01687463,56.11258746,5.669493281,59.95979591,62.45048397,106.8140112,59.53548371,114.576373,70.31329117,93.1581319,76.10055527,75.74970281,96.01841079,81.03855073,29.64882139,25.88191364,78.89774663,20.27983563,54.72209858,54.48285095,68.84342907,59.45671402,48.39134637,89.49847722,81.9525446,47.66325406,22.92258114,69.47900477,82.10918015,64.48401737,41.45296053,58.32098096,71.47006697,56.20240316,79.01492666,114.872618,37.39550395,93.72900094,71.0460687,74.24098643,43.90857635,13.31164857,9.465834758,89.72334541,64.00899054,83.73977936,7.980974265,46.98057842,51.09838952,86.05824753,34.40031558,11.68689278,77.71828798,91.73331476,67.76447403,48.22603046,82.65758854,67.64090587,63.73656332,27.3847309,60.01160044,89.61867454,85.78013369,66.2411035,108.9813827,74.04551332,34.59300172,24.32850328,65.37679813,35.46589069,88.047628,94.70404902,60.93838392,52.15867362,95.95500987,5.683607743,33.91636494,77.68886603,19.65437995,0,26.97974103,14.97857497,42.40853172,72.29287347],
[51.02315985,67.93350969,11.25378185,35.16985029,45.56794452,88.73319996,66.97812302,43.96025898,31.72658997,33.5067342,41.73238314,86.94915876,62.16705935,92.97500279,56.58831363,73.74147312,62.61515247,48.89766393,72.78963632,77.23633225,5.378550746,20.22978013,67.15078614,19.76350972,28.30250066,42.99116066,42.23869129,34.38902089,21.46216613,84.99070991,56.46596008,40.24194483,22.33176473,44.68621014,55.12970979,57.56769405,39.24712929,52.01950572,44.76983144,38.63485985,52.17105166,95.12220892,39.92978536,88.74293168,45.65102071,52.69492461,20.74522732,19.5717282,35.74465473,66.16441741,39.7005891,63.11465616,20.69499333,20.0823774,52.72778282,59.16018946,41.23650836,21.64801254,51.3967389,64.92518711,51.26970785,21.28960774,59.80631258,59.05953908,58.86621746,9.704759042,33.71038334,79.3708149,59.59818726,60.52022003,85.08970749,68.775842,8.719031149,23.60444369,38.51780217,9.650994188,61.14920075,81.43044441,44.74709378,32.1765956,77.8184477,31.45226042,8.986948887,67.09831944,9.230338235,26.97974103,0,29.50300732,30.5018279,60.76073152],
[74.39466341,78.96061085,23.36537322,7.105278528,32.53430646,73.76075343,79.51886225,44.51508698,19.2460315,58.11563544,54.7871948,97.16755962,44.56357224,105.9332831,58.63999673,83.52018256,64.13596726,74.54581467,88.99142027,66.45315552,29.48409483,17.14009925,66.22941257,12.35688762,57.37445258,42.73204055,70.87679541,55.59717557,48.58666297,74.94274053,85.81985114,34.92764533,12.88793885,74.18636143,82.01341268,50.79050958,27.60817173,44.67043386,73.20408295,47.11933211,77.69869396,105.0326446,22.75515984,79.2117883,75.07121309,66.55062619,39.72769888,9.985902984,14.74462485,83.13998872,59.08873236,75.09180653,19.88297536,47.09707594,36.23113674,84.87963288,19.42378116,8.219114626,80.28447813,90.01889084,57.42771956,49.5782924,75.66060118,54.30171493,49.59142461,24.69874496,57.86357108,76.27576981,82.54613126,52.21937088,102.3195329,59.78441009,38.21238636,13.53482915,66.64825392,39.14618757,88.76861806,82.23610424,50.82046234,44.82411753,85.55561823,12.52539118,38.25852416,64.67745014,20.27363802,14.97857497,29.50300732,0,32.05270077,59.7345962],
[48.992992,46.92748861,20.04259069,38.86753431,19.51990277,59.53302641,47.62984302,14.1796579,48.00984528,36.74628412,23.98383968,65.14645001,36.1473593,73.93204535,28.11631627,51.48559479,34.04965709,52.05453573,57.8373748,47.0695164,25.51473195,16.53366803,37.64940945,22.13534975,45.54075609,12.85938108,55.17286163,30.76455759,34.06010948,54.61374442,72.12954801,10.608964,19.81636675,63.6736881,60.83958983,27.14007085,14.83138779,21.86093017,56.56158711,15.34843463,54.69959905,73.05849741,20.52229521,58.29305684,62.96171387,35.28543113,19.26223053,29.11383,46.29149459,52.44498896,31.83503047,43.17426343,41.5248005,32.94047349,27.48751916,61.53858402,25.94871876,30.79161077,64.47634147,65.44560243,25.52892228,37.19754047,44.76194754,28.58191281,28.86563831,21.14826194,35.93806269,49.43169982,56.0166392,30.24548289,71.2795562,38.44301646,35.5011783,18.72626696,50.03475107,36.0675194,68.55024758,52.9240558,18.81197066,15.5522142,53.76045237,43.03645924,36.95776743,37.13234029,27.70379843,42.40853172,30.5018279,32.05270077,0,31.06246063],
[55.93722702,30.70635332,50.95819548,65.57023747,30.04357507,40.51150177,33.87317717,16.93508883,77.69760707,53.02684118,29.06494692,43.31765491,34.37176642,54.72147414,6.721991448,31.66727078,6.231497522,62.7329447,47.21524899,25.17666698,55.48401863,46.97351916,6.627974548,52.2676687,67.95880917,18.21817412,72.77673918,44.9128289,57.28386989,29.54258423,89.17537411,24.81918894,49.39393802,84.26505137,71.54523017,12.86466693,32.75012183,17.00339351,73.04874162,24.51377144,64.09553996,49.90199756,39.35911958,31.955111,82.43336544,30.9872945,43.83605472,59.28961986,74.47897182,45.07329279,41.42506554,30.33094716,72.31921582,56.72916661,32.78967384,69.12109652,45.34639631,60.63102968,80.53919439,70.43006517,15.25700746,61.03081565,38.5835255,8.289088535,17.37015267,51.90214837,51.84508121,18.62853682,59.22554537,15.08448974,59.23325207,17.53654317,64.15406021,47.9643968,67.75881503,64.51401743,79.25640275,22.50473552,18.32054533,32.17150539,30.33065566,71.89758244,65.8376319,6.52305319,58.76340355,72.29287347,60.76073152,59.7345962,31.06246063,0]
]
tsp_decision_variables = {
"Distances" : np.array(input), #<< Number, Mandatory
"Item-Name" : [i for i in range(1, len(input[0]))]
# << String, Optional, The names of the items, can be used to present the solution.
# It starts at 1 reserving the 0 for the static city
# We are setting the departure point, so we only have to arrange the n-1 remaining cities
}
# Problem Instance
tsp_problem_instance = TravelSalesmanProblem(
decision_variables=tsp_decision_variables
)
# Configuration
#--------------------------------------------------------------------------------------------------
parent_selection = roulettewheel_selection
# Dictionaries to create test directories
valid_Init = {initialize_using_random: "rand", initialize_using_hc: "hc", initialize_using_greedy: "greedyI",
initialize_using_multiple: "mixIB"}
valid_Select = {roulettewheel_selection: "rol", tournament_selection: "tourn", rank_selection: "rank"}
valid_Xover = {cycle_crossover: "cycle", pmx_crossover: "pmx", order1_crossover: "order1", heuristic_crossover: "heur",
multiple_crossover: "mixCB"}
# singlepoint_crossover: "singP" should not be used
valid_Mutation = {swap_mutation: "swap", insert_mutation: "insert", inversion_mutation: "invert",
scramble_mutation: "scramble", greedy_mutation: "greedyM", multiple_mutation: "mixMB"}
# single_point_mutation: "singP" should not be used
valid_Replacement = {elitism_replacement: "elit", standard_replacement: "std"}
# Parameters to grid search in a run
test_init = [initialize_using_multiple, initialize_using_hc, initialize_using_greedy, initialize_using_random]
test_select = [tournament_selection, roulettewheel_selection, rank_selection]
test_xover = [heuristic_crossover, multiple_crossover, cycle_crossover, pmx_crossover, order1_crossover]
test_mutation = [multiple_mutation, inversion_mutation, multiple_mutation, greedy_mutation, swap_mutation,
insert_mutation, scramble_mutation]
test_replacement = [elitism_replacement, standard_replacement]
test_xover_prob = [0.1, 0.9, 0.95, 0.05]
test_mut_prob = [0.95, 0.9, 0.1, 0.05]
test_tournament_size = [15, 10, 5]
# Initial params
params = {
# params
"Population-Size" : 20,
"Number-of-Generations" : 1000,
"Crossover-Probability" : 0.8,
"Mutation-Probability" : 0.8,
# operators / approaches
"Initialization-Approach" : initialize_using_random,
"Selection-Approach" : parent_selection,
"Tournament-Size" : 5,
"Crossover-Approach" : cycle_crossover,
"Mutation-Approach" : swap_mutation,
"Replacement-Approach" : elitism_replacement
}
def one_combination():
"""
Actually runs the algorithm with one set of parameters.
Names the resume file from parameters of search
Creates the resume file from all the runs for a set of parameters
"""
log_base_dir="./log/" # Base dir for log of initial runs
if not path.exists(log_base_dir):
mkdir(log_base_dir)
all_dir = "./log_all/" # Base dir for resume the resume files
if not path.exists(all_dir):
mkdir(all_dir)
log_name = ("I-" + str(valid_Init.get(params.get("Initialization-Approach"))) +
"_S-" + str(valid_Select.get(params.get("Selection-Approach"))) +
"_C-" + str(valid_Xover.get(params.get("Crossover-Approach"))) +
"_M-" + str(valid_Mutation.get(params.get("Mutation-Approach"))) +
"_R-" + str(valid_Replacement.get(params.get("Replacement-Approach"))) +
"_CP-" + str((params.get("Crossover-Probability"))) +
"_MP-" + str((params.get("Mutation-Probability"))) +
"_PS-" + str((params.get("Population-Size"))) +
"_TS-" + str((params.get("Tournament-Size"))) +
"_G-" + str((params.get("Number-of-Generations")))
)
resume_name= f"{all_dir}{log_name}.xlsx"
# checks if the same run as already been performed, if so, skips it.
# -----------------
log_dir = str(log_base_dir) + str(log_name)
if not path.exists(log_dir):
mkdir(log_dir)
runs_made = [f for f in listdir(all_dir) if isfile(join(all_dir, f))]
if (str(log_name)+".xlsx") in runs_made:
print (f"Run {log_name}.xlsx already made, skipping")
return
# Run the same configuration many times (get distribution)
#--------------------------------------------------------------------------------------------------
overall_best_solution = None
number_of_runs = 50
for run in range(1, number_of_runs + 1):
# Genetic Algorithm
ga = GeneticAlgorithm(
problem_instance=tsp_problem_instance,
params=params,
run=run,
log_name=log_name,
log_dir=log_base_dir
)
ga_observer = LocalSearchObserver(ga)
ga.register_observer(ga_observer)
ga.search()
ga.save_log()
# find the best solution over the runs
if run == 1:
overall_best_solution = deepcopy(ga.best_solution)
else:
if ga.best_solution.fitness < overall_best_solution.fitness:
overall_best_solution = deepcopy(ga.best_solution)
print('overall_best_solution: ', overall_best_solution.representation)
print('overall_best_solution fitness: ', overall_best_solution.fitness)
# Consolidate the runs
#--------------------------------------------------------------------------------------------------
log_files = [f for f in listdir(log_dir) if isfile(join(log_dir, f))]
print(log_files)
fitness_runs = []
columns_name = []
counter = 0
generations = []
for log_name in log_files:
if log_name.startswith('run_'):
df = pd.read_excel(log_dir + "/" + log_name)
fitness_runs.append(list(df.Fitness))
columns_name.append(log_name.strip(".xslx"))
counter += 1
if not generations:
generations = list(df["Generation"])
#fitness_sum = [sum(x) for x in zip(*fitness_runs)]
df = pd.DataFrame(list(zip(*fitness_runs)), columns=columns_name)
fitness_sd = list(df.std(axis=1))
fitness_mean = list(df.mean(axis=1))
#df["Fitness_Sum"] = fitness_sum
df["Generation"] = generations
df["Fitness_SD"] = fitness_sd
df["Fitness_Mean"] = fitness_mean
df["Fitness_Lower"] = df["Fitness_Mean"] - 1.96 * df["Fitness_SD"] / (number_of_runs ** 0.5)
df["Fitness_Upper"] = df["Fitness_Mean"] + 1.96 * df["Fitness_SD"] / (number_of_runs ** 0.5)
#df.to_excel(log_dir + "/all.xlsx", index=False, encoding='utf-8')
log_name = ("I-" + str(valid_Init.get(params.get("Initialization-Approach"))) +
"_S-" + str(
valid_Select.get(params.get("Selection-Approach"))) + # this one return None because of .select method
"_C-" + str(valid_Xover.get(params.get("Crossover-Approach"))) +
"_M-" + str(valid_Mutation.get(params.get("Mutation-Approach"))) +
"_R-" + str(valid_Replacement.get(params.get("Replacement-Approach"))) +
"_CP-" + str((params.get("Crossover-Probability"))) +
"_MP-" + str((params.get("Mutation-Probability"))) +
"_PS-" + str((params.get("Population-Size"))) +
"_TS-" + str((params.get("Tournament-Size"))) +
"_G-" + str((params.get("Number-of-Generations")))
)
# Exporting summary of configuration with best solution
with pd.ExcelWriter(all_dir + f"{log_name}.xlsx") as writer:
df.to_excel(writer, sheet_name='Fitness', index=False, encoding='utf-8')
pd.DataFrame([[overall_best_solution.representation, overall_best_solution.fitness]],
columns=["Representation", "Fitness"]).to_excel(writer, sheet_name='Overall_Best_Solution')
# -------------------------------------------------------------------------------------------------
# RUNS Through the Several list of possible parameters
# -------------------------------------------------------------------------------------------------
for init in range(len(test_init)):
params["Initialization-Approach"] = test_init[init]
for select in range(len(test_select)):
params["Selection-Approach"] = test_select[select]
for xover in range(len(test_xover)):
params["Crossover-Approach"] = test_xover[xover]
for mutation in range(len(test_mutation)):
params["Mutation-Approach"] = test_mutation[mutation]
for replacement in range(len(test_replacement)):
params["Replacement-Approach"] = test_replacement[replacement]
for xover_prob in range(len(test_xover_prob)):
params["Crossover-Probability"] = test_xover_prob[xover_prob]
for mut_prob in range(len(test_mut_prob)):
params["Mutation-Probability"] = test_mut_prob[mut_prob]
if str(test_select[select]) == str(tournament_selection):
for tourn_size in range(len(test_tournament_size)):
params["Tournament-Size"] = test_tournament_size[tourn_size]
one_combination()
else:
one_combination()