-
Notifications
You must be signed in to change notification settings - Fork 0
/
EfficacyDriver.py
175 lines (136 loc) · 5.72 KB
/
EfficacyDriver.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
# -*- coding: utf-8 -*-
"""
Created on Mon Feb 29 03:24:24 2016
@author: s0568630
Driver Module to test hill climber algorithm classes on a random network and
a geographic network.
"""
import GeoFuncs as gf
from PointPlotter import PointPlotter
import TSPHillClimber as HC
from TSPAlgorithm import TSPAlgorithm
import PointHandler as ph
import matplotlib.pyplot as mp
pp = PointPlotter()
#-----------------------------------------------------------------------------
myColours = ['magenta','mediumseagreen','chocolate','purple','teal',
'saddlebrown','fucsia','darkorange']
runs = 1000
localiters = 1000
globalattempts = 10
nloc = 10
if nloc <= 10:
brute = True
else:
brute = False
print "\nCreating random data set..."
randPF = ph.rand_PointField(nloc,-180,180,-100,100)
randData = randPF.distanceMatrix()
print "...instantiating algorithms..."
randBF = TSPAlgorithm(randData)
randLM = HC.LocalMixerHC(randData)
randLI = HC.LocalImproverHC(randData)
randGHC = HC.GlobalHC(randData)
if brute:
#Set up complete solution list for dataset
randBF.solutionList()
allSols = randBF.getAllSolutions()
#Pass it to hill climber algorithms
randLM.solutionList(allSols)
randLI.solutionList(allSols)
randGHC.solutionList(allSols)
print "...random data and algorithms created\n"
print "\nCreating Geographical data set..."
#load all cities as allcities
allcities = gf.load_Locations('CityLocations.csv')
#pick some cities return (dicitonary) matrix and cities as lists
city_lookup, geogData, cities = gf.selectCitydata(allcities,nloc)
print "...instantiating algorithms..."
geogBF = TSPAlgorithm(geogData)
geogLM = HC.LocalMixerHC(geogData)
geogLI = HC.LocalImproverHC(geogData)
geogGHC = HC.GlobalHC(geogData)
if brute:
#Set up complete solution list for dataset
geogBF.solutionList()
allSols = geogBF.getAllSolutions()
#Pass it to hill climber algorithms
geogLM.solutionList(allSols)
geogLI.solutionList(allSols)
geogGHC.solutionList(allSols)
print "...Geographical data and algorithms created\n"
#-----------------------------------------------------------------------------
print"\nCalculating Efficacy of algorithms..."
#effList is list of lists: (bestDs,efficacys,iters)
randLM.efficacy(runs=runs,iterations=localiters)
randLI.efficacy(runs=runs,iterations=localiters)
randGHC.efficacy(runs=runs,iterations=localiters)
geogLM.efficacy(runs=runs,iterations=localiters)
geogLI.efficacy(runs=runs,iterations=localiters)
geogGHC.efficacy(runs=runs,iterations=localiters)
print"...Efficacy calculated.\n"
randLMEffList, randLMEffMean = randLM.getEfficacy()
randLIEffList, randLIEffMean = randLI.getEfficacy()
randGHCEffList, randGHCEffMean = randGHC.getEfficacy()
geogLMEffList, geogLMEffMean = geogLM.getEfficacy()
geogLIEffList, geogLIEffMean = geogLI.getEfficacy()
geogGHCEffList, geogGHEffMean = geogGHC.getEfficacy()
#-----------------------------------------------------------------------------
print 'With ',nloc,' nodes and'
print 'based on ',runs,' runs, and ',localiters,' iterations'
print 'On a random network: '
print 'LocalMixer Mean Efficacy is: ',randLMEffMean
print 'LocalImprover Mean Efficacy is: ',randLIEffMean
print 'Global Hill Climber Mean Efficacy is: ',randGHCEffMean
print '\nOn a geographical network: '
print 'LocalMixer Mean Efficacy is: ',geogLMEffMean
print 'LocalImprover Mean Efficacy is: ',geogLIEffMean
print 'Global Hill Climber Mean Efficacy is: ',geogGHEffMean
mp.title('Local Mixer on Random Network')
mp.xlabel('Iterations to Solution')
mp.ylabel('Efficacy')
mp.scatter(randLMEffList[2],randLMEffList[1],c=myColours[0],alpha=0.7)
mp.show()
mp.title('LocalImprover on Random Network')
mp.xlabel('Iterations to Solution')
mp.ylabel('Efficacy')
mp.scatter(randLIEffList[2],randLIEffList[1],c=myColours[1],alpha=0.7)
mp.show()
mp.title('Global Hill Climber on Random Network')
mp.xlabel('Iterations to Solution')
mp.ylabel('Efficacy')
mp.scatter(randGHCEffList[2],randGHCEffList[1],c=myColours[2],alpha=0.7)
mp.show()
mp.title('Local Mixer on Geographical Network')
mp.xlabel('Iterations to Solution')
mp.ylabel('Efficacy')
mp.scatter(geogLMEffList[2],geogLMEffList[1],c=myColours[3],alpha=0.7)
mp.show()
mp.title('LocalImprover on Geographical Network')
mp.xlabel('Iterations to Solution')
mp.ylabel('Efficacy')
mp.scatter(geogLIEffList[2],geogLIEffList[1],c=myColours[4],alpha=0.7)
mp.show()
mp.title('Global Hill Climber on Geographical Network')
mp.xlabel('Iterations to Solution')
mp.ylabel('Efficacy')
mp.scatter(geogGHCEffList[2],geogGHCEffList[1],c=myColours[5],alpha=0.7)
mp.show()
#------------------------------------------------------------------------------
mp.title('All on Random Network')
mp.xlabel('Iterations to Solution')
mp.ylabel('Efficacy')
mp.scatter(randLMEffList[2],randLMEffList[1],c=myColours[0],alpha=0.7)
mp.scatter(randLIEffList[2],randLIEffList[1],c=myColours[1],alpha=0.7)
mp.scatter(randGHCEffList[2],randGHCEffList[1],c=myColours[2],alpha=0.7)
mp.show()
mp.title('All on Geographical Network')
mp.xlabel('Iterations to Solution')
mp.ylabel('Efficacy')
mp.scatter(geogLMEffList[2],geogLMEffList[1],c=myColours[3],alpha=0.7)
mp.scatter(geogLIEffList[2],geogLIEffList[1],c=myColours[4],alpha=0.7)
mp.scatter(geogGHCEffList[2],geogGHCEffList[1],c=myColours[5],alpha=0.7)
mp.show()
###############################################################################
#==============================================================================
###############################################################################