-
Notifications
You must be signed in to change notification settings - Fork 1
/
ISTravel.py
82 lines (69 loc) · 2.66 KB
/
ISTravel.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
############################################################
#
# File name: ISTravel.py
# (Python version 3.5)
# Authors: Maciek Przydatek & Giliam Datema
# Created: 10/10/2015
#
# Course: Artificial Intelligence & Decision Systems
# Assignment: 1
#
# IST Lisboa
#
############################################################
# Import libraries
import sys
from functions import *
# Read input files
try:
netFileName = sys.argv[1]
cliFileName = sys.argv[2]
networkFile = open(netFileName, 'r')
clientsFile = open(cliFileName, 'r')
except IndexError:
print('Specify input files (.map and .cli)')
quit()
except FileNotFoundError:
print('Specified file was not found')
quit()
try:
if sys.argv[3] == 'informed':
searchStrategy = 'informed'
elif sys.argv[3] == 'uninformed':
searchStrategy = 'uninformed'
else:
print('Third argument (optional): ''uninformed'' (default) or ''informed''.')
quit()
except IndexError:
searchStrategy = 'uninformed'
rawData = InputData(networkFile.readlines(), clientsFile.readlines()) # data variable initialization. It contains
# raw, splitted and stripped integers
# or strings
# Close files after reading
networkFile.close()
clientsFile.close()
graph = Graph(rawData.networkData, rawData.nCities, rawData.nConnections) # graph variable initialization
# Search main loop
results = []
for clientNo in range(rawData.nClients): # loop through clients
client = Client(rawData.clData[clientNo]) # initialize new client
if searchStrategy == 'uninformed':
# Uninformed search
print("Performing uninformed search for client %d. Please wait..." % (clientNo+1))
UC_result = [clientNo+1]
UC_result.append(uniform_cost(client, graph))
UC_result = ''.join(c for c in str(UC_result) if c not in '[](),\'')
results.append(UC_result+'\n')
else:
# Informed search
print("Performing informed search for client %d. Please wait..." % (clientNo+1))
AS_result = [clientNo+1]
AS_result.append(a_star(client, graph))
AS_result = ''.join(c for c in str(AS_result) if c not in '[](),\'')
results.append(AS_result+'\n')
# Write results to output file. The the results from both algorithms should be the same, i.e. the optimal solution
outputFileName = cliFileName.strip('.cli')+'.sol'
outputFile = open(outputFileName,'w')
outputFile.writelines(results)
outputFile.close()
print("\nFinished. Results stored in %s" % (outputFileName))