diff options
author | SeongJae Park <sj@kernel.org> | 2023-10-27 20:49:13 +0000 |
---|---|---|
committer | SeongJae Park <sj@kernel.org> | 2023-10-27 20:49:13 +0000 |
commit | ec80910162e0a9a7f78310641aa4f13acc0c15da (patch) | |
tree | ef72cd73efe505047e92d673611520fa85d99982 | |
parent | 9b87b5e8e9cb5d00d12cad925b6a754ee4a843be (diff) | |
download | damon-hack-ec80910162e0a9a7f78310641aa4f13acc0c15da.tar.gz |
ideas/autotune_sim: Implement for_plot option
Signed-off-by: SeongJae Park <sj@kernel.org>
-rwxr-xr-x | ideas/autotune_sim/autotune_sim.py | 46 |
1 files changed, 28 insertions, 18 deletions
diff --git a/ideas/autotune_sim/autotune_sim.py b/ideas/autotune_sim/autotune_sim.py index 6a3f690..877a71e 100755 --- a/ideas/autotune_sim/autotune_sim.py +++ b/ideas/autotune_sim/autotune_sim.py @@ -33,56 +33,66 @@ def score_of(input_, a, b, max_error_percent): max_error_half = int(score_wo_err * max_error_percent / 100 / 2) return score_wo_err + random.randint(max_error_half * -1 , max_error_half) -def run_simulation(): +def run_simulation(print_for_plot): '''Returns number of steps to converge''' max_steps = 1000 - print_for_plot = False a = random.randint(0, 100) b = random.randint(-100, 100) quota = random.randint(0, 1024) - answer = random.randint(1, 1024) - goal = score_of(answer, a, b, 0) + goal = 0 + while goal == 0: + answer = random.randint(1, 1024) + goal = score_of(answer, a, b, 0) target_error = 1 target_in_error = 5 tuner = Tuner(the_algorithm, goal) - nr_in_target = 0 + nr_consecutive_in_target = 0 + if print_for_plot: + print('%d_%d_%d_%d' % (a, b, quota, answer)) for i in range(max_steps): - score = score_of(quota, a, b, 0.5) + score = score_of(quota, a, b, 0.9) if abs(score - goal) / goal * 100 < target_error: - nr_in_target += 1 + nr_consecutive_in_target += 1 else: - nr_in_target = 0 - if nr_in_target == target_in_error: + nr_consecutive_in_target = 0 + if nr_consecutive_in_target == target_in_error: break quota = tuner.get_next_quota(score) if print_for_plot: print(i, score / goal) + if print_for_plot: + print() + print() if i == max_steps - 1: return -1 - return i + return i - nr_consecutive_in_target def main(): parser = argparse.ArgumentParser() parser.add_argument('nr_runs', type=int, help='number of runs') + parser.add_argument('--for_plot', action='store_true', + help='for plotting only') args = parser.parse_args() success_nr_steps = [] nr_failures = 0 for i in range(args.nr_runs): - nr_steps = run_simulation() + nr_steps = run_simulation(args.for_plot) if nr_steps == -1: nr_failures += 1 else: success_nr_steps.append(nr_steps) - print('failed %d times' % nr_failures) - print('nr steps to success') - print('avg %d' % (sum(success_nr_steps) / len(success_nr_steps))) - success_nr_steps.sort() - print('min/mean/max: %d %d %d' % (success_nr_steps[0], - success_nr_steps[int(len(success_nr_steps) / 2)], - success_nr_steps[-1])) + + if not args.for_plot: + print('failed %d times' % nr_failures) + print('nr steps to success') + print('avg %d' % (sum(success_nr_steps) / len(success_nr_steps))) + success_nr_steps.sort() + print('min/mean/max: %d %d %d' % (success_nr_steps[0], + success_nr_steps[int(len(success_nr_steps) / 2)], + success_nr_steps[-1])) if __name__ == '__main__': main() |