Simple genetic algorithms library for reinforcement learning.
Project description
GeReL
GeReL is a simple library for genetic algorithms applied to reinforcement learning.
NOTE: GeReL is in development.
Example:
The following uses REINFORCE-ES to solve openai cartpole environment
from gerel.genome.factories import dense
from gerel.algorithms.RES.population import RESPopulation
from gerel.algorithms.RES.mutator import RESMutator
from gerel.model.model import Model
import gym
import numpy as np
from gerel.populations.genome_seeders import curry_genome_seeder
from string import Template
def compute_fitness(genome):
model = Model(genome)
env = gym.make("CartPole-v0")
state = env.reset()
fitness = 0
action_map = lambda a: 0 if a[0] <= 0 else 1 # noqa
for _ in range(1000):
action = model(state)
action = action_map(action)
state, reward, done, _ = env.step(action)
fitness += reward
if done:
break
return fitness
if __name__ == '__main__':
genome = dense(
input_size=4,
output_size=1,
layer_dims=[2, 2, 2]
)
weights_len = len(genome.edges) + len(genome.nodes)
init_mu = np.random.uniform(-1, 1, weights_len)
mutator = RESMutator(
initial_mu=init_mu,
std_dev=0.1,
alpha=0.05
)
seeder = curry_genome_seeder(
mutator=mutator,
seed_genomes=[genome]
)
population = RESPopulation(
population_size=50,
genome_seeder=seeder
)
report_temp = Template('generation: $generation, mean: $mean, best: $best')
for generation in range(100):
for genome in population.genomes:
genome.fitness = compute_fitness(genome.to_reduced_repr)
population.speciate()
data = population.to_dict()
mutator(population)
report = report_temp.substitute(
generation=generation,
mean=data['mean_fitness'],
best=data['best_fitness'])
print(report)
Tests:
To run all unittests:
nosetests
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
gerel-0.0.6.tar.gz
(21.5 kB
view details)
Built Distribution
gerel-0.0.6-py3-none-any.whl
(30.1 kB
view details)
File details
Details for the file gerel-0.0.6.tar.gz
.
File metadata
- Download URL: gerel-0.0.6.tar.gz
- Upload date:
- Size: 21.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.7.3 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.6.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
ca4e0dfb0f6f5a8540dd0a32dfd453d48c05bce615d652adceb56c13388844c8
|
|
MD5 |
668b31d9fdcd2985f1cde543ee0a47f4
|
|
BLAKE2b-256 |
fd8212ab5f69526520069eaf846147428e580d19bbb5b3b465ae58cfef685441
|
File details
Details for the file gerel-0.0.6-py3-none-any.whl
.
File metadata
- Download URL: gerel-0.0.6-py3-none-any.whl
- Upload date:
- Size: 30.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.7.3 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.6.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
077653606517c33f9ace5442416aeb125f280775f73ad53e14d275b2393db31a
|
|
MD5 |
c2930de350b3d9e44bb7d18f0b39dafd
|
|
BLAKE2b-256 |
c277c9426202a540f602a293e2832a66cd4596e2a2aca9ca9d16fe9f8a703b64
|