-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathevaluate.py
64 lines (51 loc) · 2.41 KB
/
evaluate.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 argparse
import time
from craftbots.log_manager import Logger
from progress.bar import ShadyBar
from agents.rule_based_agent import RBAgent
from craftbots.config.config_manager import Configuration
from craftbots.simulation import Simulation
def reset_simulation(sim : Simulation):
sim.agents.clear()
agent = RBAgent()
sim.agents.append(agent)
sim.reset_simulation()
if __name__ == '__main__':
# parse command line arguments
arg_parser = argparse.ArgumentParser()
arg_parser.add_argument("-n", help="set number of simulation runs (default 1)", type=int, default=1)
arg_parser.add_argument("-f", help="configuration file", type=str)
arg_parser.add_argument("-o", help="output file", type=str, default="evaluation_output.csv")
arg_parser.add_argument("-r", help="override config simulation rate (default -1, no override)", type=int, default=-1)
args = arg_parser.parse_args()
# ensure logging is not printing to screen
Logger.log_to_screen = False
# create output file
with open(args.o,'w') as ofile:
ofile.write("seed,score,max_score\n")
# create simulation
if args.f:
print("Starting simulation with config file: "+ args.f)
sim : Simulation = Simulation(args.f)
else:
print("Starting simulation with default config file: craftbots/config/simple_configuration.yaml")
sim : Simulation = Simulation(configuration_file="craftbots/config/simple_configuration.yaml")
# make sure to use random seed
Configuration.set_value(sim.config, "use_random_seed", True)
initial_seed = Configuration.get_value(sim.config, "random_seed")
# check simulation rate
if args.r > 0: Configuration.set_value(sim.config, "simulation_rate", args.r)
# set up progress bar
sim_length = Configuration.get_value(sim.config, "sim_length")
bar : ShadyBar = ShadyBar('Running simulations', max=args.n*sim_length)
# run simulations
for n in range(args.n):
Configuration.set_value(sim.config, "random_seed", initial_seed+n)
reset_simulation(sim)
sim.start_simulation()
while not sim.simulation_finished:
bar.goto(n*sim_length + sim.world.tick)
time.sleep(0.1)
with open(args.o,'a') as ofile:
ofile.write(str(Configuration.get_value(sim.config, "random_seed"))+","+str(sim.world.total_score)+","+str(sim.world.max_possible_score)+"\n")
bar.finish()