Add execution module
This commit is contained in:
parent
44d4cefa98
commit
e0395858c0
|
@ -0,0 +1,84 @@
|
||||||
|
from glob import glob
|
||||||
|
from subprocess import run
|
||||||
|
from sys import executable
|
||||||
|
|
||||||
|
from numpy import mean, std
|
||||||
|
from pandas import DataFrame, ExcelWriter
|
||||||
|
|
||||||
|
|
||||||
|
def file_list(path):
|
||||||
|
file_list = []
|
||||||
|
for fname in glob(path):
|
||||||
|
file_list.append(fname)
|
||||||
|
return file_list
|
||||||
|
|
||||||
|
|
||||||
|
def create_dataframes():
|
||||||
|
return [DataFrame() for _ in range(2)]
|
||||||
|
|
||||||
|
|
||||||
|
def process_output(results):
|
||||||
|
distances = []
|
||||||
|
time = []
|
||||||
|
for line in results:
|
||||||
|
if line.startswith(bytes("Total distance:", encoding="utf-8")):
|
||||||
|
line_elements = line.split(sep=bytes(":", encoding="utf-8"))
|
||||||
|
distances.append(float(line_elements[1]))
|
||||||
|
if line.startswith(bytes("Execution time:", encoding="utf-8")):
|
||||||
|
line_elements = line.split(sep=bytes(":", encoding="utf-8"))
|
||||||
|
time.append(float(line_elements[1]))
|
||||||
|
return distances, time
|
||||||
|
|
||||||
|
|
||||||
|
def populate_dataframe(df, output_cmd, dataset):
|
||||||
|
distances, time = process_output(output_cmd)
|
||||||
|
data_dict = {
|
||||||
|
"dataset": dataset.removeprefix("data/"),
|
||||||
|
"media distancia": mean(distances),
|
||||||
|
"desviacion distancia": std(distances),
|
||||||
|
"media tiempo": mean(time),
|
||||||
|
"desviacion tiempo": std(time),
|
||||||
|
}
|
||||||
|
df = df.append(data_dict, ignore_index=True)
|
||||||
|
return df
|
||||||
|
|
||||||
|
|
||||||
|
def script_execution(filenames, df_list):
|
||||||
|
script = "src/main.py"
|
||||||
|
parameters = [["annealing"], ["multistart"]]
|
||||||
|
for dataset in filenames:
|
||||||
|
print(f"Running on dataset {dataset}")
|
||||||
|
for index, params in zip(range(4), parameters):
|
||||||
|
print(f"Running {params} algorithm")
|
||||||
|
output_cmd = run(
|
||||||
|
[executable, script, dataset, *params], capture_output=True
|
||||||
|
).stdout.splitlines()
|
||||||
|
df_list[index] = populate_dataframe(df_list[index], output_cmd, dataset)
|
||||||
|
return df_list
|
||||||
|
|
||||||
|
|
||||||
|
def export_results(df_list):
|
||||||
|
dataframes = {
|
||||||
|
"Simulated annealing": df_list[0],
|
||||||
|
"Multi-start local search": df_list[1],
|
||||||
|
}
|
||||||
|
writer = ExcelWriter(path="docs/algorithm-results.xlsx", engine="xlsxwriter")
|
||||||
|
for name, df in dataframes.items():
|
||||||
|
df.to_excel(writer, sheet_name=name, index=False)
|
||||||
|
worksheet = writer.sheets[name]
|
||||||
|
for index, column in enumerate(df):
|
||||||
|
series = df[column]
|
||||||
|
max_length = max(series.astype(str).str.len().max(), len(str(series.name)))
|
||||||
|
worksheet.set_column(index, index, width=max_length + 5)
|
||||||
|
writer.save()
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
datasets = file_list(path="data/*.txt")
|
||||||
|
df_list = create_dataframes()
|
||||||
|
populated_df_list = script_execution(datasets, df_list)
|
||||||
|
export_results(populated_df_list)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
|
@ -23,7 +23,7 @@ def show_results(solution, time_delta):
|
||||||
def parse_arguments():
|
def parse_arguments():
|
||||||
parser = ArgumentParser()
|
parser = ArgumentParser()
|
||||||
parser.add_argument("file", help="dataset of choice")
|
parser.add_argument("file", help="dataset of choice")
|
||||||
parser.add_argument("algorithm", choices=["annealing", "multisearch"])
|
parser.add_argument("algorithm", choices=["annealing", "multistart"])
|
||||||
return parser.parse_args()
|
return parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue