Genetic algorithm library to generate fantasy sports lineups
Project description
fantasy-ga
fantasy-ga is a Python module and a command line tool that uses the genetic algorithm to automate the generation of fantasy sports lineups. Currently supported platforms and leagues are as follows.
NBA | NFL | MLB | NHL | |
---|---|---|---|---|
DraftKings | ✅ | ✅ | ✅ | ✅ |
Installation
Dependencies: numpy
pip install fantasy-ga
Usage
Python
LineupGenerator
class supports csv files exported from daily fantasy sports platforms for a given contest.
from fantasy_ga import LineupGenerator
from fantasy_ga.configs import Site, League, ModelConfig, ContestConfig
data_path = "examples/DraftKings/NBA/DKSalaries.csv"
export_path = "examples/DraftKings/NBA/export.csv"
cc = ContestConfig(Site.DK, League.NBA)
mc = ModelConfig(
# initial population of random lineups
n_pop = 1000
# number of evolutions to itererate breeding and mutation for
n_gen = 16
# number of children lineups to choose from two best lineups
n_breed = 30
# number of random mutations for each evolution
n_mutate = 30
# number of compound evolutions with additional random lineups
n_compound = 5
)
model = LineupGenerator(cc, mc)
model.read_csv(data_path)
model.fit()
# If top_n is not specified, it will save max(500, number of total lineups) lineups sorted by scores
model.export_csv(export_path, top_n=3)
lineups, scores = model.get_top_n_lineups(1)
print(
f"""
[Best Lineup]
Players: {[model.id_to_name[id] for id in lineups[0]]}
Salary Total: {sum([model.id_to_salary[id] for id in lineups[0]])}
Expected FPTS: {scores[0]}
"""
)
Using custom numpy.array
for player data
Alternatively, you can provide a numpy.array
where the first 3 columns correspond to player ID, salary, fantasy points (FPTS), followed by position information. For instance, the columns correspond to id,salary,fpts,PG,SG,SF,PF,C,G,F,UTIL
for DraftKings Fantasy Basketball.
If you would like to use custom numpy array for data matrix instead of csv files, you can do so by using the set_matrix()
method. For example
cc = ContestConfig(Site.DK, League.NBA)
mc = ModelConfig() # use default
m = np.array(
[
[0, 6600, 36.46503, 0, 0, 0, 1, 1, 0, 1, 1],
[1, 4200, 26.760368, 0, 0, 1, 1, 0, 0, 1, 1],
[2, 3000, 4.38538, 1, 1, 0, 0, 0, 1, 0, 1],
[3, 5000, 27.175564, 0, 0, 0, 0, 1, 0, 0, 1],
[4, 3400, 16.734577, 0, 1, 1, 0, 0, 1, 1, 1],
[5, 5900, 3.4382372, 0, 1, 1, 0, 0, 1, 1, 1],
[6, 3000, -0.18490964, 1, 1, 0, 0, 0, 1, 0, 1],
[7, 3000, 11.075589, 0, 0, 1, 1, 0, 0, 1, 1],
[8, 3000, 6.469783, 0, 0, 0, 0, 1, 0, 0, 1],
[9, 3000, 8.459954, 0, 0, 0, 0, 1, 0, 0, 1],
[10, 5700, 33.98281, 0, 0, 0, 1, 1, 0, 1, 1],
]
)
model = LineupGenerator(cc, mc)
model.set_matrix(m)
model.fit()
Running individual steps of the Genetic Algorithm
LineupGenerator
class has two core methods which return optimised lineups. breed()
method chooses the best two lineups according to the sum of fantasy points with valid positions and swap players randomly (creating children lineups). mutate()
method randomly swaps players where applicable. fit()
method wraps around those methods such that those operations are done for multiple generations with additional random lineups.
CLI
As a Python module
$ python -m fantasy_ga --data_path=examples/DraftKings/NBA/DKSalaries.csv --export_path=examples/DraftKings/NBA/lineups.csv --site=DraftKings --league=NBA --n_pop=100 --n_gen=5 --n_breed=100 --n_mutate=100 --n_compound=10 --top_n_lineups=3
or a CLI command
$ fantasy-ga --data_path=examples/DraftKings/NBA/DKSalaries.csv --export_path=examples/DraftKings/NBA/lineups.csv --site=DraftKings --league=NBA --n_pop=100 --n_gen=5 --n_breed=100 --n_mutate=100 --n_compound=10 --top_n_lineups=3
which generates
Saved top 3 lineups into "examples/DraftKings/NBA/lineups.csv".
[Best Lineup]
Players: ['Reggie Jackson', 'Max Strus', 'Anthony Edwards', "Royce O'Neale", 'Nikola Jokic', 'Dejounte Murray', 'John Collins', 'Jarrett Allen']
Salary Total: 50000
Expected FPTS: 268.13
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file fantasy-ga-0.4.3.tar.gz
.
File metadata
- Download URL: fantasy-ga-0.4.3.tar.gz
- Upload date:
- Size: 19.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f6809e015de6b46b1a398248b1467c34a8592ba950bf5419b3cfe4088a03085a |
|
MD5 | f701d6d93decac4613e6c7fe75cd6796 |
|
BLAKE2b-256 | a48573d7d317f8af4a6db69a4051f00f4f2c2cb55a11ca47e1db5c3eee04c463 |
File details
Details for the file fantasy_ga-0.4.3-py3-none-any.whl
.
File metadata
- Download URL: fantasy_ga-0.4.3-py3-none-any.whl
- Upload date:
- Size: 16.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a132aea23ad1aaffb7287a9ab523b1135a699f660ffb111c9e25d9613d512803 |
|
MD5 | 6b8dd8f2e6a3d9566f4ec00f49abd634 |
|
BLAKE2b-256 | 4f8c07f72a5ec71974da2ad78229c2b97d16e9cdadb7439290dbc8762e41562c |