-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsolver.py
More file actions
36 lines (24 loc) · 1.21 KB
/
solver.py
File metadata and controls
36 lines (24 loc) · 1.21 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
from pathlib import Path
from optimization.optimizer_a import OptimizerA
from simulation.simulator import Simulator, SimulationResult
from utils.io_utils import read_input, write_output, InData
IN_DATA_FOLDER = Path('data') / 'input'
OUT_DATA_FOLDER = Path('data') / 'output'
IN_SUFFIX = '.txt'
OUT_SUFFIX = '.out'
def calc_score(simulation_result: SimulationResult, in_data: InData):
return sum(in_data.F + (in_data.D - T) for T in simulation_result.finished_cars_times if T <= in_data.D)
if __name__ == '__main__':
in_files = ['a', 'b', 'c', 'd', 'e', 'f'] # TODO: implement according to files given (only names, no suffix)
for f in in_files:
in_filename = f + IN_SUFFIX
out_filename = f + OUT_SUFFIX
optimizer = OptimizerA() # TODO: Optimizer is Abstract! change with a concrete one
in_data = read_input(IN_DATA_FOLDER / in_filename)
solution = optimizer.solve(in_data)
simulator = Simulator(in_data=in_data, solution=solution)
simulation_result = simulator.simulate()
score = calc_score(simulation_result, in_data)
print(f'{in_filename}: The score is: {score}')
write_output(solution, OUT_DATA_FOLDER / out_filename)
pass