Skip to content

Commit

Permalink
fixed horse example after breaking change to winning
Browse files Browse the repository at this point in the history
  • Loading branch information
microprediction committed Jul 22, 2021
1 parent 884c1ef commit 4ac09ce
Show file tree
Hide file tree
Showing 7 changed files with 21 additions and 27 deletions.
41 changes: 20 additions & 21 deletions humpday/objectives/horse.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,41 +2,39 @@
# 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):
global DIVIDENDS
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:
Expand All @@ -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)))
print(list(zip(o, ABILITIES)))
1 change: 0 additions & 1 deletion humpday/optimizers/bobyqacube.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
1 change: 0 additions & 1 deletion humpday/optimizers/dlibcube.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
1 change: 0 additions & 1 deletion humpday/optimizers/hyperoptcube.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
1 change: 0 additions & 1 deletion humpday/optimizers/swarmlibcube.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand Down
1 change: 0 additions & 1 deletion humpday/optimizers/ultraoptcube.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down

0 comments on commit 4ac09ce

Please sign in to comment.