-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathgraphReduction.py
96 lines (89 loc) · 3.33 KB
/
graphReduction.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
import sys
import json
from utils.MatrixPrototypes import *
from randomPermutation import getRandom
import simulatedannealing
def graphReduction(matrix, simAnneal=True, startSolution=None, printFlag=True):
matrix = resolveMatrix(matrix)
if startSolution == None:
startSolution = getRandom(matrix.vertices)
if simAnneal:
solution, fScore = simulatedannealing.simulateanneal(matrix, startSolution, printFlag)
else:
solution, fScore, tries = hillclimb.climbhill(matrix, strartSolution)
return solution, fScore
def resolveMatrix(matrix):
if (isinstance(matrix, AdjacencyMatrix)):
newMatrix = matrix
elif (isinstance(matrix, list) and isinstance(matrix[0], list) and len(matrix[i]) == len(matrix) for i in range(len(matrix)) ):
newMatrix = AdjacencyMatrix(len(matrix))
newMatrix.vertices = [range(len(matrix))]
newMatrix.matrix = matrix
else:
try:
matrix = open(matrix)
doubleArray =json.load(matrix)
except ValueError:
try:
doubleArray = json.loads(matrix)
except Exception:
raise Exception("Invalid Matrix")
if not (isinstance(doubleArray, list) and isinstance(doubleArray[0], list) and len(doubleArray[i]) == len(doubleArray) for i in range(len(doubleArray))):
raise Exception("Invalid Matrix")
newMatrix = AdjacencyMatrix(len(doubleArray))
newMatrix.vertices = [range(len(doubleArray))]
newMatrix.matrix = matrix
return newMatrix
if __name__=='__main__':
from utils import viz
from score import diagnose
if (len(sys.argv) < 2):
print("Example: ")
matrix = AdjacencyMatrix(12)
matrix.addVertices(["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L"])
matrix.addEdge("A", "B")
matrix.addEdge("B", "C")
matrix.addEdge("C", "D")
matrix.addEdge("D", "A")
matrix.addEdge("E", "F")
matrix.addEdge("F", "G")
matrix.addEdge("G", "H")
matrix.addEdge("H", "E")
matrix.addEdge("I", "J")
matrix.addEdge("J", "K")
matrix.addEdge("K", "L")
matrix.addEdge("L", "I")
matrix.addEdge("A", "E")
matrix.addEdge("B", "F")
matrix.addEdge("C", "G")
matrix.addEdge("D", "H")
matrix.addEdge("E", "I")
matrix.addEdge("F", "J")
matrix.addEdge("G", "K")
matrix.addEdge("H", "L")
randSolution = getRandom(matrix.vertices)
solution, fScore = simulatedannealing.simulateanneal(matrix, randSolution)
print "Random Solution"
diagnose(matrix, randSolution)
print "Final Solution"
diagnose(matrix, solution)
try:
import networkx
import matplotlib
viz.display(matrix, solution)
except ImportError:
print("Need networkx and matplotlib to display graph.")
else:
matrix = sys.argv[1]
newMatrix = resolveMatrix(matrix)
simAnneal = True
startSolution = True
printFlag = False
solution = graphReduction(newMatrix)
try:
import networkx
import matplotlib
viz.display(matrix, solution)
except ImportError:
print("Need networkx and matplotlib to display graph.")
#for arg in sys.argv: