-
Notifications
You must be signed in to change notification settings - Fork 0
/
cornTest.py
64 lines (54 loc) · 1.68 KB
/
cornTest.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
import sys
import os.path
from util import *
from classes import *
import random
from datetime import datetime
from search import *
from grid import *
from feature import *
from csp import *
from ast import literal_eval as make_tuple
start = timeit.default_timer()
cwSize = 15
dataFileName = 'basicLargeBacktrackSearch.txt'
# Process Database
d = createClueDatabase()
sortedData = sortDatabase(d, cwSize) #dict where keys are the lengths of the words co ntained in corresponding list
# Choose crossword grid pattern
grid = getLargeGrid()
# Create Crossword Object
#cw = createCrossword(size=5, sortedData=sortedData, blanks=grid)
#addSeedWords(cw)
iters = 100
numSolved = 0
temp = datetime.now()
totalTime = temp-temp
for i in range(iters):
solved = False
print 'Iteration ' + str(i)
cw = createCrossword(size=cwSize, sortedData=sortedData, blanks=grid)
csp = createCrosswordCSP(cw)
start = datetime.now()
search = BacktrackingSearch()
solution = search.solve(csp, mcv=False, ac3=True)
end = datetime.now()
addAssignmentsToGrid(cw, solution)
totalTime += (end-start)
if len(solution.keys()) == csp.numVars:
numSolved += 1
solved = True
# For logging experimental results
df = open(dataFileName, 'a')
toWrite = 'ATTEMPT ' + str(i) + '\nSolved: ' + str(solved) + '\nAccuracy so far: ' + str(numSolved*1.0/(i+1)) + '\nSearch time: '+ str(end-start) + '\nAverage time: ' +str(totalTime/(i+1)) + '\n'
df.write(toWrite)
df.close()
df = open(dataFileName, 'ab')
cw.grid.tofile(df, " ")
df.close()
df = open(dataFileName, 'a')
df.write("Solved "+str(numSolved)+" out of "+str(i+1)+" puzzles \n")
df.close()
###
#features = CWFeatureExtractor(cw, cw.letters[(0,2)], 'A')
#print features