X-Git-Url: https://git.ucc.asn.au/?p=progcomp2012.git;a=blobdiff_plain;f=progcomp%2Fjudge%2Fsimulator%2Fsimulate.py;h=76ca0a56d11b23145250bb806a5a98d306aa8cd5;hp=269c8b88a244845437d85cf752ff096eeed4ba28;hb=0c7750e61fd28eb3df39cb40401438b29d1a64c5;hpb=6515461bdd0672a6ebed07a62dd680cca8a1e29a;ds=sidebyside diff --git a/progcomp/judge/simulator/simulate.py b/progcomp/judge/simulator/simulate.py index 269c8b8..76ca0a5 100755 --- a/progcomp/judge/simulator/simulate.py +++ b/progcomp/judge/simulator/simulate.py @@ -7,6 +7,8 @@ Plays exactly ONE round, but does not overwrite previously played rounds eg: run once to generate round1.results, twice to generate round2.results etc Also generates total.scores based on results from every round. + + Now (sortof) generates .html files to display results in a prettiful manner. author Sam Moore (matches) [SZM] @@ -49,9 +51,9 @@ if len(sys.argv) >= 5: scores = {"VICTORY":(3,1, "DEFEAT"), "DEFEAT":(1,3, "VICTORY"), "SURRENDER":(1,3, "VICTORY"), "DRAW":(2,2, "DRAW"), "DRAW_DEFAULT":(1,1, "DRAW_DEFAULT"), "ILLEGAL":(-1,2, "DEFAULT"), "DEFAULT":(2,-1, "ILLEGAL"), "BOTH_ILLEGAL":(-1,-1, "BOTH_ILLEGAL"), "INTERNAL_ERROR":(0,0, "INTERNAL_ERROR"), "BAD_SETUP":(0,0,"BAD_SETUP")} -#Verbose - print lots of useless stuff about what you are doing (kind of like matches in irc...) +#Verbose - print lots of useless stuff about what you are doing (kind of like matches talking on irc...) verbose = True -makePrettyResults = False + #Check the manager program exists TODO: And is executable! @@ -74,74 +76,105 @@ if os.path.exists(logDirectory) == False: startTime = time() #Record time at which simulation starts -#Do each round... -for roundNumber in range(totalRounds, totalRounds + nRounds): - - if os.path.exists(logDirectory + "round"+str(roundNumber)) == False: - os.mkdir(logDirectory + "round"+str(roundNumber)) #Check there is a directory for this round's logs - +if verbose: + if nRounds > 1: + print "Simulating " + str(nRounds) + " rounds (" + str(totalRounds) + " to " + str(totalRounds + nRounds-1) + ")" + else: + print "Simulating one round." + print "" + print "Identifying possible agents in \""+agentsDirectory+"\"" + +#Get all agent names from agentsDirectory +#TODO: Move this part outside the loop? It only has to happen once +agentNames = os.listdir(agentsDirectory) +agents = [] +for name in agentNames: if verbose: - print "Simulating ROUND " +str(roundNumber) - print "Identifying possible agents in \""+agentsDirectory+"\"" - - #Get all agent names from agentsDirectory - #TODO: Move this part outside the loop? It only has to happen once - agentNames = os.listdir(agentsDirectory) - agents = [] - for name in agentNames: - #sys.stdout.write("\nLooking at Agent: \""+ str(name)+"\"... ") + sys.stdout.write("Scan \""+name+"\"... ") + if os.path.isdir(agentsDirectory+name) == False: #Remove non-directories if verbose: - sys.stdout.write("Scan \""+name+"\"... ") - if os.path.isdir(agentsDirectory+name) == False: #Remove non-directories - if verbose: - sys.stdout.write(" Invalid! (Not a directory)\n") - continue + sys.stdout.write(" Invalid! (Not a directory)\n") + continue - if os.path.exists(agentsDirectory+name+"/info") == False: #Try and find the special "info" file in each directory; ignore if it doesn't exist - if verbose: - sys.stdout.write(" Invalid! (No \"info\" file found)\n") - continue + if os.path.exists(agentsDirectory+name+"/info") == False: #Try and find the special "info" file in each directory; ignore if it doesn't exist + if verbose: + sys.stdout.write(" Invalid! (No \"info\" file found)\n") + continue + agentExecutable = agentsDirectory+name+"/"+(open(agentsDirectory+name+"/info").readline().strip()) - - agentExecutable = agentsDirectory+name+"/"+(open(agentsDirectory+name+"/info").readline().strip()) - - if os.path.exists(agentExecutable) == False: - if verbose: - sys.stdout.write(" Invalid! (File \""+agentExecutable+"\" does not exist!)\n") - continue + if os.path.exists(agentExecutable) == False: + if verbose: + sys.stdout.write(" Invalid! (Path: \""+agentExecutable+"\" does not exist!)\n") + continue - if verbose: - sys.stdout.write(" Valid! (To run: \""+agentExecutable+"\")\n") - - #Convert array of valid names into array of dictionaries containing information about each agent - #I'm starting to like python... - agents.append({"name":name, "path":agentExecutable,"score":[0], "totalScore":0, "VICTORY":[], "DEFEAT":[], "DRAW":[], "ILLEGAL":[], "INTERNAL_ERROR":[]}) - if len(agents) == 0: - print "Couldn't find any agents! Check paths (Edit this script) or generate \"info\" files for agents." - sys.exit(0) if verbose: - print "Total: " + str(len(agents)) + " valid agents found (From "+str(len(agentNames))+" possibilities)" - print "" - print "Commencing ROUND " + str(roundNumber) + " combat! This could take a while... " + sys.stdout.write(" Valid! (Path: \""+agentExecutable+"\")\n") + + #Convert array of valid names into array of dictionaries containing information about each agent + #I'm starting to like python... + agents.append({"name":name, "path":agentExecutable,"score":[0], "totalScore":0, "VICTORY":[], "DEFEAT":[], "DRAW":[], "ILLEGAL":[], "INTERNAL_ERROR":[], "ALL":[]}) + +if len(agents) == 0: + print "Couldn't find any agents! Check paths (Edit this script) or generate \"info\" files for agents." + sys.exit(0) +if verbose: + print "Total: " + str(len(agents)) + " valid agents found (From "+str(len(agentNames))+" possibilities)" + print "" + +#Prepare the pretty .html files if they don't exist +htmlDir = resultsDirectory + "pretty/" +if os.path.exists(htmlDir) == False: + os.mkdir(htmlDir) +if os.path.exists(htmlDir) == False: + print "Couldn't create directory \""+htmlDir+"\"." + sys.exit(1) + +for agent in agents: + if os.path.exists(htmlDir+agent["name"] + ".html") == False: + agentFile = open(htmlDir+agent["name"] + ".html", "w") + agentFile.write("\n
\n