move fib and prune_results into utilities

This commit is contained in:
Connor Olding 2023-05-09 18:36:06 -07:00
parent 665910b70c
commit 03a25e010a
3 changed files with 38 additions and 35 deletions

View File

@ -2,7 +2,6 @@ from .go_benchmark_lists import *
from .go_benchmarks import problems_2d, problems_3d, problems_4d from .go_benchmarks import problems_2d, problems_3d, problems_4d
from .parties import parties from .parties import parties
from .utilities import OWrap, COWrap, m1, m33, m36, prog from .utilities import OWrap, COWrap, m1, m33, m36, prog
from .utilities import perform_another_experimental_scoring_method
import numpy as np import numpy as np
all_problems = { all_problems = {
@ -155,12 +154,11 @@ for problem_list in GO_BENCHMARKS.values():
def main(argv, display=True): def main(argv, display=True):
from .utilities import fib
from .utilities import prune_results, perform_another_experimental_scoring_method
from tqdm import tqdm from tqdm import tqdm
import sys import sys
def fib(n):
return pow(2 << n, n + 1, (4 << 2 * n) - (2 << n) - 1) % (2 << n)
def optimizer_filter(name): def optimizer_filter(name):
# worst scoring optimizers: (awards=(5, 3, 2, 1)) (obj=146, opt=389) (dims=2, evals=80) # worst scoring optimizers: (awards=(5, 3, 2, 1)) (obj=146, opt=389) (dims=2, evals=80)
# evosax_pbt with (score: 0, price: 593) -593 # evosax_pbt with (score: 0, price: 593) -593
@ -262,36 +260,6 @@ def main(argv, display=True):
return s return s
def prune_results(results, multiple):
# if there are more than `multiple` results for one optimizer+objective pair,
# then trim the bottom and top until there are only `multiple` left.
new_results = {}
for obj_name, obj_res in results.items():
new_res = {}
for fopt, opt_name, extra in sorted(obj_res):
l = new_res.setdefault(opt_name, [[], []])
l[0].append(fopt)
l[1].append(extra)
slices = {}
for opt_name, res in new_res.items():
# in the event that an odd number of results needs to be trimmed,
# prefer trimming from the bottom (i.e. worse solutions get removed first).
fopts, extras = res
down = (len(fopts) - multiple) // 2
up = len(fopts) - (len(fopts) - multiple + 1) // 2
slices[opt_name] = slice(down, up)
for opt_name, res in new_res.items():
fopts, extras = res
s = slices[opt_name]
fopts, extras = fopts[s], extras[s]
if not no_summary:
assert len(fopts) == multiple, (len(fopts), multiple)
if len(fopts) == multiple:
for fopt, extra in zip(fopts, extras):
result = (fopt, opt_name, extra)
new_results.setdefault(obj_name, []).append(result)
return results
reset = "\033[m" reset = "\033[m"
quieter = True quieter = True
@ -388,7 +356,7 @@ def main(argv, display=True):
run += 1 run += 1
all_results = results all_results = results
results = prune_results(results, multiple) results = prune_results(results, multiple, _check=not no_summary)
scores, prices = {}, {} scores, prices = {}, {}
all_opt_names = set() all_opt_names = set()

View File

@ -21,3 +21,7 @@ def phi(d):
for i in range(30 if d == 1 else max(10, 28 - d)): for i in range(30 if d == 1 else max(10, 28 - d)):
x = pow(1 + x, 1 / (d + 1)) x = pow(1 + x, 1 / (d + 1))
return x return x
def fib(n):
return pow(2 << n, n + 1, (4 << 2 * n) - (2 << n) - 1) % (2 << n)

View File

@ -1,3 +1,34 @@
def prune_results(results, multiple, _check=False):
# if there are more than `multiple` results for one optimizer+objective pair,
# then trim the bottom and top until there are only `multiple` left.
new_results = {}
for obj_name, obj_res in results.items():
new_res = {}
for fopt, opt_name, extra in sorted(obj_res):
l = new_res.setdefault(opt_name, [[], []])
l[0].append(fopt)
l[1].append(extra)
slices = {}
for opt_name, res in new_res.items():
# in the event that an odd number of results needs to be trimmed,
# prefer trimming from the bottom (i.e. worse solutions get removed first).
fopts, extras = res
down = (len(fopts) - multiple) // 2
up = len(fopts) - (len(fopts) - multiple + 1) // 2
slices[opt_name] = slice(down, up)
for opt_name, res in new_res.items():
fopts, extras = res
s = slices[opt_name]
fopts, extras = fopts[s], extras[s]
if _check:
assert len(fopts) == multiple, (len(fopts), multiple)
if len(fopts) == multiple:
for fopt, extra in zip(fopts, extras):
result = (fopt, opt_name, extra)
new_results.setdefault(obj_name, []).append(result)
return results
def perform_another_experimental_scoring_method(results): def perform_another_experimental_scoring_method(results):
if len(results) and len(something := next(iter(results.values()))[0]) == 3: if len(results) and len(something := next(iter(results.values()))[0]) == 3:
history_length = len(something[2]) history_length = len(something[2])