Advertisement
Guest User

Untitled

a guest
Jan 25th, 2020
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.75 KB | None | 0 0
  1. import subprocess
  2. import time
  3. import matplotlib.pyplot as plt
  4. import numpy as np
  5.  
  6. frams_cli_path = r'C:\Users\kapis\Desktop\PUT\magisterka\semestr2\Komosiński\LAB\Framstics\Framsticks50rc13\frams.exe'
  7. 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"',
  8. 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"']
  9.  
  10. def invoke_calculations(command):
  11.     p = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
  12.     output, err = p.communicate()
  13.     p.wait()
  14.     return output
  15.  
  16.  
  17. def prepare_significant_lines(output):
  18.     lines = output.decode().splitlines()
  19.     significant_lines = [line for line in lines if "[LOG]" in line]
  20.     return significant_lines
  21.  
  22.  
  23. def extract_fitnesses(lines):
  24.     return [line.split(' ')[-2] for line in lines]
  25.  
  26.  
  27. def process():
  28.     times = []
  29.     best_fitnesses = []
  30.     iteration_fitnesses = []
  31.  
  32.     for index, command in enumerate(commands):
  33.         times.append([])
  34.         best_fitnesses.append([])
  35.         iteration_fitnesses.append([])
  36.         for _ in range(10):
  37.             start = time.clock()
  38.             output = invoke_calculations(command)
  39.             end = time.clock()
  40.  
  41.             elapsed = end - start
  42.             times[index].append(np.array(elapsed).astype(np.float))
  43.  
  44.             significant_lines = prepare_significant_lines(output)
  45.             fitnesses = extract_fitnesses(significant_lines)
  46.             iteration_fitnesses[index].append(np.array(fitnesses).astype(np.float))
  47.             max_fitness = max(fitnesses)
  48.             best_fitnesses[index].append(np.array(max_fitness).astype(np.float))
  49.  
  50.     fig, ax = plt.subplots()
  51.     bp1 = ax.boxplot(best_fitnesses, positions=[1, 4], notch=True, widths=0.35,
  52.                      patch_artist=True, boxprops=dict(facecolor="C0"))
  53.     bp2 = ax.boxplot(times, positions=[2, 5], notch=True, widths=0.35,
  54.                      patch_artist=True, boxprops=dict(facecolor="C2"))
  55.  
  56.     ax.legend([bp1["boxes"][0], bp2["boxes"][0]], ['Fitness', 'Time'], loc='upper right')
  57.  
  58.     ax.set_xlim(0, 6)
  59.     plt.savefig('boxplots_fitnesses_times.svg')
  60.  
  61.     fig, ax = plt.subplots()
  62.     bp1 = ax.boxplot(best_fitnesses[0], positions=[1], notch=True, widths=0.70,
  63.                      patch_artist=True, boxprops=dict(facecolor="C0"))
  64.     bp2 = ax.boxplot(best_fitnesses[1], positions=[2], notch=True, widths=0.70,
  65.                      patch_artist=True, boxprops=dict(facecolor="C2"))
  66.  
  67.     ax.legend([bp1["boxes"][0], bp2["boxes"][0]], ['parm1', 'parm2_slow'], loc='upper right')
  68.  
  69.     ax.set_xlim(0, 3)
  70.     plt.savefig('boxplots_fitnesses.svg')
  71.  
  72.     fig, ax = plt.subplots()
  73.     bp1 = ax.boxplot(times[0], positions=[1], notch=True, widths=0.70,
  74.                      patch_artist=True, boxprops=dict(facecolor="C0"))
  75.     bp2 = ax.boxplot(times[1], positions=[2], notch=True, widths=0.70,
  76.                      patch_artist=True, boxprops=dict(facecolor="C2"))
  77.  
  78.     ax.legend([bp1["boxes"][0], bp2["boxes"][0]], ['parm1', 'parm2_slow'], loc='upper right')
  79.  
  80.     ax.set_xlim(0, 3)
  81.     plt.savefig('boxplots_times.svg')
  82.     plt.show()
  83.  
  84.     for index, parametrization in enumerate(iteration_fitnesses):
  85.         for iteration in parametrization:
  86.             plt.plot(iteration, '')
  87.             plt.ylabel('Fitness')
  88.             plt.xlabel('Iteration')
  89.         plt.savefig(f'lines{index}.svg')
  90.         plt.show()
  91.  
  92. if __name__ == '__main__':
  93.     process()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement