aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSeongJae Park <sj@kernel.org>2023-10-27 20:49:13 +0000
committerSeongJae Park <sj@kernel.org>2023-10-27 20:49:13 +0000
commitec80910162e0a9a7f78310641aa4f13acc0c15da (patch)
treeef72cd73efe505047e92d673611520fa85d99982
parent9b87b5e8e9cb5d00d12cad925b6a754ee4a843be (diff)
downloaddamon-hack-ec80910162e0a9a7f78310641aa4f13acc0c15da.tar.gz
ideas/autotune_sim: Implement for_plot option
Signed-off-by: SeongJae Park <sj@kernel.org>
-rwxr-xr-xideas/autotune_sim/autotune_sim.py46
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()