evolib 0.2.0b3.dev2__tar.gz → 0.2.0b3.dev4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {evolib-0.2.0b3.dev2/evolib.egg-info → evolib-0.2.0b3.dev4}/PKG-INFO +5 -5
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/README.md +4 -4
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/docs/index.md +23 -2
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/envs/gym_wrapper.py +8 -1
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4/evolib.egg-info}/PKG-INFO +5 -5
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib.egg-info/SOURCES.txt +3 -3
- evolib-0.2.0b3.dev4/examples/08_gym/03_cartpole.py +44 -0
- evolib-0.2.0b3.dev4/examples/08_gym/04_lunar_lander.py +46 -0
- evolib-0.2.0b3.dev4/examples/08_gym/05_bipedal_walker.py +68 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/pyproject.toml +1 -1
- evolib-0.2.0b3.dev2/examples/08_gym/01_cartpole.py +0 -32
- evolib-0.2.0b3.dev2/examples/08_gym/02_lunar_lander.py +0 -40
- evolib-0.2.0b3.dev2/examples/08_gym/03_taxi.py +0 -85
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/LICENSE +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/MANIFEST.in +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/docs/api_core_individual.rst +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/docs/api_core_population.rst +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/docs/api_operators_crossover.rst +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/docs/api_operators_evonet_structural_mutation.rst +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/docs/api_operators_mutation.rst +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/docs/api_operators_replacement.rst +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/docs/api_operators_reproduction.rst +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/docs/api_operators_selection.rst +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/docs/api_operators_strategy.rst +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/docs/api_public_api.rst +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/docs/api_representation_evonet.rst +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/docs/api_representation_netvector.rst +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/docs/api_representation_vector.rst +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/docs/api_utils_benchmarks.rst +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/docs/api_utils_history_logger.rst +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/docs/api_utils_loss_functions.rst +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/docs/api_utils_plotting.rst +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/docs/conf.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/docs/config_guide.md +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/docs/config_parameter.md +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/docs/getting_started.md +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/PIL/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/annotated_types/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/asyncio/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/collections/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/concurrent/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/ctypes/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/cycler/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/email/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/evolib/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/evolib/config/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/evolib/registry/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/evolib/representation/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/html/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/importlib/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/jinja2/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/json/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/logging/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/markdown_it/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/markdown_it/common/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/markdown_it/helpers/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/markdown_it/presets/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/markdown_it/rules_block/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/markdown_it/rules_core/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/markdown_it/rules_inline/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/mdurl/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/numpy/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/os/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/packaging/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/pydantic/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/pydantic/_internal/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/pydantic/deprecated/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/pydantic/plugin/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/pydantic/v1/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/pydantic_core/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/rich/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/sys/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/typing_inspection/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/unittest/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/urllib/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/xml/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/yaml/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/zipfile/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/zoneinfo/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/api.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/config/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/config/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/config/base_component_config.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/config/component_registry.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/config/evonet_component_config.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/config/schema.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/config/vector_component_config.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/PIL/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/asyncio/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/collections/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/concurrent/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/ctypes/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/cycler/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/email/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/evolib/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/html/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/importlib/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/jinja2/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/json/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/logging/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/numpy/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/os/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/packaging/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/sys/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/unittest/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/urllib/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/xml/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/yaml/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/zipfile/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/.mypy_cache/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/README.md +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/individual.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/core/population.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/globals/README.md +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/globals/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/globals/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/globals/numeric.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/PIL/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/asyncio/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/collections/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/concurrent/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/ctypes/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/cycler/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/email/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/evolib/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/html/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/importlib/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/jinja2/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/json/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/logging/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/os/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/packaging/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/sys/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/unittest/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/urllib/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/xml/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/yaml/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/zipfile/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/.mypy_cache/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/evonet_initializers.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/net_initializers.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/registry.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/initializers/vector_initializers.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/interfaces/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/interfaces/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/interfaces/enum_helpers.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/interfaces/enums.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/interfaces/structs.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/interfaces/types.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/io/checkpoint.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/io/serialization.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/operators/README.md +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/operators/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/operators/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/operators/crossover.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/operators/evonet_structural_mutation.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/operators/mutation.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/operators/replacement.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/operators/reproduction.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/operators/selection.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/operators/strategy.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/registry/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/registry/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/registry/replacement_registry.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/registry/selection_registry.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/registry/strategy_registry.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/PIL/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/annotated_types/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/asyncio/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/collections/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/concurrent/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/ctypes/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/cycler/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/email/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/evolib/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/evolib/config/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/evolib/registry/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/evolib/representation/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/html/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/importlib/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/jinja2/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/json/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/logging/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/markdown_it/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/markdown_it/common/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/markdown_it/helpers/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/markdown_it/presets/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_block/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_core/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_inline/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/mdurl/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/numpy/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/os/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/packaging/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/pydantic/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/pydantic/_internal/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/pydantic/deprecated/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/pydantic/plugin/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/pydantic/v1/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/pydantic_core/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/rich/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/sys/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/typing_inspection/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/unittest/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/urllib/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/xml/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/yaml/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/zipfile/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/3.12/zoneinfo/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/.mypy_cache/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/_apply_config_mapping.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/base.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/composite.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/dummy.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/evo_params.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/evonet.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/netvector.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/representation/vector.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/utils/README.md +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/utils/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/utils/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/utils/benchmarks.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/utils/config_loader.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/utils/fitness.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/utils/history_logger.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/utils/loss_functions.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/utils/parallel.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/utils/plotting.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/utils/random.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/utils/registry.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib.egg-info/dependency_links.txt +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib.egg-info/requires.txt +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib.egg-info/top_level.txt +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/01_basic_usage/01_getting_started.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/01_basic_usage/02_mutation.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/01_basic_usage/03_population_mutation.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/01_basic_usage/04_fitness.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/02_strategies/01_step_by_step_evolution.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/02_strategies/02_mu_lambda_step.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/02_strategies/03_mu_lambda.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/02_strategies/04_flexible.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/03_comparisons/01_history.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/03_comparisons/02_plotting.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/03_comparisons/03_compare_runs.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/03_comparisons/04_exponential_decay_vs_static.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/03_comparisons/05_adaptive_global_vs_static.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/03_comparisons/06_adaptive_individual_vs_static.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/03_comparisons/07_selection_comparison.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/03_comparisons/08_selection_pressure.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/03_comparisons/09_selection_vs_mutation_pressure.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/03_comparisons/10_selection_stochastic_vs_deterministic.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/03_comparisons/11_crossover_comparison.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/04_function_approximation/01_polynomial_sine.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/04_function_approximation/02_sine_point_approximation.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/04_function_approximation/03_approximation_with_noise.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/05_advanced_topics/01_fitness_landscape_exploration.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/05_advanced_topics/02_rosenbrock_surface_path.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/05_advanced_topics/03_vector_control.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/05_advanced_topics/04_vector_control_with_obstacles.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/05_advanced_topics/05_piecewise_linear_xsys.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/05_advanced_topics/06_evolving_mutation_strength_as_a_module.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/06_netvector/01_netvector_sine_approximation.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/06_netvector/02_netvector_modulated_output.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/06_netvector/03_netvector_gain_and_bias.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/07_evonet/00_identity_test.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/07_evonet/01_sine_approximation.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/07_evonet/02_image_approximation.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/07_evonet/03_structural_xor.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/07_evonet/04_recurrent_bit_prediction.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/07_evonet/05_recurrent_timeseries.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/07_evonet/06_recurrent_indicator.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/07_evonet/06_recurrent_indicator_01.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/07_evonet/06_recurrent_indicator_02.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/07_evonet/06_recurrent_trading.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/07_evonet/07_recurrent_trading_01.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/08_gym/01_frozen_lake.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/examples/08_gym/02_cliff_walking.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/setup.cfg +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/tests/test_benchmarks.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/tests/test_config_loader.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/tests/test_elitism_preserves_best_fitness.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/tests/test_evonet_vector_io.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/tests/test_initializer_evonet.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/tests/test_initializer_net.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/tests/test_mutation.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/tests/test_population.py +0 -0
- {evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/tests/test_selection.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: evolib
|
|
3
|
-
Version: 0.2.0b3.
|
|
3
|
+
Version: 0.2.0b3.dev4
|
|
4
4
|
Summary: A modular framework for evolutionary strategies and neuroevolution.
|
|
5
5
|
Author-email: EvoLib <evolib@dismail.de>
|
|
6
6
|
License: MIT License
|
|
@@ -80,7 +80,7 @@ EvoLib is a lightweight and transparent framework for evolutionary computation,
|
|
|
80
80
|
- **Modularity**: mutation, selection, crossover, and parameter representations can be freely combined.
|
|
81
81
|
- **Educational value**: examples and a clean API make it practical for illustrating evolutionary concepts.
|
|
82
82
|
- **Neuroevolution support**: structural mutations (adding/removing neurons and connections) and evolvable networks via EvoNet.
|
|
83
|
-
- **Gymnasium integration**: run
|
|
83
|
+
- **Gymnasium integration**: run [Gymnasium](https://gymnasium.farama.org) benchmarks (e.g. CartPole, LunarLander) via a simple wrapper.
|
|
84
84
|
- **Parallel evaluation (optional)**: basic support for [Ray](https://www.ray.io/) to speed up fitness evaluations.
|
|
85
85
|
- **Type-checked**: PEP8 compliant, and consistent code style.
|
|
86
86
|
|
|
@@ -214,16 +214,16 @@ It can be applied to:
|
|
|
214
214
|
### Gymnasium Integration
|
|
215
215
|
|
|
216
216
|
EvoLib provides a lightweight wrapper for [Gymnasium](https://gymnasium.farama.org/) environments.
|
|
217
|
-
This allows you to evaluate evolutionary agents directly on well-known
|
|
217
|
+
This allows you to evaluate evolutionary agents directly on well-known benchmarks such as **CartPole**, **LunarLander**, or **Pendulum**.
|
|
218
218
|
|
|
219
219
|
- **Headless evaluation**: returns total episode reward as fitness.
|
|
220
220
|
- **Visualization**: render episodes and save them as GIFs.
|
|
221
221
|
- **Discrete & continuous action spaces** are both supported.
|
|
222
222
|
|
|
223
|
-
👉
|
|
223
|
+
👉 [Examples](https://github.com/EvoLib/evo-lib/tree/main/examples/08_gym)
|
|
224
224
|
|
|
225
225
|
```python
|
|
226
|
-
from
|
|
226
|
+
from evolib import GymEnv
|
|
227
227
|
|
|
228
228
|
env = GymEnv("CartPole-v1", max_steps=500)
|
|
229
229
|
fitness = env.evaluate(indiv) # run one episode
|
|
@@ -20,7 +20,7 @@ EvoLib is a lightweight and transparent framework for evolutionary computation,
|
|
|
20
20
|
- **Modularity**: mutation, selection, crossover, and parameter representations can be freely combined.
|
|
21
21
|
- **Educational value**: examples and a clean API make it practical for illustrating evolutionary concepts.
|
|
22
22
|
- **Neuroevolution support**: structural mutations (adding/removing neurons and connections) and evolvable networks via EvoNet.
|
|
23
|
-
- **Gymnasium integration**: run
|
|
23
|
+
- **Gymnasium integration**: run [Gymnasium](https://gymnasium.farama.org) benchmarks (e.g. CartPole, LunarLander) via a simple wrapper.
|
|
24
24
|
- **Parallel evaluation (optional)**: basic support for [Ray](https://www.ray.io/) to speed up fitness evaluations.
|
|
25
25
|
- **Type-checked**: PEP8 compliant, and consistent code style.
|
|
26
26
|
|
|
@@ -154,16 +154,16 @@ It can be applied to:
|
|
|
154
154
|
### Gymnasium Integration
|
|
155
155
|
|
|
156
156
|
EvoLib provides a lightweight wrapper for [Gymnasium](https://gymnasium.farama.org/) environments.
|
|
157
|
-
This allows you to evaluate evolutionary agents directly on well-known
|
|
157
|
+
This allows you to evaluate evolutionary agents directly on well-known benchmarks such as **CartPole**, **LunarLander**, or **Pendulum**.
|
|
158
158
|
|
|
159
159
|
- **Headless evaluation**: returns total episode reward as fitness.
|
|
160
160
|
- **Visualization**: render episodes and save them as GIFs.
|
|
161
161
|
- **Discrete & continuous action spaces** are both supported.
|
|
162
162
|
|
|
163
|
-
👉
|
|
163
|
+
👉 [Examples](https://github.com/EvoLib/evo-lib/tree/main/examples/08_gym)
|
|
164
164
|
|
|
165
165
|
```python
|
|
166
|
-
from
|
|
166
|
+
from evolib import GymEnv
|
|
167
167
|
|
|
168
168
|
env = GymEnv("CartPole-v1", max_steps=500)
|
|
169
169
|
fitness = env.evaluate(indiv) # run one episode
|
|
@@ -20,6 +20,7 @@ EvoLib is a lightweight and transparent framework for evolutionary computation,
|
|
|
20
20
|
- **Modularity**: mutation, selection, crossover, and parameter representations can be freely combined.
|
|
21
21
|
- **Educational value**: examples and a clean API make it practical for illustrating evolutionary concepts.
|
|
22
22
|
- **Neuroevolution support**: structural mutations (adding/removing neurons and connections) and evolvable networks via EvoNet.
|
|
23
|
+
- **Gymnasium integration**: run [Gymnasium](https://gymnasium.farama.org) benchmarks (e.g. CartPole, LunarLander) via a simple wrapper.
|
|
23
24
|
- **Parallel evaluation (optional)**: basic support for [Ray](https://www.ray.io/) to speed up fitness evaluations.
|
|
24
25
|
- **Type-checked**: PEP8 compliant, and consistent code style.
|
|
25
26
|
|
|
@@ -143,6 +144,27 @@ It can be applied to:
|
|
|
143
144
|
|
|
144
145
|
---
|
|
145
146
|
|
|
147
|
+
### Gymnasium Integration
|
|
148
|
+
|
|
149
|
+
EvoLib provides a lightweight wrapper for [Gymnasium](https://gymnasium.farama.org/) environments.
|
|
150
|
+
This allows you to evaluate evolutionary agents directly on well-known benchmarks such as **CartPole**, **LunarLander**, or **Pendulum**.
|
|
151
|
+
|
|
152
|
+
- **Headless evaluation**: returns total episode reward as fitness.
|
|
153
|
+
- **Visualization**: render episodes and save them as GIFs.
|
|
154
|
+
- **Discrete & continuous action spaces** are both supported.
|
|
155
|
+
|
|
156
|
+
👉 [Examples](https://github.com/EvoLib/evo-lib/tree/main/examples/08_gym)
|
|
157
|
+
|
|
158
|
+
```python
|
|
159
|
+
from evolib import GymEnv
|
|
160
|
+
|
|
161
|
+
env = GymEnv("CartPole-v1", max_steps=500)
|
|
162
|
+
fitness = env.evaluate(indiv) # run one episode
|
|
163
|
+
gif = env.visualize(indiv, gen=10) # render & save as GIF
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
146
168
|
## Preview: Pygame Integration
|
|
147
169
|
|
|
148
170
|
Early prototypes demonstrate how evolutionary algorithms can evolve both neural networks and sensor properties such as number, range, and orientation for agents in 2D worlds built with pygame. This illustrates how networks and sensors co-adapt to dynamic environments with collisions and feedback.
|
|
@@ -192,10 +214,9 @@ For deeper exploration, see the [full examples directory](examples/)
|
|
|
192
214
|
- [X] Neuroevolution
|
|
193
215
|
- [X] Topological Evolution (neurons, edges)
|
|
194
216
|
- [X] Ray Support for Parallel Evaluation (early prototypes)
|
|
217
|
+
- [X] OpenAI Gymnasium / Gym Wrapper
|
|
195
218
|
- [ ] Advanced Visualization
|
|
196
219
|
- [ ] Game Environment Integration (pygame, PettingZoo - early prototypes)
|
|
197
|
-
- [ ] Ray Support for Parallel Evaluation (early prototypes)
|
|
198
|
-
|
|
199
220
|
|
|
200
221
|
---
|
|
201
222
|
|
|
@@ -27,7 +27,12 @@ if TYPE_CHECKING:
|
|
|
27
27
|
class GymEnv:
|
|
28
28
|
"""Thin wrapper to run OpenAI Gymnasium environments with EvoLib Individuals."""
|
|
29
29
|
|
|
30
|
-
def __init__(
|
|
30
|
+
def __init__(
|
|
31
|
+
self,
|
|
32
|
+
env_name: str,
|
|
33
|
+
max_steps: int = 500,
|
|
34
|
+
**env_kwargs: Any,
|
|
35
|
+
):
|
|
31
36
|
"""
|
|
32
37
|
Initialize a Gym environment.
|
|
33
38
|
|
|
@@ -64,6 +69,7 @@ class GymEnv:
|
|
|
64
69
|
|
|
65
70
|
for _ in range(episodes):
|
|
66
71
|
obs, _ = self.env.reset()
|
|
72
|
+
|
|
67
73
|
ep_reward = 0.0
|
|
68
74
|
|
|
69
75
|
for _ in range(self.max_steps):
|
|
@@ -83,6 +89,7 @@ class GymEnv:
|
|
|
83
89
|
action = np.array(action, dtype=np.float32)
|
|
84
90
|
|
|
85
91
|
obs, reward, terminated, truncated, _ = self.env.step(action)
|
|
92
|
+
|
|
86
93
|
ep_reward += float(reward)
|
|
87
94
|
|
|
88
95
|
if terminated or truncated:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: evolib
|
|
3
|
-
Version: 0.2.0b3.
|
|
3
|
+
Version: 0.2.0b3.dev4
|
|
4
4
|
Summary: A modular framework for evolutionary strategies and neuroevolution.
|
|
5
5
|
Author-email: EvoLib <evolib@dismail.de>
|
|
6
6
|
License: MIT License
|
|
@@ -80,7 +80,7 @@ EvoLib is a lightweight and transparent framework for evolutionary computation,
|
|
|
80
80
|
- **Modularity**: mutation, selection, crossover, and parameter representations can be freely combined.
|
|
81
81
|
- **Educational value**: examples and a clean API make it practical for illustrating evolutionary concepts.
|
|
82
82
|
- **Neuroevolution support**: structural mutations (adding/removing neurons and connections) and evolvable networks via EvoNet.
|
|
83
|
-
- **Gymnasium integration**: run
|
|
83
|
+
- **Gymnasium integration**: run [Gymnasium](https://gymnasium.farama.org) benchmarks (e.g. CartPole, LunarLander) via a simple wrapper.
|
|
84
84
|
- **Parallel evaluation (optional)**: basic support for [Ray](https://www.ray.io/) to speed up fitness evaluations.
|
|
85
85
|
- **Type-checked**: PEP8 compliant, and consistent code style.
|
|
86
86
|
|
|
@@ -214,16 +214,16 @@ It can be applied to:
|
|
|
214
214
|
### Gymnasium Integration
|
|
215
215
|
|
|
216
216
|
EvoLib provides a lightweight wrapper for [Gymnasium](https://gymnasium.farama.org/) environments.
|
|
217
|
-
This allows you to evaluate evolutionary agents directly on well-known
|
|
217
|
+
This allows you to evaluate evolutionary agents directly on well-known benchmarks such as **CartPole**, **LunarLander**, or **Pendulum**.
|
|
218
218
|
|
|
219
219
|
- **Headless evaluation**: returns total episode reward as fitness.
|
|
220
220
|
- **Visualization**: render episodes and save them as GIFs.
|
|
221
221
|
- **Discrete & continuous action spaces** are both supported.
|
|
222
222
|
|
|
223
|
-
👉
|
|
223
|
+
👉 [Examples](https://github.com/EvoLib/evo-lib/tree/main/examples/08_gym)
|
|
224
224
|
|
|
225
225
|
```python
|
|
226
|
-
from
|
|
226
|
+
from evolib import GymEnv
|
|
227
227
|
|
|
228
228
|
env = GymEnv("CartPole-v1", max_steps=500)
|
|
229
229
|
fitness = env.evaluate(indiv) # run one episode
|
|
@@ -456,11 +456,11 @@ examples/07_evonet/06_recurrent_indicator_01.py
|
|
|
456
456
|
examples/07_evonet/06_recurrent_indicator_02.py
|
|
457
457
|
examples/07_evonet/06_recurrent_trading.py
|
|
458
458
|
examples/07_evonet/07_recurrent_trading_01.py
|
|
459
|
-
examples/08_gym/01_cartpole.py
|
|
460
459
|
examples/08_gym/01_frozen_lake.py
|
|
461
460
|
examples/08_gym/02_cliff_walking.py
|
|
462
|
-
examples/08_gym/
|
|
463
|
-
examples/08_gym/
|
|
461
|
+
examples/08_gym/03_cartpole.py
|
|
462
|
+
examples/08_gym/04_lunar_lander.py
|
|
463
|
+
examples/08_gym/05_bipedal_walker.py
|
|
464
464
|
tests/test_benchmarks.py
|
|
465
465
|
tests/test_config_loader.py
|
|
466
466
|
tests/test_elitism_preserves_best_fitness.py
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Example: Evolve a controller for the CartPole-v1 environment.
|
|
3
|
+
|
|
4
|
+
This example demonstrates how an evolutionary algorithm can evolve
|
|
5
|
+
a neural controller that balances the pole on a cart.
|
|
6
|
+
Each individual is evaluated in the CartPole-v1 environment and
|
|
7
|
+
the best individual of each generation is visualized as a GIF.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from evolib import GymEnv, Individual, Population, resume_or_create
|
|
11
|
+
|
|
12
|
+
CONFIG_FILE = "./configs/03_cartpole.yaml"
|
|
13
|
+
FRAME_FOLDER = "03_frames"
|
|
14
|
+
MAX_STEPS = 500
|
|
15
|
+
|
|
16
|
+
# init environment once (can be reused for all individuals)
|
|
17
|
+
cartpole_env = GymEnv("CartPole-v1", max_steps=MAX_STEPS)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def eval_fitness(indiv: Individual) -> None:
|
|
21
|
+
"""Evaluate one individual by running CartPole and assign fitness."""
|
|
22
|
+
fitness = cartpole_env.evaluate(indiv, module="brain")
|
|
23
|
+
indiv.fitness = -fitness
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def on_generation_end(pop: Population) -> None:
|
|
27
|
+
"""Save an animated GIF of the current best individual each generation."""
|
|
28
|
+
best = pop.best()
|
|
29
|
+
gif = cartpole_env.visualize(
|
|
30
|
+
best,
|
|
31
|
+
pop.generation_num,
|
|
32
|
+
filename=f"{FRAME_FOLDER}/gen_{pop.generation_num:03d}.gif",
|
|
33
|
+
)
|
|
34
|
+
print(f"Saved: {gif}")
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
if __name__ == "__main__":
|
|
38
|
+
pop = resume_or_create(
|
|
39
|
+
CONFIG_FILE,
|
|
40
|
+
fitness_function=eval_fitness,
|
|
41
|
+
run_name="03_cartpole",
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
pop.run(verbosity=1, on_generation_end=on_generation_end)
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Example: LunarLander with EvoLib
|
|
3
|
+
|
|
4
|
+
This script demonstrates how to evolve a neural network controller
|
|
5
|
+
for the classic **LunarLander-v3** Gymnasium environment.
|
|
6
|
+
Each individual’s network is evaluated by running a full episode
|
|
7
|
+
and using the negative cumulative reward as fitness (minimization).
|
|
8
|
+
At the end of selected generations, the best agent is visualized
|
|
9
|
+
and exported as an animated GIF for inspection.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from evolib import GymEnv, Individual, Population, resume_or_create
|
|
13
|
+
|
|
14
|
+
CONFIG_FILE = "./configs/04_lunarlander.yaml"
|
|
15
|
+
FRAME_FOLDER = "04_frames"
|
|
16
|
+
MAX_STEPS = 500
|
|
17
|
+
|
|
18
|
+
# init environment once (can be reused for all individuals)
|
|
19
|
+
gym_env = GymEnv("LunarLander-v3", max_steps=MAX_STEPS)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def eval_lunar_fitness(indiv: Individual) -> None:
|
|
23
|
+
"""Assign fitness to an individual by running one LunarLander episode."""
|
|
24
|
+
fitness = gym_env.evaluate(indiv, module="brain")
|
|
25
|
+
indiv.fitness = -fitness
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def on_generation_end(pop: Population) -> None:
|
|
29
|
+
"""Visualize the best individual every 20 generations (and at the end)."""
|
|
30
|
+
if pop.generation_num % 20 == 0 or pop.generation_num == pop.max_generations:
|
|
31
|
+
best = pop.best()
|
|
32
|
+
gif = gym_env.visualize(
|
|
33
|
+
best,
|
|
34
|
+
pop.generation_num,
|
|
35
|
+
filename=f"{FRAME_FOLDER}/gen_{pop.generation_num:03d}.gif",
|
|
36
|
+
)
|
|
37
|
+
print(f"Saved: {gif}")
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
if __name__ == "__main__":
|
|
41
|
+
pop = resume_or_create(
|
|
42
|
+
CONFIG_FILE,
|
|
43
|
+
fitness_function=eval_lunar_fitness,
|
|
44
|
+
run_name="04_lunarlander",
|
|
45
|
+
)
|
|
46
|
+
pop.run(verbosity=1, on_generation_end=on_generation_end)
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Example: BipedalWalker with EvoLib
|
|
3
|
+
|
|
4
|
+
This script demonstrates how to evolve a neural network controller
|
|
5
|
+
for the continuous-control **BipedalWalker-v3** Gymnasium environment.
|
|
6
|
+
The walker must learn to coordinate its legs and joints to move
|
|
7
|
+
forward without falling.
|
|
8
|
+
|
|
9
|
+
Key aspects:
|
|
10
|
+
* Continuous state (24-dimensional observation vector).
|
|
11
|
+
* Continuous action space (4 torques for hip and knee joints).
|
|
12
|
+
* Fitness: negative cumulative reward (minimization).
|
|
13
|
+
* Visualization: renders the best walker every 10 generations.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from evolib import Population, Individual, resume_or_create, GymEnv, save_checkpoint
|
|
17
|
+
|
|
18
|
+
CONFIG_FILE = "./configs/05_bipedal_walker.yaml"
|
|
19
|
+
FRAME_FOLDER = "05_frames"
|
|
20
|
+
RUN_NAME = "05_BipedalWalker"
|
|
21
|
+
MAX_STEPS = 1600 # typical for BipedalWalker is 1600
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# init environment once (can be reused for all individuals)
|
|
25
|
+
gym_env = GymEnv("BipedalWalker-v3", max_steps=MAX_STEPS)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def eval_walker_fitness(indiv: Individual) -> None:
|
|
29
|
+
"""Run a single episode in a fresh environment to avoid Box2D race conditions."""
|
|
30
|
+
#local_env = GymEnv("BipedalWalker-v3", max_steps=MAX_STEPS)
|
|
31
|
+
reward = gym_env.evaluate(indiv, module="brain", episodes=1)
|
|
32
|
+
#print(f"Reward: {reward}")
|
|
33
|
+
indiv.fitness = -reward
|
|
34
|
+
|
|
35
|
+
def checkpoint(pop: Population) -> None:
|
|
36
|
+
save_checkpoint(pop, run_name=RUN_NAME)
|
|
37
|
+
|
|
38
|
+
def on_generation_end(pop: Population) -> None:
|
|
39
|
+
"""Visualize the best individual every 10 generations (and at the end)."""
|
|
40
|
+
|
|
41
|
+
#checkpoint(pop)
|
|
42
|
+
|
|
43
|
+
best = pop.best()
|
|
44
|
+
print(best.para["brain"].evo_params.mutation_strength)
|
|
45
|
+
|
|
46
|
+
# if pop.generation_num % 10 == 0 or pop.generation_num == pop.max_generations:
|
|
47
|
+
best = pop.best()
|
|
48
|
+
gif = gym_env.visualize(
|
|
49
|
+
best,
|
|
50
|
+
pop.generation_num,
|
|
51
|
+
filename=f"{FRAME_FOLDER}/gen_{pop.generation_num:03d}.gif",
|
|
52
|
+
)
|
|
53
|
+
print(f"Saved: {gif}")
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
if __name__ == "__main__":
|
|
57
|
+
pop = resume_or_create(
|
|
58
|
+
CONFIG_FILE,
|
|
59
|
+
fitness_function=eval_walker_fitness,
|
|
60
|
+
run_name=RUN_NAME,
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
if pop.generation_num >= 50:
|
|
64
|
+
print("*** Generation >= 50 --> setting mutation_probability to 0.4 ***")
|
|
65
|
+
for indiv in pop.indivs:
|
|
66
|
+
indiv.para["brain"].evo_params.mutation_probability = 0.4
|
|
67
|
+
|
|
68
|
+
pop.run(verbosity=1, on_generation_end=on_generation_end)
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "evolib"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.0b3dev4"
|
|
8
8
|
description = "A modular framework for evolutionary strategies and neuroevolution."
|
|
9
9
|
authors = [
|
|
10
10
|
{ name = "EvoLib", email = "evolib@dismail.de" }
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import numpy as np
|
|
2
|
-
from evolib import Population, Individual, resume_or_create, GymEnv
|
|
3
|
-
|
|
4
|
-
CONFIG_FILE = "./configs/01_cartpole.yaml"
|
|
5
|
-
FRAME_FOLDER = "01_frames"
|
|
6
|
-
MAX_STEPS = 500
|
|
7
|
-
|
|
8
|
-
# init environment once (can be reused for all individuals)
|
|
9
|
-
cartpole_env = GymEnv("CartPole-v1", max_steps=MAX_STEPS)
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
def eval_fitness(indiv: Individual) -> None:
|
|
13
|
-
"""Assign fitness to an individual by running one CartPole episode."""
|
|
14
|
-
fitness = cartpole_env.evaluate(indiv, module="brain")
|
|
15
|
-
indiv.fitness = -fitness
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
def on_generation_end(pop: Population) -> None:
|
|
19
|
-
best = pop.best()
|
|
20
|
-
gif = cartpole_env.visualize(best, pop.generation_num,
|
|
21
|
-
filename=f"{FRAME_FOLDER}/gen_{pop.generation_num:03d}.gif")
|
|
22
|
-
print(f"Saved: {gif}")
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
if __name__ == "__main__":
|
|
26
|
-
pop = resume_or_create(
|
|
27
|
-
CONFIG_FILE,
|
|
28
|
-
fitness_function=eval_fitness,
|
|
29
|
-
run_name="08_cartpole",
|
|
30
|
-
)
|
|
31
|
-
|
|
32
|
-
pop.run(verbosity=1, on_generation_end=on_generation_end)
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import numpy as np
|
|
2
|
-
from evolib import Population, Individual, resume_or_create
|
|
3
|
-
from evolib.envs.gym_wrapper import GymEnvWrapper
|
|
4
|
-
|
|
5
|
-
CONFIG_FILE = "./configs/02_lunarlander.yaml"
|
|
6
|
-
MAX_STEPS = 500
|
|
7
|
-
|
|
8
|
-
# init environment once (can be reused for all individuals)
|
|
9
|
-
lunar_env = GymEnvWrapper("LunarLander-v3", max_steps=MAX_STEPS)
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
def eval_lunar_fitness(indiv: Individual) -> None:
|
|
13
|
-
"""Assign fitness to an individual by running one LunarLander episode."""
|
|
14
|
-
fitness = lunar_env.evaluate(indiv, module="brain")
|
|
15
|
-
indiv.fitness = -fitness
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
def on_generation_end(pop: Population) -> None:
|
|
19
|
-
if pop.generation_num % 20 == 0 or pop.generation_num == pop.max_generations:
|
|
20
|
-
best = pop.best()
|
|
21
|
-
gif = cartpole_env.visualize(best, pop.generation_num,
|
|
22
|
-
filename=f"{FRAME_FOLDER}/gen_{pop.generation_num:03d}.gif")
|
|
23
|
-
print(f"Saved: {gif}")
|
|
24
|
-
|
|
25
|
-
if __name__ == "__main__":
|
|
26
|
-
pop = resume_or_create(
|
|
27
|
-
CONFIG_FILE,
|
|
28
|
-
fitness_function=eval_lunar_fitness,
|
|
29
|
-
run_name="02_lunarlander",
|
|
30
|
-
)
|
|
31
|
-
|
|
32
|
-
for gen in range(pop.max_generations):
|
|
33
|
-
pop.run_one_generation()
|
|
34
|
-
|
|
35
|
-
# alle 20 Generationen besten Agenten visualisieren
|
|
36
|
-
if gen % 10 == 0:
|
|
37
|
-
best = pop.best()
|
|
38
|
-
#print(best.print_status())
|
|
39
|
-
gif = lunar_env.visualize(best, gen)
|
|
40
|
-
print(f"Saved: {gif}")
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
"""
|
|
3
|
-
import numpy as np
|
|
4
|
-
from evolib import GymEnv, Individual, Population, resume_or_create
|
|
5
|
-
|
|
6
|
-
CONFIG_FILE = "./configs/03_taxi.yaml"
|
|
7
|
-
FRAME_FOLDER = "03_frames"
|
|
8
|
-
MAX_STEPS = 150
|
|
9
|
-
|
|
10
|
-
# init environment once (can be reused for all individuals)
|
|
11
|
-
gym_env = GymEnv("Taxi-v3", max_steps=MAX_STEPS)
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def eval_fitness(indiv: Individual, episodes: int = 5) -> None:
|
|
15
|
-
"""
|
|
16
|
-
Evaluate an individual in the Taxi-v3 environment with reward shaping,
|
|
17
|
-
averaged across multiple episodes.
|
|
18
|
-
"""
|
|
19
|
-
taxi_env = gym_env.env.unwrapped
|
|
20
|
-
total_reward = 0.0
|
|
21
|
-
|
|
22
|
-
for _ in range(episodes):
|
|
23
|
-
obs, _ = gym_env.env.reset()
|
|
24
|
-
ep_reward = 0.0
|
|
25
|
-
|
|
26
|
-
for _ in range(gym_env.max_steps):
|
|
27
|
-
# --- Choose action from network ---
|
|
28
|
-
action_vec = indiv.para["brain"].net.calc([float(obs)])
|
|
29
|
-
action = int(np.argmax(action_vec))
|
|
30
|
-
|
|
31
|
-
# --- Decode current state ---
|
|
32
|
-
old_taxi_row, old_taxi_col, pass_loc, dest_idx = taxi_env.decode(obs)
|
|
33
|
-
|
|
34
|
-
# Target = passenger before pickup, else destination
|
|
35
|
-
if pass_loc != 4:
|
|
36
|
-
target_row, target_col = taxi_env.locs[pass_loc]
|
|
37
|
-
else:
|
|
38
|
-
target_row, target_col = taxi_env.locs[dest_idx]
|
|
39
|
-
old_dist = abs(old_taxi_row - target_row) + abs(old_taxi_col - target_col)
|
|
40
|
-
|
|
41
|
-
# --- Step ---
|
|
42
|
-
obs, reward, terminated, truncated, _ = gym_env.env.step(action)
|
|
43
|
-
ep_reward += reward
|
|
44
|
-
|
|
45
|
-
# --- Shaping ---
|
|
46
|
-
if reward == -10:
|
|
47
|
-
ep_reward -= 5.0
|
|
48
|
-
|
|
49
|
-
new_taxi_row, new_taxi_col, pass_loc, dest_idx = taxi_env.decode(obs)
|
|
50
|
-
if pass_loc != 4:
|
|
51
|
-
target_row, target_col = taxi_env.locs[pass_loc]
|
|
52
|
-
else:
|
|
53
|
-
target_row, target_col = taxi_env.locs[dest_idx]
|
|
54
|
-
new_dist = abs(new_taxi_row - target_row) + abs(new_taxi_col - target_col)
|
|
55
|
-
|
|
56
|
-
ep_reward += (old_dist - new_dist) * 0.2
|
|
57
|
-
|
|
58
|
-
if terminated or truncated:
|
|
59
|
-
break
|
|
60
|
-
|
|
61
|
-
total_reward += ep_reward
|
|
62
|
-
|
|
63
|
-
# Average fitness across episodes
|
|
64
|
-
indiv.fitness = -total_reward / episodes
|
|
65
|
-
|
|
66
|
-
def on_generation_end(pop: Population) -> None:
|
|
67
|
-
"""Visualize the best individual of the current generation as a GIF."""
|
|
68
|
-
|
|
69
|
-
best = pop.best()
|
|
70
|
-
gif = gym_env.visualize(
|
|
71
|
-
best,
|
|
72
|
-
pop.generation_num,
|
|
73
|
-
filename=f"{FRAME_FOLDER}/gen_{pop.generation_num:03d}.gif",
|
|
74
|
-
)
|
|
75
|
-
print(f"Saved: {gif}")
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
if __name__ == "__main__":
|
|
79
|
-
pop = resume_or_create(
|
|
80
|
-
CONFIG_FILE,
|
|
81
|
-
fitness_function=eval_fitness,
|
|
82
|
-
run_name="Taxi-v3",
|
|
83
|
-
)
|
|
84
|
-
|
|
85
|
-
pop.run(verbosity=1, on_generation_end=on_generation_end)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/docs/api_operators_evonet_structural_mutation.rst
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/annotated_types/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/concurrent/futures/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/evolib/config/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/evolib/globals/__init__.py
RENAMED
|
File without changes
|
{evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/evolib/initializers/__init__.py
RENAMED
|
File without changes
|
{evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/evolib/interfaces/__init__.py
RENAMED
|
File without changes
|
{evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/evolib/operators/__init__.py
RENAMED
|
File without changes
|
{evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/evolib/registry/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/evolib/utils/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{evolib-0.2.0b3.dev2 → evolib-0.2.0b3.dev4}/evolib/.mypy_cache/3.12/importlib/metadata/__init__.py
RENAMED
|
File without changes
|