Skip to main content

Holland

Genetic Algorithm Library for Python

Computer programs that "evolve" in ways that resemble natural selection can solve complex problems even their creators do not fully understand

PyPI Build Coverage Documentation Status License: MIT

Description

Holland is a simple, flexible package for implementing the Genetic Algorithm in Python. The program is designed to act on an arbitrary evaluation function with arbitrary encoding of individuals within a population, both of which are provided by the user.

Installing

Holland is available via the Python Package Index (PyPI) and can be installed with:

pip install holland

Usage

Full Documentation

Hello World!

from holland import Evolver
from holland.library import get_uniform_crossover_function
from holland.utils import bound_value
import random


# Define a fitness function
def fitness_function(genome):
    message = genome["message"]
    target = "Hello World!"
    score = 0
    for i in range(len(message)):
        score += abs(ord(target[i]) - ord(message[i]))
    return score

def mutation_function(value):
    mutated_value = ord(value) * random.random() * 2
    return chr(bound_value(mutated_value, minimum=32, maximum=126, to_int=True))

# Define genome parameters for individuals
genome_params = {
    "message": {
        "type": "[str]",
        "size": len("Hello World!"),
        "initial_distribution": lambda: chr(random.randint(32, 126)),
        "crossover_function": get_uniform_crossover_function(),
        "mutation_function": mutation_function,
        "mutation_rate": 0.15
    }
}

# Define how to select individuals for reproduction
selection_strategy = {"pool": {"top": 10}}

# Run Evolution
evolver = Evolver(
    fitness_function,
    genome_params,
    selection_strategy,
    should_maximize_fitness=False
)
final_population = evolver.evolve(stop_conditions={"target_fitness": 0})

With sample run:

Generation: 0; Top Score: 201:     N~flx.JGcu-*

Generation: 1; Top Score: 98:       Xljlw);mj]f

Generation: 2; Top Score: 64:       =c}kk SmsYf

Generation: 3; Top Score: 37:       Kcjlk$Vms]f

Generation: 4; Top Score: 24:       Cdjkn Smshf

Generation: 5; Top Score: 16:       Idjln Vmshf

Generation: 6; Top Score: 14:       Idjln Voshf

Generation: 7; Top Score: 11:       Hdjln Vmslf

Generation: 8; Top Score: 9:         Hdjln Voslf

Generation: 9; Top Score: 8:         Hdjln Vosle

Generation: 10; Top Score: 7:       Hdmln Vosle

Generation: 11; Top Score: 6:       Hdlln Vosle

Generation: 12; Top Score: 5:       Hdllo Vosle

Generation: 13; Top Score: 4:       Hdllo Vosle!

Generation: 14; Top Score: 3:       Hello Vosle!

Generation: 15; Top Score: 2:       Hello Wosle!

Generation: 16; Top Score: 2:       Hello Wosle!

Generation: 17; Top Score: 1:       Hello Worle!

Generation: 18; Top Score: 1:       Hello Worle!

Generation: 19; Top Score: 1:       Hello Worle!

Generation: 20; Top Score: 0:       Hello World!

Best Genome:

{
    'message': ['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!']
}

Release files for holland 0.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for holland 0.0.2
File Size Uploaded
holland-0.0.2.tar.gz 32.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for holland 0.0.2
File Interpreter ABI Platform
holland-0.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 76.3 kB

Release files / holland-0.0.2.tar.gz

Download URL holland-0.0.2.tar.gz
Size 32.0 kB
Tags Source
SHA-256 checksum
How to use checksums
b043e4c11801cb6dd27795abe225ddf40bd378c761d663d63bfbc73e2f7d4942
BLAKE2b-256 checksum
How to use checksums
c52ac8e43a1b4a269857ad3b042c3ae71312c3a07cf775df71d5c77275b2277a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.7.0

Release files / holland-0.0.2-py3-none-any.whl

Download URL holland-0.0.2-py3-none-any.whl
Size 44.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5d162a58f247a403ac022e8a6098713d6787ee48cb56f9ce358075e2c46bfd63
BLAKE2b-256 checksum
How to use checksums
089b904dee2038b3cf7f1cef38e448ac48b736e944a3fa6c22f2f78252f9e959
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.7.0

Release history Release notifications | RSS feed

This release

0.0.2 This release

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page