=====================
MABWiser CHANGELOG
=====================

-------------------------------------------------------------------------------
September, 8, 2020 1.11.0
-------------------------------------------------------------------------------
major:
- New Algorithm: Locality Sensitive Hashing Approximate Nearest Neighbors
- This neighborhood policy uses locality-sensitive hashing with random projection via the SimHash algorithm to create approximate neighborhoods.
- More information: https://en.wikipedia.org/wiki/Locality-sensitive_hashing#Random_projection

minor:
- Refactor of _Neighbors and _Radius classes to support reusability of empty neighborhood functionality
- Switch to centralized version incrementing and use of the opensource@fmr.com email

-------------------------------------------------------------------------------
August, 12, 2020 1.10.1
-------------------------------------------------------------------------------
major:
- Initial release on PyPi.org

-------------------------------------------------------------------------------
June, 22, 2020 1.10.0
-------------------------------------------------------------------------------
- Introduction of base random number generator class to abstract away RNG provider
- Currently, numpy random serves as the rng provider

-------------------------------------------------------------------------------
May, 27, 2020 1.9.1
-------------------------------------------------------------------------------
minor:
- Performance improvement to LinTS algorithm by pre-computing cholesky decomposition in fit.

-------------------------------------------------------------------------------
May, 1, 2020 1.9.0
-------------------------------------------------------------------------------
major:
- New Algorithm: Randomized Popularity (Popularity)
- This bandit uses a probabilistically weighted selection based on mean arm rewards
- Currently, it assumes that the rewards are non-negative

-------------------------------------------------------------------------------
April, 8, 2020 1.8.1
-------------------------------------------------------------------------------
minor:
- Correction for how Softmax normalizes exponents to prevent overflow.
- Removal of Simulator matplotlib backend specification to eliminate Mac OS error.

-------------------------------------------------------------------------------
January, 21, 2020 1.8.0
-------------------------------------------------------------------------------
major:
- New Algorithm: Linear Thompson Sampling (LinTS)
- LinTS implementation uses deterministic sampling of a multivariate normal distribution of the regression coefficients.
- Adapted from Agrawal, Shipra and Navin Goyal. "Thompson Sampling for Contextual Bandits with Linear Payoffs." ICML 2013.
- The implementation is based on an initial design by Anshuman Pradhan (anshuman.pradhan@fmr.com) and Pramod R (pramod.r@fmr.com)

minor:
- Scikit-learn version dependency on 0.22.0 or greater which provides a bug fix for sklearn.cluster.KMeans

-------------------------------------------------------------------------------
December, 17, 2019 1.7.1
-------------------------------------------------------------------------------
minor:
- Bug fix for partial fitting in UCB1 reported in #10 by @harisankarh

-------------------------------------------------------------------------------
November, 27, 2019 1.7.0
-------------------------------------------------------------------------------
major:
- The learning_policy and neighborhood_policy attributes have been changed to decorated properties.
- MAB objects can now be serialized with the pickle module.

-------------------------------------------------------------------------------
November, 14, 2019 1.6.3
-------------------------------------------------------------------------------
minor:
- Documentation now available at https://fmr-llc.github.io/mabwiser/

-------------------------------------------------------------------------------
October, 21, 2019 1.6.2
-------------------------------------------------------------------------------
minor:
- Changed backend parameter to optional type

-------------------------------------------------------------------------------
August, 27, 2019 1.6.1
-------------------------------------------------------------------------------
minor:
- Configurable parallel backend

-------------------------------------------------------------------------------
Aug, 13, 2019 1.6.0
-------------------------------------------------------------------------------
major:
- Configurable empty neighborhood operation for Radius policy
- Empty neighborhood operation changed to use numpy.random.choice instead of numpy.random.randint. Observed predictions for empty neighborhoods may differ from versions 1.5 and prior.

-------------------------------------------------------------------------------
August, 12, 2019 1.5.10
-------------------------------------------------------------------------------
minor:
- Bug fix for offline expectation tracking in simulator

-------------------------------------------------------------------------------
July, 1, 2019 1.5.9
-------------------------------------------------------------------------------
minor:
- Bug fix for expectation tracking in simulator
- Additional unit tests for simulator expectations tracking

