Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import subprocess
- import time
- import matplotlib.pyplot as plt
- import numpy as np
- frams_cli_path = r'C:\Users\kapis\Desktop\PUT\magisterka\semestr2\Komosiński\LAB\Framstics\Framsticks50rc13\frams.exe'
- commands = [f'"{frams_cli_path}" "expdef standardMY" "Simulator.init();" "im case_study_experiment_state8.expt" "im case_study_paremeters3.sim" "Math.randomize();" "Simulator.start();" "while (ExpState.totaltestedcr<600) Simulator.step();" "sa koniec_%%N.expt" "-q"',
- f'"{frams_cli_path}" "expdef standardMY" "Simulator.init();" "im case_study_experiment_state8.expt" "im case_study_paremeters3_slow.sim" "Math.randomize();" "Simulator.start();" "while (ExpState.totaltestedcr<600) Simulator.step();" "sa koniec_%%N.expt" "-q"']
- def invoke_calculations(command):
- p = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
- output, err = p.communicate()
- p.wait()
- return output
- def prepare_significant_lines(output):
- lines = output.decode().splitlines()
- significant_lines = [line for line in lines if "[LOG]" in line]
- return significant_lines
- def extract_fitnesses(lines):
- return [line.split(' ')[-2] for line in lines]
- def process():
- times = []
- best_fitnesses = []
- iteration_fitnesses = []
- for index, command in enumerate(commands):
- times.append([])
- best_fitnesses.append([])
- iteration_fitnesses.append([])
- for _ in range(10):
- start = time.clock()
- output = invoke_calculations(command)
- end = time.clock()
- elapsed = end - start
- times[index].append(np.array(elapsed).astype(np.float))
- significant_lines = prepare_significant_lines(output)
- fitnesses = extract_fitnesses(significant_lines)
- iteration_fitnesses[index].append(np.array(fitnesses).astype(np.float))
- max_fitness = max(fitnesses)
- best_fitnesses[index].append(np.array(max_fitness).astype(np.float))
- fig, ax = plt.subplots()
- bp1 = ax.boxplot(best_fitnesses, positions=[1, 4], notch=True, widths=0.35,
- patch_artist=True, boxprops=dict(facecolor="C0"))
- bp2 = ax.boxplot(times, positions=[2, 5], notch=True, widths=0.35,
- patch_artist=True, boxprops=dict(facecolor="C2"))
- ax.legend([bp1["boxes"][0], bp2["boxes"][0]], ['Fitness', 'Time'], loc='upper right')
- ax.set_xlim(0, 6)
- plt.savefig('boxplots_fitnesses_times.svg')
- fig, ax = plt.subplots()
- bp1 = ax.boxplot(best_fitnesses[0], positions=[1], notch=True, widths=0.70,
- patch_artist=True, boxprops=dict(facecolor="C0"))
- bp2 = ax.boxplot(best_fitnesses[1], positions=[2], notch=True, widths=0.70,
- patch_artist=True, boxprops=dict(facecolor="C2"))
- ax.legend([bp1["boxes"][0], bp2["boxes"][0]], ['parm1', 'parm2_slow'], loc='upper right')
- ax.set_xlim(0, 3)
- plt.savefig('boxplots_fitnesses.svg')
- fig, ax = plt.subplots()
- bp1 = ax.boxplot(times[0], positions=[1], notch=True, widths=0.70,
- patch_artist=True, boxprops=dict(facecolor="C0"))
- bp2 = ax.boxplot(times[1], positions=[2], notch=True, widths=0.70,
- patch_artist=True, boxprops=dict(facecolor="C2"))
- ax.legend([bp1["boxes"][0], bp2["boxes"][0]], ['parm1', 'parm2_slow'], loc='upper right')
- ax.set_xlim(0, 3)
- plt.savefig('boxplots_times.svg')
- plt.show()
- for index, parametrization in enumerate(iteration_fitnesses):
- for iteration in parametrization:
- plt.plot(iteration, '')
- plt.ylabel('Fitness')
- plt.xlabel('Iteration')
- plt.savefig(f'lines{index}.svg')
- plt.show()
- if __name__ == '__main__':
- process()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement