{ "info": { "author": "Mohamed Hisham", "author_email": "Mohamed00Hisham@Gmail.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "\n# OptivolutionPy\nA flexible genetic algorithm library written purly in Python3.\n\n## Installation\n\nFor python3, simply run:\n```sh\n$ pip3 install OptivolutionPy\n\n```\n\nOr clone this repository and run python3 setup.py install from within the project directory. e.g.:\n```sh\n$ git clone https://github.com/Mhmd-Hisham/OptivolutionPy.git\n$ cd OptivolutionPy\n$ python3 setup.py install\n```\n\n## Advanced Example\n#### Smart Ants using OptivolutionPy & Processing3. check this [repo](https://github.com/Mhmd-Hisham/SmartAntsGA) for more details.\n\n![SmartAntsDemo](https://raw.githubusercontent.com/Mhmd-Hisham/SmartAntsGA/master/SmartAntsSmallDemo.gif)\n\n\n## Simple example\n### Solving the one-dimensional [knapsack problem](http://en.wikipedia.org/wiki/Knapsack_problem):\n\n```python3\n#!/usr/bin/env python3\n\nimport random\n\nfrom optivolution.population import Population\nfrom optivolution.chromosome import Chromosome\n\nclass OneDimensinalKnapsack(Chromosome):\n \"\"\" Inidividual knapsack object. \"\"\"\n maximum_weight = 15\n knapsack_data = [{'name': 'box1', 'value': 4, 'weight': 12},\n {'name': 'box2', 'value': 2, 'weight': 1},\n {'name': 'box3', 'value': 10, 'weight': 4},\n {'name': 'box4', 'value': 1, 'weight': 1},\n {'name': 'box5', 'value': 2, 'weight': 2}]\n\n def __init__(self, genes_length=len(knapsack_data), genes=[]):\n super().__init__(genes_length, genes)\n\n @Chromosome.fitness_property\n def fitness(self): \n \"\"\" Defining the fitness function. \"\"\"\n # Use the knapsack value as the fitness value\n total_value = 0\n total_weight = 0\n\n for i in range(self.genes_length):\n if (self.genes[i] == True):\n total_value += self.knapsack_data[i]['value']\n total_weight += self.knapsack_data[i]['weight']\n\n if total_weight > self.maximum_weight:\n total_value = 0\n\n return total_value\n\n def random_gene(self):\n \"\"\" Defining the random gene. \"\"\"\n return random.choice((0, 1))\n\nclass KnapscakPopulation(Population):\n tournament_sample_percentage = 10\n\n def random_individual(self):\n \"\"\" Defining the random individual in the population. \"\"\"\n return OneDimensinalKnapsack()\n\ndef main():\n population = KnapscakPopulation(population_size=20) \n population.run(20)\n\n print(f\"Generation {population.generation_number}\")\n best = population.get_best_individual()\n\n # The optimal answer for this test case is\n # (15, [0, 1, 1, 1, 1])\n print((best.fitness, best.genes))\n\nif __name__ == \"__main__\":\n main()\n```\n\nOutput:\n```\n(15, [0, 1, 1, 1, 1])\n```\n\n## Meta\n\nMohamed Hisham \u2013 [G-Mail](mailto:Mohamed00Hisham@Gmail.com) | [GitHub](https://github.com/Mhmd-Hisham) | [LinkedIn](https://www.linkedin.com/in/Mhmd-Hisham/)\n\n\nThis project is licensed under the GNU GPLv3 License - check [LICENSE](https://github.com/Mhmd-Hisham/OptivolutionPy/blob/master/LICENSE) for more details.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Mhmd-Hisham/OptivolutionPy", "keywords": "", "license": "GPL-3.0", "maintainer": "", "maintainer_email": "", "name": "OptivolutionPy", "package_url": "https://pypi.org/project/OptivolutionPy/", "platform": "", "project_url": "https://pypi.org/project/OptivolutionPy/", "project_urls": { "Homepage": "https://github.com/Mhmd-Hisham/OptivolutionPy" }, "release_url": "https://pypi.org/project/OptivolutionPy/1.0.1/", "requires_dist": null, "requires_python": "", "summary": "A flexible genetic algorithm library written in Python3.", "version": "1.0.1" }, "last_serial": 5699464, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "6c5d64a073473a5917ef873455fa4f4b", "sha256": "1e13708cfaa060d5939265cca925def80524c5e59dc645ebd0b3f8f058f7aec5" }, "downloads": -1, "filename": "OptivolutionPy-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "6c5d64a073473a5917ef873455fa4f4b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17565, "upload_time": "2019-08-19T15:26:52", "url": "https://files.pythonhosted.org/packages/4f/a8/f8d99b832723cda56bf77124e6720b8faf3f40fe7968552bb4c9a9ffe3d3/OptivolutionPy-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a0acc23828932164d43e0e07a287f425", "sha256": "e04dae13c7c1835b57613462154e2b0513735f37e0405f387c3c2f816bf58477" }, "downloads": -1, "filename": "OptivolutionPy-1.0.0.tar.gz", "has_sig": false, "md5_digest": "a0acc23828932164d43e0e07a287f425", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4350, "upload_time": "2019-08-19T15:26:55", "url": "https://files.pythonhosted.org/packages/b7/6c/d323bc81ea7f2f44f26ce18895bbb46ba9baf331f175ada0ab5eb36cfe8f/OptivolutionPy-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "4d24c88a36b015cc3e50a4efe6a51e55", "sha256": "64f7da38edfd55b1f313552c7f2ce3c65789c6186b4ec500dba90bde51bbb72d" }, "downloads": -1, "filename": "OptivolutionPy-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "4d24c88a36b015cc3e50a4efe6a51e55", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17592, "upload_time": "2019-08-19T17:09:03", "url": "https://files.pythonhosted.org/packages/fe/25/3b3c4f59bd1933b67af829eb72b153d58e60a290b6e1c68c0c0eadabc423/OptivolutionPy-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "773508a6250d56a06bad98a2017179a5", "sha256": "c24cbd7c38a665d55b4fb8b4094814be0e3947c09fe4a70b3dd6af2876c4ff2a" }, "downloads": -1, "filename": "OptivolutionPy-1.0.1.tar.gz", "has_sig": false, "md5_digest": "773508a6250d56a06bad98a2017179a5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4422, "upload_time": "2019-08-19T17:09:05", "url": "https://files.pythonhosted.org/packages/98/a2/9d8364cd3d442f1f715440f3c522697005994bba8dc4eabe2e2861ceef67/OptivolutionPy-1.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4d24c88a36b015cc3e50a4efe6a51e55", "sha256": "64f7da38edfd55b1f313552c7f2ce3c65789c6186b4ec500dba90bde51bbb72d" }, "downloads": -1, "filename": "OptivolutionPy-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "4d24c88a36b015cc3e50a4efe6a51e55", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17592, "upload_time": "2019-08-19T17:09:03", "url": "https://files.pythonhosted.org/packages/fe/25/3b3c4f59bd1933b67af829eb72b153d58e60a290b6e1c68c0c0eadabc423/OptivolutionPy-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "773508a6250d56a06bad98a2017179a5", "sha256": "c24cbd7c38a665d55b4fb8b4094814be0e3947c09fe4a70b3dd6af2876c4ff2a" }, "downloads": -1, "filename": "OptivolutionPy-1.0.1.tar.gz", "has_sig": false, "md5_digest": "773508a6250d56a06bad98a2017179a5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4422, "upload_time": "2019-08-19T17:09:05", "url": "https://files.pythonhosted.org/packages/98/a2/9d8364cd3d442f1f715440f3c522697005994bba8dc4eabe2e2861ceef67/OptivolutionPy-1.0.1.tar.gz" } ] }