From 4ac09ce2cd812330d0765bbe469f9a1b5d415f5a Mon Sep 17 00:00:00 2001 From: Peter Cotton Date: Wed, 21 Jul 2021 22:43:08 -0400 Subject: [PATCH] fixed horse example after breaking change to winning --- humpday/objectives/horse.py | 41 +++++++++++++++--------------- humpday/optimizers/bobyqacube.py | 1 - humpday/optimizers/dlibcube.py | 1 - humpday/optimizers/hyperoptcube.py | 1 - humpday/optimizers/swarmlibcube.py | 1 - humpday/optimizers/ultraoptcube.py | 1 - setup.py | 2 +- 7 files changed, 21 insertions(+), 27 deletions(-) diff --git a/humpday/objectives/horse.py b/humpday/objectives/horse.py index e7314c3..200b061 100644 --- a/humpday/objectives/horse.py +++ b/humpday/objectives/horse.py @@ -2,28 +2,24 @@ # The horse racing problem import numpy as np import math -from winning.lattice import skew_normal_density -from winning.lattice_calibration import implied_ability, ability_implied_dividends +from winning.std_calibration import std_ability_implied_dividends -global OFFSETS -OFFSETS = None +global ABILITIES +ABILITIES = None HORSE_DIM = 500 # Maximum dimension global DIVIDENDS DIVIDENDS = None -unit = 0.01 -L = 500 -DENSITY = skew_normal_density(L=500, unit=unit, a=1.5) -def make_offsets(): - global OFFSETS - if OFFSETS is None: + +def make_abilities(): + global ABILITIES + if ABILITIES is None: from datetime import datetime day_of_year = datetime.now().timetuple().tm_yday np.random.seed(day_of_year) - OFFSETS = sorted(np.random.randn(HORSE_DIM)/unit) - OFFSETS = [0] + [ o-OFFSETS[0] for o in OFFSETS[1:] ] - return OFFSETS + ABILITIES = sorted(np.random.randn(HORSE_DIM)) + return ABILITIES def make_dividends(n_dim): @@ -31,12 +27,14 @@ def make_dividends(n_dim): if DIVIDENDS is None: DIVIDENDS = dict() if not DIVIDENDS.get(n_dim): - DIVIDENDS[n_dim] = ability_implied_dividends(ability=make_offsets()[:n_dim], density=DENSITY) + DIVIDENDS[n_dim] = std_ability_implied_dividends(ability=make_abilities()[:n_dim]) return DIVIDENDS[n_dim] -def cube_to_offsets(u:[float])->[float]: - return [0] + list(np.arctanh(np.array(np.minimum(u, 1 - 1e-5))) / unit) +def cube_to_ability(u:[float])->[float]: + offsets = [0] + list(np.arctanh(np.array(np.minimum(u, 1 - 1e-5)))) + ability = [ min(5,o/100) for o in offsets ] + return ability def horse_dividends_on_cube(u:[float])->float: @@ -46,19 +44,20 @@ def horse_dividends_on_cube(u:[float])->float: """ n_dim = len(u)+1 dividends = make_dividends(n_dim) - offsets = cube_to_offsets(u=u) - implied_dividends = ability_implied_dividends(ability=offsets, density=DENSITY) + ability = cube_to_ability(u=u) + implied_dividends = std_ability_implied_dividends(ability=ability) discrepancy = np.mean( [ abs(math.sqrt(d1)-math.sqrt(d2)) for d1,d2 in zip(dividends,implied_dividends)]) return discrepancy -HORSE_OBJECTIVES = [ horse_dividends_on_cube ] +HORSE_OBJECTIVES = [ horse_dividends_on_cube ] # Seems unstable and needs fixin' + if __name__=='__main__': from humpday.optimizers.nevergradcube import nevergrad_ngopt8_cube v, u = nevergrad_ngopt8_cube(horse_dividends_on_cube,n_dim=20, n_trials=25000) - o = cube_to_offsets(u) + o = cube_to_ability(u) print(' ') print('Horse ability, and best solution found ') - print(list(zip(o,OFFSETS))) \ No newline at end of file + print(list(zip(o, ABILITIES))) \ No newline at end of file diff --git a/humpday/optimizers/bobyqacube.py b/humpday/optimizers/bobyqacube.py index 7bd59ed..870bdbd 100644 --- a/humpday/optimizers/bobyqacube.py +++ b/humpday/optimizers/bobyqacube.py @@ -7,7 +7,6 @@ from pybobyqa import solve using_bobyqa = True except ImportError: - warnings.warn('bobyqa may not be properly supported on this operating system. Maybe try pip install --upgrade cmake') using_bobyqa = False if using_bobyqa: diff --git a/humpday/optimizers/dlibcube.py b/humpday/optimizers/dlibcube.py index 52d7abc..eb099b8 100644 --- a/humpday/optimizers/dlibcube.py +++ b/humpday/optimizers/dlibcube.py @@ -8,7 +8,6 @@ from dlib import find_min_global using_dlib = True except ImportError: - warnings.warn('dlib may not be properly supported on this operating system. Maybe try pip install --upgrade cmake') using_dlib = False if using_dlib: diff --git a/humpday/optimizers/hyperoptcube.py b/humpday/optimizers/hyperoptcube.py index f7e12ba..22d4a18 100644 --- a/humpday/optimizers/hyperoptcube.py +++ b/humpday/optimizers/hyperoptcube.py @@ -9,7 +9,6 @@ from hyperopt.atpe import suggest as atpe_suggest using_ultraopt = True except ImportError: - warnings.warn('If you wish to include hyperopt you must pip install hyperopt') using_ultraopt = False if using_ultraopt: diff --git a/humpday/optimizers/swarmlibcube.py b/humpday/optimizers/swarmlibcube.py index a38097d..3ff74bc 100644 --- a/humpday/optimizers/swarmlibcube.py +++ b/humpday/optimizers/swarmlibcube.py @@ -7,7 +7,6 @@ from swarmlib.pso.particle import Particle as PSOParticle using_swarmlib = True except ImportError: - warnings.warn('If you wish to include ultraopt you must pip install ultraopt') using_swarmlib = False diff --git a/humpday/optimizers/ultraoptcube.py b/humpday/optimizers/ultraoptcube.py index 612206b..451dc0f 100644 --- a/humpday/optimizers/ultraoptcube.py +++ b/humpday/optimizers/ultraoptcube.py @@ -9,7 +9,6 @@ from ultraopt import fmin using_ultraopt = True except ImportError: - warnings.warn('If you wish to include ultraopt you must pip install ultraopt') using_ultraopt = False diff --git a/setup.py b/setup.py index 38faa2e..6678181 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ setup( name="humpday", - version="0.4.0", + version="0.4.1", description="Taking the pain out of choosing a Python global optimizer", long_description=README, long_description_content_type="text/markdown",