-------------------------------------------------------------------------------
June, 25, 2019 1.5.8
-------------------------------------------------------------------------------
minor:
- Bug fix for chunking in simulator
- Parallelization backend change

-------------------------------------------------------------------------------
June, 17, 2019 1.5.7
-------------------------------------------------------------------------------
minor:
- Bug fix for edge-case handling in simulator


-------------------------------------------------------------------------------
June, 13, 2019 1.5.6
-------------------------------------------------------------------------------
major:
- Initial release on GitHub.com

-------------------------------------------------------------------------------
June, 11, 2019 1.5.6
-------------------------------------------------------------------------------
major:
- license set to Apache 2.0

minor:
- bug fix in Simulator n_jobs handling

-------------------------------------------------------------------------------
May, 16, 2019 1.5.5
-------------------------------------------------------------------------------

minor:
- bug fix in Simulator distance calculation

-------------------------------------------------------------------------------
May, 14, 2019 1.5.4
-------------------------------------------------------------------------------

minor:
- bug fix in Simulator for bandit_to_arm_to_stats_neighborhoods and bandit_to_expectations

-------------------------------------------------------------------------------
April, 30, 2019 1.5.3
-------------------------------------------------------------------------------

minor:
- bug fix in ucb

-------------------------------------------------------------------------------
April, 24, 2019 1.5.2
-------------------------------------------------------------------------------

minor:
- Simulator performs parallel distance calculations
- Bug fix with plotting functionality
- Chunk size in Simulator dependent on number of jobs

-------------------------------------------------------------------------------
April, 19, 2019 1.5.1
-------------------------------------------------------------------------------

minor:
- Simulator save results with a prefix

-------------------------------------------------------------------------------
April, 17, 2019 1.5.0
-------------------------------------------------------------------------------

major:
- New Feature: Simulation utility
- Utility supports both online and offline simulations with historic data sets
- Nearest neighbors simulations share distance calculations and track size, descriptive statistics

minor:
- Parallelization bug fix

-------------------------------------------------------------------------------
April, 2, 2019 1.4.1
-------------------------------------------------------------------------------

minor:
- Additional unit tests to improve code coverage
- Unit test data changes to remove warnings
- Logic fix for Softmax edge case
- Improvements to MAB handling of series data
- LinUCB with scaler array type conversion

-------------------------------------------------------------------------------
March, 12, 2019 1.4.0
-------------------------------------------------------------------------------

major:
- New Feature: Built-in parallelization for both training and testing components
- BaseMAB automates the parallelization of each policy
- Policies to be added in the future can take advantage of built-in parallization as well
- Allow initialization with standard scaler for _Linear class constructor

minor:
- binarization bug fix
- parallelization tests

-------------------------------------------------------------------------------
February, 12, 2019 1.3.0
-------------------------------------------------------------------------------

major:
- simulator script is added for experimentation
- rollback neighborhood calculation to iterative
- no more scikit-learn dependency

minor:
- _convert_array() and _convert_matrix() for efficient numpy transformations

-------------------------------------------------------------------------------
February, 07, 2019 1.2.0
-------------------------------------------------------------------------------

major:
- speed-up in neighborhood calculation.
- This change requires scikit-learn>=0.20.0
- Big thanks to Nicholas Cilfone for this pull request!

minor:
- the change in neighborhood calculation allows combining _predict_operation for radius and knearest

-------------------------------------------------------------------------------
December, 26, 2018 1.1.0
-------------------------------------------------------------------------------

major:
- speed-ups in greedy, ucb, softmax, thompson, and contextual mab
- speed-up numpy _convert_context with row major C arrays

minor:
- numpy _convert function for decision & rewards
- api docstring _convert_context return type fixed
- typo fix in website rst contributing and installation
- replace k in dict.keys() with faster version k in dict
- remove arm_expectation = 0 from uptake_arms in softmax/thompson/ucb

-------------------------------------------------------------------------------
December, 17, 2018 1.0.0 
-------------------------------------------------------------------------------

- Initial public release.

-------------------------------------------------------------------------------
July, 7, 2018 0.1.0
-------------------------------------------------------------------------------

- Development starts. Unstable.
