-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathaco_scs.py
77 lines (62 loc) · 2.11 KB
/
aco_scs.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
#!/usr/bin/python3
import pantspath
from levenshtein import levenshtein
import acs_solver
import as_solver
def solve(fragFileName, outputFile, seqFileName, pathTrees):
nodes = []
fragFile = open(fragFileName, "r")
fragments = fragFile.readlines()
fragments = [x.strip('\n') for x in fragments]
for frag in fragments:
included = False
for existing in nodes:
if frag in existing:
included = True
break
if not included:
nodes.append(frag)
fragFile.close()
# FUNÇÃO PARA CALCULAR O TAMANHO DA ARESTA ENTRE DOIS VÉRTICES
def dist(a, b):
for i in range(0, len(b), 1):
if (a.endswith(b[0:len(b) - i])):
overlapSize = (len(b) - i)
if overlapSize > 0:
return overlapSize # Retorna o tamanho da sobreposição
else:
return 0
return 0
solution = acs_solver.solve(nodes, dist, 10, 500, pathTrees)
#outputFile.write("Distancia da solução: " + str(solution.distance))
# Escrever aqui os parâmetros utilizados em cada execução
# outputFile.write("\nParâmetros Utilizados:" +
# "\n\talpha: " + str(solver.alpha) +
# "\n\tbeta: " + str(solver.beta) +
# "\n\trho: " + str(solver.rho) +
# "\n\tq: " + str(solver.q) +
# "\n\tt0: " + str(solver.t0) +
# "\n\tlimit: " + str(solver.limit) +
# "\n\tant_count: " + str(solver.ant_count) +
# "\n\telite: " + str(solver.elite))
# Construi a SCS
scs = ""
for edge in solution.path:
# Adiciono o prefixo de cada no do caminho da solução
f = edge.start
# Não considero o utlimo nó pois ele vai ser o primeiro
end = edge.end
scs = scs + f[0:len(f) - int(edge.length)]
#print("Aresta", f[0:len(f) - (100 - edge.length)])
# Adiciono o sufixo da ultima palavra
scs = scs + end
# Tamanho solução
result = len(scs)
# Distancia da solução
seqFile = open(seqFileName, "r")
sequence = seqFile.readlines()
dist = levenshtein.levenshteinDistance(scs, sequence[0])
outputFile.write("\nACO: SCS Solution Size: " + str(result) + "\n")
#outputFile.write("\nSCS Solution:" + scs + "\n")
outputFile.write("\nACO: Levenshtein Distance = " + str(dist));
return result, dist