| @@ 11-173 (lines=163) @@ | ||
| 8 | indent = " " |
|
| 9 | ||
| 10 | ||
| 11 | class PrintResults: |
|
| 12 | def __init__(self, opt_pros, verbosity): |
|
| 13 | self.opt_pros = opt_pros |
|
| 14 | self.verbosity = verbosity |
|
| 15 | ||
| 16 | def _print_times(self, eval_time, iter_time, n_iter): |
|
| 17 | opt_time = iter_time - eval_time |
|
| 18 | iterPerSec = n_iter / iter_time |
|
| 19 | ||
| 20 | print( |
|
| 21 | indent, |
|
| 22 | "Evaluation time :", |
|
| 23 | eval_time, |
|
| 24 | "sec", |
|
| 25 | indent, |
|
| 26 | "[{} %]".format(round(eval_time / iter_time * 100, 2)), |
|
| 27 | ) |
|
| 28 | print( |
|
| 29 | indent, |
|
| 30 | "Optimization time :", |
|
| 31 | opt_time, |
|
| 32 | "sec", |
|
| 33 | indent, |
|
| 34 | "[{} %]".format(round(opt_time / iter_time * 100, 2)), |
|
| 35 | ) |
|
| 36 | if iterPerSec >= 1: |
|
| 37 | print( |
|
| 38 | indent, |
|
| 39 | "Iteration time :", |
|
| 40 | iter_time, |
|
| 41 | "sec", |
|
| 42 | indent, |
|
| 43 | "[{} iter/sec]".format(round(iterPerSec, 2)), |
|
| 44 | ) |
|
| 45 | else: |
|
| 46 | secPerIter = iter_time / n_iter |
|
| 47 | print( |
|
| 48 | indent, |
|
| 49 | "Iteration time :", |
|
| 50 | iter_time, |
|
| 51 | "sec", |
|
| 52 | indent, |
|
| 53 | "[{} sec/iter]".format(round(secPerIter, 2)), |
|
| 54 | ) |
|
| 55 | print(" ") |
|
| 56 | ||
| 57 | def align_para_names(self, para_names): |
|
| 58 | str_lengths = [len(str_) for str_ in para_names] |
|
| 59 | max_length = max(str_lengths) |
|
| 60 | ||
| 61 | para_names_align = {} |
|
| 62 | for para_name, str_length in zip(para_names, str_lengths): |
|
| 63 | added_spaces = max_length - str_length |
|
| 64 | para_names_align[para_name] = " " * added_spaces |
|
| 65 | ||
| 66 | return para_names_align |
|
| 67 | ||
| 68 | def _print_results( |
|
| 69 | self, |
|
| 70 | experiment, |
|
| 71 | best_score, |
|
| 72 | best_para, |
|
| 73 | best_iter, |
|
| 74 | best_additional_results, |
|
| 75 | random_seed, |
|
| 76 | ): |
|
| 77 | print("\nResults: '{}'".format(experiment.__class__.__name__), " ") |
|
| 78 | if best_para is None: |
|
| 79 | print(indent, "Best score:", best_score, " ") |
|
| 80 | print(indent, "Best parameter set:", best_para, " ") |
|
| 81 | print(indent, "Best iteration:", best_iter, " ") |
|
| 82 | ||
| 83 | else: |
|
| 84 | print(indent, "Best score:", best_score, " ") |
|
| 85 | ||
| 86 | if best_additional_results: |
|
| 87 | print(indent, "Best additional results:") |
|
| 88 | add_results_names = list(best_additional_results.keys()) |
|
| 89 | add_results_names_align = self.align_para_names( |
|
| 90 | add_results_names |
|
| 91 | ) |
|
| 92 | ||
| 93 | for best_additional_result in best_additional_results.keys(): |
|
| 94 | added_spaces = add_results_names_align[ |
|
| 95 | best_additional_result |
|
| 96 | ] |
|
| 97 | print( |
|
| 98 | indent, |
|
| 99 | indent, |
|
| 100 | "'{}'".format(best_additional_result), |
|
| 101 | "{}:".format(added_spaces), |
|
| 102 | best_additional_results[best_additional_result], |
|
| 103 | " ", |
|
| 104 | ) |
|
| 105 | ||
| 106 | if best_para: |
|
| 107 | print(indent, "Best parameter set:") |
|
| 108 | para_names = list(best_para.keys()) |
|
| 109 | para_names_align = self.align_para_names(para_names) |
|
| 110 | ||
| 111 | for para_key in best_para.keys(): |
|
| 112 | added_spaces = para_names_align[para_key] |
|
| 113 | print( |
|
| 114 | indent, |
|
| 115 | indent, |
|
| 116 | "'{}'".format(para_key), |
|
| 117 | "{}:".format(added_spaces), |
|
| 118 | best_para[para_key], |
|
| 119 | " ", |
|
| 120 | ) |
|
| 121 | ||
| 122 | print(indent, "Best iteration:", best_iter, " ") |
|
| 123 | ||
| 124 | print(" ") |
|
| 125 | print(indent, "Random seed:", random_seed, " ") |
|
| 126 | print(" ") |
|
| 127 | ||
| 128 | def print_process(self, results, nth_process): |
|
| 129 | verbosity = self.verbosity |
|
| 130 | experiment = self.opt_pros[nth_process].experiment |
|
| 131 | search_space = self.opt_pros[nth_process].s_space.search_space |
|
| 132 | ||
| 133 | search_data = results["search_data"] |
|
| 134 | ||
| 135 | try: |
|
| 136 | best_sample = search_data.iloc[search_data["score"].idxmax()] |
|
| 137 | ||
| 138 | except TypeError: |
|
| 139 | logging.warning( |
|
| 140 | "Warning: Cannot index by location index with a non-integer key" |
|
| 141 | ) |
|
| 142 | ||
| 143 | else: |
|
| 144 | best_score = best_sample["score"] |
|
| 145 | best_values = best_sample[list(search_space.keys())] |
|
| 146 | best_para = dict(zip(list(search_space.keys()), best_values)) |
|
| 147 | best_additional_results_df = best_sample.drop( |
|
| 148 | ["score"] + list(search_space.keys()) |
|
| 149 | ) |
|
| 150 | best_additional_results = best_additional_results_df.to_dict() |
|
| 151 | ||
| 152 | best_iter = results["best_iter"] |
|
| 153 | eval_times = results["eval_times"] |
|
| 154 | iter_times = results["iter_times"] |
|
| 155 | random_seed = results["random_seed"] |
|
| 156 | ||
| 157 | n_iter = self.opt_pros[nth_process].n_iter |
|
| 158 | ||
| 159 | eval_time = np.array(eval_times).sum() |
|
| 160 | iter_time = np.array(iter_times).sum() |
|
| 161 | ||
| 162 | if "print_results" in verbosity: |
|
| 163 | self._print_results( |
|
| 164 | experiment, |
|
| 165 | best_score, |
|
| 166 | best_para, |
|
| 167 | best_iter, |
|
| 168 | best_additional_results, |
|
| 169 | random_seed, |
|
| 170 | ) |
|
| 171 | ||
| 172 | if "print_times" in verbosity: |
|
| 173 | self._print_times(eval_time, iter_time, n_iter) |
|
| 174 | ||
| @@ 11-169 (lines=159) @@ | ||
| 8 | indent = " " |
|
| 9 | ||
| 10 | ||
| 11 | class PrintResults: |
|
| 12 | def __init__(self, opt_pros, verbosity): |
|
| 13 | self.opt_pros = opt_pros |
|
| 14 | self.verbosity = verbosity |
|
| 15 | ||
| 16 | def _print_times(self, eval_time, iter_time, n_iter): |
|
| 17 | opt_time = iter_time - eval_time |
|
| 18 | iterPerSec = n_iter / iter_time |
|
| 19 | ||
| 20 | print( |
|
| 21 | indent, |
|
| 22 | "Evaluation time :", |
|
| 23 | eval_time, |
|
| 24 | "sec", |
|
| 25 | indent, |
|
| 26 | "[{} %]".format(round(eval_time / iter_time * 100, 2)), |
|
| 27 | ) |
|
| 28 | print( |
|
| 29 | indent, |
|
| 30 | "Optimization time :", |
|
| 31 | opt_time, |
|
| 32 | "sec", |
|
| 33 | indent, |
|
| 34 | "[{} %]".format(round(opt_time / iter_time * 100, 2)), |
|
| 35 | ) |
|
| 36 | if iterPerSec >= 1: |
|
| 37 | print( |
|
| 38 | indent, |
|
| 39 | "Iteration time :", |
|
| 40 | iter_time, |
|
| 41 | "sec", |
|
| 42 | indent, |
|
| 43 | "[{} iter/sec]".format(round(iterPerSec, 2)), |
|
| 44 | ) |
|
| 45 | else: |
|
| 46 | secPerIter = iter_time / n_iter |
|
| 47 | print( |
|
| 48 | indent, |
|
| 49 | "Iteration time :", |
|
| 50 | iter_time, |
|
| 51 | "sec", |
|
| 52 | indent, |
|
| 53 | "[{} sec/iter]".format(round(secPerIter, 2)), |
|
| 54 | ) |
|
| 55 | print(" ") |
|
| 56 | ||
| 57 | def align_para_names(self, para_names): |
|
| 58 | str_lengths = [len(str_) for str_ in para_names] |
|
| 59 | max_length = max(str_lengths) |
|
| 60 | ||
| 61 | para_names_align = {} |
|
| 62 | for para_name, str_length in zip(para_names, str_lengths): |
|
| 63 | added_spaces = max_length - str_length |
|
| 64 | para_names_align[para_name] = " " * added_spaces |
|
| 65 | ||
| 66 | return para_names_align |
|
| 67 | ||
| 68 | def _print_results( |
|
| 69 | self, |
|
| 70 | objective_function, |
|
| 71 | best_score, |
|
| 72 | best_para, |
|
| 73 | best_iter, |
|
| 74 | best_additional_results, |
|
| 75 | random_seed, |
|
| 76 | ): |
|
| 77 | print("\nResults: '{}'".format(objective_function.__name__), " ") |
|
| 78 | if best_para is None: |
|
| 79 | print(indent, "Best score:", best_score, " ") |
|
| 80 | print(indent, "Best parameter set:", best_para, " ") |
|
| 81 | print(indent, "Best iteration:", best_iter, " ") |
|
| 82 | ||
| 83 | else: |
|
| 84 | print(indent, "Best score:", best_score, " ") |
|
| 85 | ||
| 86 | if best_additional_results: |
|
| 87 | print(indent, "Best additional results:") |
|
| 88 | add_results_names = list(best_additional_results.keys()) |
|
| 89 | add_results_names_align = self.align_para_names(add_results_names) |
|
| 90 | ||
| 91 | for best_additional_result in best_additional_results.keys(): |
|
| 92 | added_spaces = add_results_names_align[best_additional_result] |
|
| 93 | print( |
|
| 94 | indent, |
|
| 95 | indent, |
|
| 96 | "'{}'".format(best_additional_result), |
|
| 97 | "{}:".format(added_spaces), |
|
| 98 | best_additional_results[best_additional_result], |
|
| 99 | " ", |
|
| 100 | ) |
|
| 101 | ||
| 102 | if best_para: |
|
| 103 | print(indent, "Best parameter set:") |
|
| 104 | para_names = list(best_para.keys()) |
|
| 105 | para_names_align = self.align_para_names(para_names) |
|
| 106 | ||
| 107 | for para_key in best_para.keys(): |
|
| 108 | added_spaces = para_names_align[para_key] |
|
| 109 | print( |
|
| 110 | indent, |
|
| 111 | indent, |
|
| 112 | "'{}'".format(para_key), |
|
| 113 | "{}:".format(added_spaces), |
|
| 114 | best_para[para_key], |
|
| 115 | " ", |
|
| 116 | ) |
|
| 117 | ||
| 118 | print(indent, "Best iteration:", best_iter, " ") |
|
| 119 | ||
| 120 | print(" ") |
|
| 121 | print(indent, "Random seed:", random_seed, " ") |
|
| 122 | print(" ") |
|
| 123 | ||
| 124 | def print_process(self, results, nth_process): |
|
| 125 | verbosity = self.verbosity |
|
| 126 | objective_function = self.opt_pros[nth_process].objective_function |
|
| 127 | search_space = self.opt_pros[nth_process].s_space.search_space |
|
| 128 | ||
| 129 | search_data = results["search_data"] |
|
| 130 | ||
| 131 | try: |
|
| 132 | best_sample = search_data.iloc[search_data["score"].idxmax()] |
|
| 133 | ||
| 134 | except TypeError: |
|
| 135 | logging.warning( |
|
| 136 | "Warning: Cannot index by location index with a non-integer key" |
|
| 137 | ) |
|
| 138 | ||
| 139 | else: |
|
| 140 | best_score = best_sample["score"] |
|
| 141 | best_values = best_sample[list(search_space.keys())] |
|
| 142 | best_para = dict(zip(list(search_space.keys()), best_values)) |
|
| 143 | best_additional_results_df = best_sample.drop( |
|
| 144 | ["score"] + list(search_space.keys()) |
|
| 145 | ) |
|
| 146 | best_additional_results = best_additional_results_df.to_dict() |
|
| 147 | ||
| 148 | best_iter = results["best_iter"] |
|
| 149 | eval_times = results["eval_times"] |
|
| 150 | iter_times = results["iter_times"] |
|
| 151 | random_seed = results["random_seed"] |
|
| 152 | ||
| 153 | n_iter = self.opt_pros[nth_process].n_iter |
|
| 154 | ||
| 155 | eval_time = np.array(eval_times).sum() |
|
| 156 | iter_time = np.array(iter_times).sum() |
|
| 157 | ||
| 158 | if "print_results" in verbosity: |
|
| 159 | self._print_results( |
|
| 160 | objective_function, |
|
| 161 | best_score, |
|
| 162 | best_para, |
|
| 163 | best_iter, |
|
| 164 | best_additional_results, |
|
| 165 | random_seed, |
|
| 166 | ) |
|
| 167 | ||
| 168 | if "print_times" in verbosity: |
|
| 169 | self._print_times(eval_time, iter_time, n_iter) |
|
| 170 | ||