[fix] test your model
This commit is contained in:
parent
4d2d53da56
commit
0a10febfd7
118
template/main.py
118
template/main.py
|
|
@ -2,120 +2,10 @@ import os
|
|||
import signal
|
||||
import json
|
||||
|
||||
from model.anneal_model import SimAnneal
|
||||
from utils.tsp import TSP
|
||||
from utils.tsp import TSP_Bench_ALL
|
||||
from model.my_model import MyModel
|
||||
|
||||
def log(msg):
|
||||
print('[*] {msg}'.format(msg=msg))
|
||||
|
||||
def load_data(file):
|
||||
coords = []
|
||||
with open(file, "r") as infile:
|
||||
line = infile.readline()
|
||||
# Skip instance header
|
||||
while "NODE_COORD_SECTION" not in line:
|
||||
line = infile.readline()
|
||||
|
||||
for line in infile.readlines():
|
||||
line = line.replace("\n", "")
|
||||
if line and 'EOF' not in line:
|
||||
line = [float(x) for x in line.lstrip().split(" ", 1)[1].split(" ") if x]
|
||||
coords.append(line)
|
||||
return coords
|
||||
|
||||
def timeout_handler(signum, frame):
|
||||
print("Timeout")
|
||||
raise Exception("Timeout")
|
||||
|
||||
def TSP(tsp_file, model):
|
||||
|
||||
best_solution = []
|
||||
fitness_list = []
|
||||
|
||||
coords = load_data(tsp_file)
|
||||
|
||||
# Set timeout
|
||||
# signal.signal(signal.SIGALRM, timeout_handler)
|
||||
# signal.alarm(60)
|
||||
|
||||
# Try your algorithm
|
||||
try:
|
||||
model.init(coords)
|
||||
best_solution, fitness_list = model.fit(max_it=10000)
|
||||
except Exception as exc:
|
||||
if(str(exc) == "Timeout"):
|
||||
log("Timeout -3")
|
||||
with open('output/' + os.path.splitext(os.path.basename(tsp_file))[0] + '.txt', "w") as outfile:
|
||||
outfile.write("-3")
|
||||
else:
|
||||
print(exc)
|
||||
log("Unkown -4")
|
||||
with open('output/' + os.path.splitext(os.path.basename(tsp_file))[0] + '.txt', "w") as outfile:
|
||||
outfile.write("-4")
|
||||
|
||||
# Collect results
|
||||
if(len(fitness_list) > 0):
|
||||
log("Best: " + str(fitness_list[-1]))
|
||||
|
||||
if (len(best_solution) == 0):
|
||||
log("No Answer -1")
|
||||
with open('output/' + os.path.splitext(os.path.basename(tsp_file))[0] + '.txt', "w") as outfile:
|
||||
outfile.write("-1")
|
||||
elif (len(best_solution) != len(coords)):
|
||||
log("Invalid -2")
|
||||
with open('output/' + os.path.splitext(os.path.basename(tsp_file))[0] + '.txt', "w") as outfile:
|
||||
outfile.write("-2")
|
||||
else:
|
||||
log("Writing the best solution to file" )
|
||||
with open('output/' + os.path.splitext(os.path.basename(tsp_file))[0] + '.txt', "w") as outfile:
|
||||
outfile.write(str(model.fitness(best_solution)))
|
||||
outfile.write("\n")
|
||||
outfile.write(", ".join(str(item) for item in best_solution))
|
||||
|
||||
# Write to JSON
|
||||
data = {}
|
||||
|
||||
data['nodes'] = []
|
||||
for i in range(len(coords)):
|
||||
data['nodes'].append({
|
||||
'title': str(i),
|
||||
'id': i,
|
||||
'x': int(coords[i][0]),
|
||||
'y': int(coords[i][1])
|
||||
})
|
||||
|
||||
data['edges'] = []
|
||||
for i in range(len(best_solution)):
|
||||
if i == len(best_solution)-1:
|
||||
data['edges'].append({
|
||||
'source': best_solution[i],
|
||||
'target': best_solution[0]
|
||||
})
|
||||
else:
|
||||
data['edges'].append({
|
||||
'source': best_solution[i],
|
||||
'target': best_solution[i+1]
|
||||
})
|
||||
|
||||
with open('output/' + os.path.splitext(os.path.basename(tsp_file))[0] + '.json', 'w') as outfile:
|
||||
json.dump(data, outfile)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
for root, _, files in os.walk('./data'):
|
||||
if(files):
|
||||
for f in files:
|
||||
# Get input file name
|
||||
tsp_file = str(root) + '/' + str(f)
|
||||
log(tsp_file)
|
||||
|
||||
# Your Model
|
||||
# model = MyModel()
|
||||
|
||||
# Simulated Annealing
|
||||
model = SimAnneal()
|
||||
|
||||
TSP(tsp_file, model)
|
||||
|
||||
print()
|
||||
model = MyModel()
|
||||
TSP_Bench_ALL("./data", model)
|
||||
|
|
|
|||
Loading…
Reference in New Issue