-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbatchSim.py
More file actions
70 lines (59 loc) · 2.72 KB
/
batchSim.py
File metadata and controls
70 lines (59 loc) · 2.72 KB
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
import argparse
import simulator
from operator import itemgetter
def loadHashesFromFile(file):
hashes = []
f = open(file, 'r')
for line in f:
line = line.strip()
if(len(line) == 0 or line[0] == "#"): continue
hashes.append(line.split('\t')[0])
f.close()
return hashes
def main():
argParser = argparse.ArgumentParser(description='Run a series of deck simulations.')
argParser.add_argument('attackFile', help='load attack hashes from this file')
argParser.add_argument('defenseFile', help='load defense hashes from this file')
argParser.add_argument('-n', '--numSims', type=int, default=100, help='number of simulations per comparison')
argParser.add_argument('-D', '--defense', type=int, default=0, help='start on defense (1) or offense (0)')
args = argParser.parse_args()
iterationsPerSimulation = args.numSims
attackFile = args.attackFile
defenseFile = args.defenseFile
scoreAsDefense = args.defense == 1
attackHashes = loadHashesFromFile(attackFile)
defenseHashes = loadHashesFromFile(defenseFile)
resultsDb = {}
if(scoreAsDefense):
resultsDb = simulator.runSimulationMatrix(defenseHashes, attackHashes, iterationsPerSimulation, resultsDb)
resultScores = simulator.getAttackScores(resultsDb, attackHashes, defenseHashes, scoreAsDefense)
else:
resultsDb = simulator.runSimulationMatrix(attackHashes, defenseHashes, iterationsPerSimulation, resultsDb)
resultScores = simulator.getAttackScores(resultsDb, defenseHashes, attackHashes, scoreAsDefense)
outputString = "\n"
for key in resultsDb:
outputString += key + "\n"
for inner_key in resultsDb[key]:
outputString += "\t" + inner_key + "\t" + "\t".join(map(str, resultsDb[key][inner_key])) + "\n"
resultScores = None
if(scoreAsDefense):
resultScores = simulator.getAttackScores(resultsDb, None, defenseHashes, scoreAsDefense)
else:
resultScores = simulator.getAttackScores(resultsDb, defenseHashes, None, scoreAsDefense)
'''
attackScores = {}
for defenseHash in defenseHashes:
results = resultsDb[defenseHash]
for attackHash in results:
if(not attackHash in attackScores):
attackScores[attackHash] = [attackHash, 0, 0]
attackScores[attackHash][1] += results[attackHash][1]
attackScores[attackHash][2] += results[attackHash][0]
attackScores[attackHash].append(results[attackHash][1] / results[attackHash][0])
'''
outputString += "\n"
scores = sorted(resultScores, key=itemgetter(1), reverse=True)
for score in scores:
outputString += "\t".join(map(str, score)) + "\n"
print(outputString)
main()