A flexible genetic algorithm library written in Python3.
Project description
OptivolutionPy
A flexible genetic algorithm library written purly in Python3.
Installation
For python3, simply run:
$ pip3 install OptivolutionPy
Or clone this repository and run python3 setup.py install from within the project directory. e.g.:
$ git clone https://github.com/Mhmd-Hisham/OptivolutionPy.git
$ cd OptivolutionPy
$ python3 setup.py install
Advanced Example
Smart Ants using OptivolutionPy & Processing3. check this repo for more details.
Simple example
Solving the one-dimensional knapsack problem:
#!/usr/bin/env python3
import random
from optivolution.population import Population
from optivolution.chromosome import Chromosome
class OneDimensinalKnapsack(Chromosome):
""" Inidividual knapsack object. """
maximum_weight = 15
knapsack_data = [{'name': 'box1', 'value': 4, 'weight': 12},
{'name': 'box2', 'value': 2, 'weight': 1},
{'name': 'box3', 'value': 10, 'weight': 4},
{'name': 'box4', 'value': 1, 'weight': 1},
{'name': 'box5', 'value': 2, 'weight': 2}]
def __init__(self, genes_length=len(knapsack_data), genes=[]):
super().__init__(genes_length, genes)
@Chromosome.fitness_property
def fitness(self):
""" Defining the fitness function. """
# Use the knapsack value as the fitness value
total_value = 0
total_weight = 0
for i in range(self.genes_length):
if (self.genes[i] == True):
total_value += self.knapsack_data[i]['value']
total_weight += self.knapsack_data[i]['weight']
if total_weight > self.maximum_weight:
total_value = 0
return total_value
def random_gene(self):
""" Defining the random gene. """
return random.choice((0, 1))
class KnapscakPopulation(Population):
tournament_sample_percentage = 10
def random_individual(self):
""" Defining the random individual in the population. """
return OneDimensinalKnapsack()
def main():
population = KnapscakPopulation(population_size=20)
population.run(20)
print(f"Generation {population.generation_number}")
best = population.get_best_individual()
# The optimal answer for this test case is
# (15, [0, 1, 1, 1, 1])
print((best.fitness, best.genes))
if __name__ == "__main__":
main()
Output:
(15, [0, 1, 1, 1, 1])
Meta
Mohamed Hisham – G-Mail | GitHub | LinkedIn
This project is licensed under the GNU GPLv3 License - check LICENSE for more details.
Project details
Release history Release notifications | RSS feed
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file OptivolutionPy-1.0.1.tar.gz.
File metadata
- Download URL: OptivolutionPy-1.0.1.tar.gz
- Upload date:
- Size: 4.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.1.0 requests-toolbelt/0.9.1 tqdm/4.34.0 CPython/3.6.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c24cbd7c38a665d55b4fb8b4094814be0e3947c09fe4a70b3dd6af2876c4ff2a
|
|
| MD5 |
773508a6250d56a06bad98a2017179a5
|
|
| BLAKE2b-256 |
98a29d8364cd3d442f1f715440f3c522697005994bba8dc4eabe2e2861ceef67
|
File details
Details for the file OptivolutionPy-1.0.1-py3-none-any.whl.
File metadata
- Download URL: OptivolutionPy-1.0.1-py3-none-any.whl
- Upload date:
- Size: 17.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.1.0 requests-toolbelt/0.9.1 tqdm/4.34.0 CPython/3.6.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
64f7da38edfd55b1f313552c7f2ce3c65789c6186b4ec500dba90bde51bbb72d
|
|
| MD5 |
4d24c88a36b015cc3e50a4efe6a51e55
|
|
| BLAKE2b-256 |
fe253b3c4f59bd1933b67af829eb72b153d58e60a290b6e1c68c0c0eadabc423
|