evolib 0.2.0b3.dev1__tar.gz → 0.2.0b3.dev2__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.dev1/evolib.egg-info → evolib-0.2.0b3.dev2}/PKG-INFO +25 -2
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/README.md +23 -1
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/api.py +2 -0
- evolib-0.2.0b3.dev2/evolib/envs/gym_wrapper.py +159 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2/evolib.egg-info}/PKG-INFO +25 -2
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib.egg-info/SOURCES.txt +5 -2
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib.egg-info/requires.txt +1 -0
- evolib-0.2.0b3.dev2/examples/08_gym/01_cartpole.py +32 -0
- evolib-0.2.0b3.dev2/examples/08_gym/01_frozen_lake.py +52 -0
- evolib-0.2.0b3.dev2/examples/08_gym/02_cliff_walking.py +51 -0
- {evolib-0.2.0b3.dev1/examples/08_envs → evolib-0.2.0b3.dev2/examples/08_gym}/02_lunar_lander.py +8 -0
- evolib-0.2.0b3.dev2/examples/08_gym/03_taxi.py +85 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/pyproject.toml +3 -2
- evolib-0.2.0b3.dev1/evolib/envs/gym_wrapper.py +0 -98
- evolib-0.2.0b3.dev1/examples/08_envs/01_cartpole.py +0 -34
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/LICENSE +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/MANIFEST.in +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_core_individual.rst +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_core_population.rst +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_operators_crossover.rst +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_operators_evonet_structural_mutation.rst +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_operators_mutation.rst +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_operators_replacement.rst +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_operators_reproduction.rst +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_operators_selection.rst +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_operators_strategy.rst +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_public_api.rst +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_representation_evonet.rst +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_representation_netvector.rst +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_representation_vector.rst +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_utils_benchmarks.rst +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_utils_history_logger.rst +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_utils_loss_functions.rst +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_utils_plotting.rst +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/conf.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/config_guide.md +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/config_parameter.md +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/getting_started.md +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/index.md +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/PIL/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/annotated_types/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/asyncio/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/collections/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/concurrent/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/ctypes/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/cycler/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/email/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/config/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/registry/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/representation/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/html/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/importlib/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/jinja2/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/json/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/logging/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/common/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/helpers/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/presets/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/rules_block/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/rules_core/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/rules_inline/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/mdurl/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/os/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/packaging/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pydantic/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pydantic/_internal/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pydantic/deprecated/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pydantic/plugin/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pydantic/v1/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pydantic_core/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/rich/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/sys/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/typing_inspection/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/unittest/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/urllib/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/xml/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/yaml/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/zipfile/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/zoneinfo/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/config/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/config/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/config/base_component_config.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/config/component_registry.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/config/evonet_component_config.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/config/schema.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/config/vector_component_config.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/PIL/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/asyncio/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/collections/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/concurrent/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/ctypes/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/cycler/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/email/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/evolib/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/html/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/importlib/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/jinja2/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/json/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/logging/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/os/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/packaging/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/sys/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/unittest/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/urllib/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/xml/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/yaml/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/zipfile/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/README.md +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/individual.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/population.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/globals/README.md +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/globals/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/globals/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/globals/numeric.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/PIL/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/asyncio/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/collections/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/concurrent/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/ctypes/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/cycler/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/email/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/html/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/importlib/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/jinja2/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/json/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/logging/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/os/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/packaging/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/sys/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/unittest/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/urllib/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/xml/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/yaml/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/zipfile/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/evonet_initializers.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/net_initializers.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/registry.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/vector_initializers.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/interfaces/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/interfaces/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/interfaces/enum_helpers.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/interfaces/enums.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/interfaces/structs.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/interfaces/types.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/io/checkpoint.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/io/serialization.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/operators/README.md +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/operators/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/operators/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/operators/crossover.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/operators/evonet_structural_mutation.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/operators/mutation.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/operators/replacement.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/operators/reproduction.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/operators/selection.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/operators/strategy.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/registry/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/registry/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/registry/replacement_registry.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/registry/selection_registry.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/registry/strategy_registry.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/PIL/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/annotated_types/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/asyncio/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/collections/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/concurrent/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/ctypes/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/cycler/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/email/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/config/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/registry/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/representation/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/html/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/importlib/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/jinja2/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/json/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/logging/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/common/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/helpers/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/presets/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_block/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_core/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_inline/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/mdurl/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/os/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/packaging/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pydantic/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pydantic/_internal/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pydantic/deprecated/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pydantic/plugin/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pydantic/v1/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pydantic_core/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/rich/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/sys/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/typing_inspection/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/unittest/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/urllib/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/xml/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/yaml/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/zipfile/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/zoneinfo/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/_apply_config_mapping.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/base.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/composite.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/dummy.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/evo_params.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/evonet.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/netvector.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/vector.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/utils/README.md +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/utils/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/utils/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/utils/benchmarks.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/utils/config_loader.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/utils/fitness.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/utils/history_logger.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/utils/loss_functions.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/utils/parallel.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/utils/plotting.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/utils/random.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/utils/registry.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib.egg-info/dependency_links.txt +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib.egg-info/top_level.txt +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/01_basic_usage/01_getting_started.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/01_basic_usage/02_mutation.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/01_basic_usage/03_population_mutation.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/01_basic_usage/04_fitness.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/02_strategies/01_step_by_step_evolution.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/02_strategies/02_mu_lambda_step.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/02_strategies/03_mu_lambda.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/02_strategies/04_flexible.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/03_comparisons/01_history.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/03_comparisons/02_plotting.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/03_comparisons/03_compare_runs.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/03_comparisons/04_exponential_decay_vs_static.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/03_comparisons/05_adaptive_global_vs_static.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/03_comparisons/06_adaptive_individual_vs_static.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/03_comparisons/07_selection_comparison.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/03_comparisons/08_selection_pressure.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/03_comparisons/09_selection_vs_mutation_pressure.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/03_comparisons/10_selection_stochastic_vs_deterministic.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/03_comparisons/11_crossover_comparison.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/04_function_approximation/01_polynomial_sine.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/04_function_approximation/02_sine_point_approximation.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/04_function_approximation/03_approximation_with_noise.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/05_advanced_topics/01_fitness_landscape_exploration.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/05_advanced_topics/02_rosenbrock_surface_path.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/05_advanced_topics/03_vector_control.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/05_advanced_topics/04_vector_control_with_obstacles.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/05_advanced_topics/05_piecewise_linear_xsys.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/05_advanced_topics/06_evolving_mutation_strength_as_a_module.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/06_netvector/01_netvector_sine_approximation.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/06_netvector/02_netvector_modulated_output.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/06_netvector/03_netvector_gain_and_bias.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/07_evonet/00_identity_test.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/07_evonet/01_sine_approximation.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/07_evonet/02_image_approximation.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/07_evonet/03_structural_xor.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/07_evonet/04_recurrent_bit_prediction.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/07_evonet/05_recurrent_timeseries.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/07_evonet/06_recurrent_indicator.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/07_evonet/06_recurrent_indicator_01.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/07_evonet/06_recurrent_indicator_02.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/07_evonet/06_recurrent_trading.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/07_evonet/07_recurrent_trading_01.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/setup.cfg +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/tests/test_benchmarks.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/tests/test_config_loader.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/tests/test_elitism_preserves_best_fitness.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/tests/test_evonet_vector_io.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/tests/test_initializer_evonet.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/tests/test_initializer_net.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/tests/test_mutation.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/tests/test_population.py +0 -0
- {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/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.dev2
|
|
4
4
|
Summary: A modular framework for evolutionary strategies and neuroevolution.
|
|
5
5
|
Author-email: EvoLib <evolib@dismail.de>
|
|
6
6
|
License: MIT License
|
|
@@ -48,6 +48,7 @@ Requires-Dist: types-PyYAML; extra == "dev"
|
|
|
48
48
|
Requires-Dist: ray; extra == "dev"
|
|
49
49
|
Requires-Dist: gymnasium; extra == "dev"
|
|
50
50
|
Requires-Dist: imageio; extra == "dev"
|
|
51
|
+
Requires-Dist: Box2D; extra == "dev"
|
|
51
52
|
Provides-Extra: docs
|
|
52
53
|
Requires-Dist: sphinx; extra == "docs"
|
|
53
54
|
Requires-Dist: sphinx-rtd-theme; extra == "docs"
|
|
@@ -79,6 +80,7 @@ EvoLib is a lightweight and transparent framework for evolutionary computation,
|
|
|
79
80
|
- **Modularity**: mutation, selection, crossover, and parameter representations can be freely combined.
|
|
80
81
|
- **Educational value**: examples and a clean API make it practical for illustrating evolutionary concepts.
|
|
81
82
|
- **Neuroevolution support**: structural mutations (adding/removing neurons and connections) and evolvable networks via EvoNet.
|
|
83
|
+
- **Gymnasium integration**: run standard RL benchmarks (e.g. CartPole, LunarLander) via a simple wrapper.
|
|
82
84
|
- **Parallel evaluation (optional)**: basic support for [Ray](https://www.ray.io/) to speed up fitness evaluations.
|
|
83
85
|
- **Type-checked**: PEP8 compliant, and consistent code style.
|
|
84
86
|
|
|
@@ -209,6 +211,27 @@ It can be applied to:
|
|
|
209
211
|
|
|
210
212
|
---
|
|
211
213
|
|
|
214
|
+
### Gymnasium Integration
|
|
215
|
+
|
|
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 RL benchmarks such as **CartPole**, **LunarLander**, or **Pendulum**.
|
|
218
|
+
|
|
219
|
+
- **Headless evaluation**: returns total episode reward as fitness.
|
|
220
|
+
- **Visualization**: render episodes and save them as GIFs.
|
|
221
|
+
- **Discrete & continuous action spaces** are both supported.
|
|
222
|
+
|
|
223
|
+
👉 Example: [`examples/01_cartpole.py`](examples/01_cartpole.py)
|
|
224
|
+
|
|
225
|
+
```python
|
|
226
|
+
from evolibs.gym_wrapper import GymEnv
|
|
227
|
+
|
|
228
|
+
env = GymEnv("CartPole-v1", max_steps=500)
|
|
229
|
+
fitness = env.evaluate(indiv) # run one episode
|
|
230
|
+
gif = env.visualize(indiv, gen=10) # render & save as GIF
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
212
235
|
## Preview: Pygame Integration
|
|
213
236
|
|
|
214
237
|
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.
|
|
@@ -256,7 +279,7 @@ For deeper exploration, see the [full examples directory](examples/)
|
|
|
256
279
|
- [X] Neuroevolution
|
|
257
280
|
- [X] Topological Evolution (neurons, edges)
|
|
258
281
|
- [X] Ray Support for Parallel Evaluation (early prototypes)
|
|
259
|
-
- [
|
|
282
|
+
- [X] OpenAI Gymnasium / Gym Wrapper
|
|
260
283
|
- [ ] Advanced Visualization
|
|
261
284
|
- [ ] Game Environment Integration (pygame, PettingZoo - early prototypes)
|
|
262
285
|
|
|
@@ -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 standard RL 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
|
|
|
@@ -150,6 +151,27 @@ It can be applied to:
|
|
|
150
151
|
|
|
151
152
|
---
|
|
152
153
|
|
|
154
|
+
### Gymnasium Integration
|
|
155
|
+
|
|
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 RL benchmarks such as **CartPole**, **LunarLander**, or **Pendulum**.
|
|
158
|
+
|
|
159
|
+
- **Headless evaluation**: returns total episode reward as fitness.
|
|
160
|
+
- **Visualization**: render episodes and save them as GIFs.
|
|
161
|
+
- **Discrete & continuous action spaces** are both supported.
|
|
162
|
+
|
|
163
|
+
👉 Example: [`examples/01_cartpole.py`](examples/01_cartpole.py)
|
|
164
|
+
|
|
165
|
+
```python
|
|
166
|
+
from evolibs.gym_wrapper import GymEnv
|
|
167
|
+
|
|
168
|
+
env = GymEnv("CartPole-v1", max_steps=500)
|
|
169
|
+
fitness = env.evaluate(indiv) # run one episode
|
|
170
|
+
gif = env.visualize(indiv, gen=10) # render & save as GIF
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
153
175
|
## Preview: Pygame Integration
|
|
154
176
|
|
|
155
177
|
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.
|
|
@@ -197,7 +219,7 @@ For deeper exploration, see the [full examples directory](examples/)
|
|
|
197
219
|
- [X] Neuroevolution
|
|
198
220
|
- [X] Topological Evolution (neurons, edges)
|
|
199
221
|
- [X] Ray Support for Parallel Evaluation (early prototypes)
|
|
200
|
-
- [
|
|
222
|
+
- [X] OpenAI Gymnasium / Gym Wrapper
|
|
201
223
|
- [ ] Advanced Visualization
|
|
202
224
|
- [ ] Game Environment Integration (pygame, PettingZoo - early prototypes)
|
|
203
225
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from evolib.core.individual import Indiv as Individual
|
|
2
2
|
from evolib.core.population import Pop as Population
|
|
3
|
+
from evolib.envs.gym_wrapper import GymEnv
|
|
3
4
|
from evolib.interfaces.types import FitnessFunction
|
|
4
5
|
from evolib.io.checkpoint import (
|
|
5
6
|
load_best_indiv,
|
|
@@ -100,6 +101,7 @@ __all__ = [
|
|
|
100
101
|
"load_best_indiv",
|
|
101
102
|
"resume_or_create",
|
|
102
103
|
"FitnessFunction",
|
|
104
|
+
"GymEnv",
|
|
103
105
|
]
|
|
104
106
|
|
|
105
107
|
Pop = Population
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from typing import TYPE_CHECKING, Any, Union, cast
|
|
5
|
+
|
|
6
|
+
try:
|
|
7
|
+
import gymnasium as gym
|
|
8
|
+
except ImportError as e:
|
|
9
|
+
raise ImportError(
|
|
10
|
+
"Gymnasium is required for GymEnv. Please install with `pip install gymnasium`."
|
|
11
|
+
) from e
|
|
12
|
+
|
|
13
|
+
try:
|
|
14
|
+
import imageio
|
|
15
|
+
except ImportError as e:
|
|
16
|
+
raise ImportError(
|
|
17
|
+
"imageio is required for GymEnv visualization. "
|
|
18
|
+
"Please install with `pip install imageio`."
|
|
19
|
+
) from e
|
|
20
|
+
|
|
21
|
+
import numpy as np
|
|
22
|
+
|
|
23
|
+
if TYPE_CHECKING:
|
|
24
|
+
from evolib import Individual
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class GymEnv:
|
|
28
|
+
"""Thin wrapper to run OpenAI Gymnasium environments with EvoLib Individuals."""
|
|
29
|
+
|
|
30
|
+
def __init__(self, env_name: str, max_steps: int = 500, **env_kwargs: Any):
|
|
31
|
+
"""
|
|
32
|
+
Initialize a Gym environment.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
env_name: Name of the Gymnasium environment, e.g. "FrozenLake-v1".
|
|
36
|
+
max_steps: Maximum number of steps per episode.
|
|
37
|
+
**env_kwargs: Extra arguments passed directly to gym.make(),
|
|
38
|
+
e.g. is_slippery=False for FrozenLake.
|
|
39
|
+
"""
|
|
40
|
+
self.env_name = env_name
|
|
41
|
+
self.max_steps = max_steps
|
|
42
|
+
self.env_kwargs = env_kwargs
|
|
43
|
+
# headless env (no Render)
|
|
44
|
+
self.env = gym.make(env_name, **env_kwargs)
|
|
45
|
+
|
|
46
|
+
def evaluate(
|
|
47
|
+
self,
|
|
48
|
+
indiv: Individual,
|
|
49
|
+
module: str = "brain",
|
|
50
|
+
episodes: int = 1,
|
|
51
|
+
) -> float:
|
|
52
|
+
"""
|
|
53
|
+
Run one or multiple episodes headless and return average total reward.
|
|
54
|
+
|
|
55
|
+
Args:
|
|
56
|
+
indiv: Individual whose network acts in the environment.
|
|
57
|
+
module: Which module in para to use for decision making.
|
|
58
|
+
episodes: How many episodes to average over (default: 1).
|
|
59
|
+
|
|
60
|
+
Returns:
|
|
61
|
+
Average total reward across all episodes.
|
|
62
|
+
"""
|
|
63
|
+
total_reward = 0.0
|
|
64
|
+
|
|
65
|
+
for _ in range(episodes):
|
|
66
|
+
obs, _ = self.env.reset()
|
|
67
|
+
ep_reward = 0.0
|
|
68
|
+
|
|
69
|
+
for _ in range(self.max_steps):
|
|
70
|
+
if isinstance(obs, np.ndarray):
|
|
71
|
+
obs_list = obs.tolist()
|
|
72
|
+
elif np.isscalar(obs):
|
|
73
|
+
obs_list = [float(cast(float, obs))]
|
|
74
|
+
else:
|
|
75
|
+
obs_list = list(obs)
|
|
76
|
+
|
|
77
|
+
action = indiv.para[module].net.calc(obs_list)
|
|
78
|
+
|
|
79
|
+
# Discrete Action-Spaces --> argmax
|
|
80
|
+
if hasattr(self.env.action_space, "n"):
|
|
81
|
+
action = int(np.argmax(action))
|
|
82
|
+
else:
|
|
83
|
+
action = np.array(action, dtype=np.float32)
|
|
84
|
+
|
|
85
|
+
obs, reward, terminated, truncated, _ = self.env.step(action)
|
|
86
|
+
ep_reward += float(reward)
|
|
87
|
+
|
|
88
|
+
if terminated or truncated:
|
|
89
|
+
break
|
|
90
|
+
|
|
91
|
+
total_reward += ep_reward
|
|
92
|
+
|
|
93
|
+
return total_reward / episodes
|
|
94
|
+
|
|
95
|
+
def visualize(
|
|
96
|
+
self,
|
|
97
|
+
indiv: Individual,
|
|
98
|
+
gen: int,
|
|
99
|
+
filename: str | None = None,
|
|
100
|
+
fps: int = 30,
|
|
101
|
+
module: str = "brain",
|
|
102
|
+
) -> str:
|
|
103
|
+
"""
|
|
104
|
+
Render an episode with the given individual and save as GIF using imageio.
|
|
105
|
+
|
|
106
|
+
Args:
|
|
107
|
+
indiv: Individual to visualize.
|
|
108
|
+
gen: Generation number (used in default filename).
|
|
109
|
+
filename: Optional filename for output GIF.
|
|
110
|
+
fps: Frames per second for GIF.
|
|
111
|
+
module: Which module in para to use for decision making.
|
|
112
|
+
|
|
113
|
+
Returns:
|
|
114
|
+
Path to saved GIF.
|
|
115
|
+
"""
|
|
116
|
+
|
|
117
|
+
env = gym.make(
|
|
118
|
+
self.env_name,
|
|
119
|
+
render_mode="rgb_array",
|
|
120
|
+
max_episode_steps=self.max_steps,
|
|
121
|
+
**self.env_kwargs,
|
|
122
|
+
)
|
|
123
|
+
obs, _ = env.reset()
|
|
124
|
+
|
|
125
|
+
RenderFrame = Union[np.ndarray, list[np.ndarray], None]
|
|
126
|
+
frames: list[np.ndarray] = []
|
|
127
|
+
|
|
128
|
+
for _ in range(self.max_steps):
|
|
129
|
+
if isinstance(obs, np.ndarray):
|
|
130
|
+
obs_list = obs.tolist()
|
|
131
|
+
elif np.isscalar(obs):
|
|
132
|
+
obs_list = [float(cast(float, obs))]
|
|
133
|
+
else:
|
|
134
|
+
obs_list = list(obs)
|
|
135
|
+
|
|
136
|
+
action = indiv.para[module].net.calc(obs_list)
|
|
137
|
+
|
|
138
|
+
if hasattr(env.action_space, "n"):
|
|
139
|
+
action = int(np.argmax(action))
|
|
140
|
+
else:
|
|
141
|
+
action = np.array(action, dtype=np.float32)
|
|
142
|
+
|
|
143
|
+
obs, reward, terminated, truncated, _ = env.step(action)
|
|
144
|
+
|
|
145
|
+
frame: RenderFrame = env.render()
|
|
146
|
+
if isinstance(frame, np.ndarray):
|
|
147
|
+
frames.append(frame)
|
|
148
|
+
|
|
149
|
+
if terminated or truncated:
|
|
150
|
+
break
|
|
151
|
+
|
|
152
|
+
env.close()
|
|
153
|
+
|
|
154
|
+
if filename is None:
|
|
155
|
+
filename = f"{self.env_name}_gen{gen:04d}.gif"
|
|
156
|
+
|
|
157
|
+
imageio.mimsave(filename, cast(list[Any], frames), fps=fps)
|
|
158
|
+
|
|
159
|
+
return filename
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: evolib
|
|
3
|
-
Version: 0.2.0b3.
|
|
3
|
+
Version: 0.2.0b3.dev2
|
|
4
4
|
Summary: A modular framework for evolutionary strategies and neuroevolution.
|
|
5
5
|
Author-email: EvoLib <evolib@dismail.de>
|
|
6
6
|
License: MIT License
|
|
@@ -48,6 +48,7 @@ Requires-Dist: types-PyYAML; extra == "dev"
|
|
|
48
48
|
Requires-Dist: ray; extra == "dev"
|
|
49
49
|
Requires-Dist: gymnasium; extra == "dev"
|
|
50
50
|
Requires-Dist: imageio; extra == "dev"
|
|
51
|
+
Requires-Dist: Box2D; extra == "dev"
|
|
51
52
|
Provides-Extra: docs
|
|
52
53
|
Requires-Dist: sphinx; extra == "docs"
|
|
53
54
|
Requires-Dist: sphinx-rtd-theme; extra == "docs"
|
|
@@ -79,6 +80,7 @@ EvoLib is a lightweight and transparent framework for evolutionary computation,
|
|
|
79
80
|
- **Modularity**: mutation, selection, crossover, and parameter representations can be freely combined.
|
|
80
81
|
- **Educational value**: examples and a clean API make it practical for illustrating evolutionary concepts.
|
|
81
82
|
- **Neuroevolution support**: structural mutations (adding/removing neurons and connections) and evolvable networks via EvoNet.
|
|
83
|
+
- **Gymnasium integration**: run standard RL benchmarks (e.g. CartPole, LunarLander) via a simple wrapper.
|
|
82
84
|
- **Parallel evaluation (optional)**: basic support for [Ray](https://www.ray.io/) to speed up fitness evaluations.
|
|
83
85
|
- **Type-checked**: PEP8 compliant, and consistent code style.
|
|
84
86
|
|
|
@@ -209,6 +211,27 @@ It can be applied to:
|
|
|
209
211
|
|
|
210
212
|
---
|
|
211
213
|
|
|
214
|
+
### Gymnasium Integration
|
|
215
|
+
|
|
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 RL benchmarks such as **CartPole**, **LunarLander**, or **Pendulum**.
|
|
218
|
+
|
|
219
|
+
- **Headless evaluation**: returns total episode reward as fitness.
|
|
220
|
+
- **Visualization**: render episodes and save them as GIFs.
|
|
221
|
+
- **Discrete & continuous action spaces** are both supported.
|
|
222
|
+
|
|
223
|
+
👉 Example: [`examples/01_cartpole.py`](examples/01_cartpole.py)
|
|
224
|
+
|
|
225
|
+
```python
|
|
226
|
+
from evolibs.gym_wrapper import GymEnv
|
|
227
|
+
|
|
228
|
+
env = GymEnv("CartPole-v1", max_steps=500)
|
|
229
|
+
fitness = env.evaluate(indiv) # run one episode
|
|
230
|
+
gif = env.visualize(indiv, gen=10) # render & save as GIF
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
212
235
|
## Preview: Pygame Integration
|
|
213
236
|
|
|
214
237
|
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.
|
|
@@ -256,7 +279,7 @@ For deeper exploration, see the [full examples directory](examples/)
|
|
|
256
279
|
- [X] Neuroevolution
|
|
257
280
|
- [X] Topological Evolution (neurons, edges)
|
|
258
281
|
- [X] Ray Support for Parallel Evaluation (early prototypes)
|
|
259
|
-
- [
|
|
282
|
+
- [X] OpenAI Gymnasium / Gym Wrapper
|
|
260
283
|
- [ ] Advanced Visualization
|
|
261
284
|
- [ ] Game Environment Integration (pygame, PettingZoo - early prototypes)
|
|
262
285
|
|
|
@@ -456,8 +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/
|
|
460
|
-
examples/
|
|
459
|
+
examples/08_gym/01_cartpole.py
|
|
460
|
+
examples/08_gym/01_frozen_lake.py
|
|
461
|
+
examples/08_gym/02_cliff_walking.py
|
|
462
|
+
examples/08_gym/02_lunar_lander.py
|
|
463
|
+
examples/08_gym/03_taxi.py
|
|
461
464
|
tests/test_benchmarks.py
|
|
462
465
|
tests/test_config_loader.py
|
|
463
466
|
tests/test_elitism_preserves_best_fitness.py
|
|
@@ -0,0 +1,32 @@
|
|
|
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)
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Example: Training on the FrozenLake-v1 environment.
|
|
3
|
+
|
|
4
|
+
FrozenLake is a task where the agent must reach the goal while
|
|
5
|
+
avoiding holes on a slippery surface.
|
|
6
|
+
This example demonstrates how stochastic transitions make
|
|
7
|
+
evolutionary training noisy and challenging.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from evolib import GymEnv, Individual, Population, resume_or_create
|
|
11
|
+
|
|
12
|
+
CONFIG_FILE = "./configs/01_frozen_lake.yaml"
|
|
13
|
+
FRAME_FOLDER = "01_frames"
|
|
14
|
+
MAX_STEPS = 150
|
|
15
|
+
|
|
16
|
+
# init environment once (can be reused for all individuals)
|
|
17
|
+
gym_env = GymEnv("FrozenLake-v1", max_steps=MAX_STEPS, is_slippery=True, map_name="8x8")
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def eval_fitness(indiv: Individual) -> None:
|
|
21
|
+
"""
|
|
22
|
+
Assign fitness to an individual by running several FrozenLake episodes.
|
|
23
|
+
|
|
24
|
+
The agent controls discrete moves (left, down, right, up) on an 8x8 grid. Fitness is
|
|
25
|
+
defined as the negative average reward across 5 episodes, encouraging robust
|
|
26
|
+
policies that consistently reach the goal while avoiding holes.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
fitness = gym_env.evaluate(indiv, module="brain", episodes=5)
|
|
30
|
+
indiv.fitness = -fitness
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def on_generation_end(pop: Population) -> None:
|
|
34
|
+
"""Visualize the best individual of the current generation as a GIF."""
|
|
35
|
+
|
|
36
|
+
best = pop.best()
|
|
37
|
+
gif = gym_env.visualize(
|
|
38
|
+
best,
|
|
39
|
+
pop.generation_num,
|
|
40
|
+
filename=f"{FRAME_FOLDER}/gen_{pop.generation_num:03d}.gif",
|
|
41
|
+
)
|
|
42
|
+
print(f"Saved: {gif}")
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
if __name__ == "__main__":
|
|
46
|
+
pop = resume_or_create(
|
|
47
|
+
CONFIG_FILE,
|
|
48
|
+
fitness_function=eval_fitness,
|
|
49
|
+
run_name="FrozenLake-v1",
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
pop.run(verbosity=1, on_generation_end=on_generation_end)
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Example: Training on the CliffWalking-v1 environment.
|
|
3
|
+
|
|
4
|
+
This setup illustrates why CliffWalking is considered an
|
|
5
|
+
"anti-evolution" benchmark: progress appears rarely and
|
|
6
|
+
suboptimal strategies may dominate due to the reward structure.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from evolib import GymEnv, Individual, Population, resume_or_create
|
|
10
|
+
|
|
11
|
+
CONFIG_FILE = "./configs/02_cliff_walking.yaml"
|
|
12
|
+
FRAME_FOLDER = "02_frames"
|
|
13
|
+
MAX_STEPS = 100
|
|
14
|
+
|
|
15
|
+
# Initialize the environment once (can be reused for all individuals)
|
|
16
|
+
gym_env = GymEnv("CliffWalking-v1", max_steps=MAX_STEPS)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def eval_fitness(indiv: Individual) -> None:
|
|
20
|
+
"""
|
|
21
|
+
Evaluate the fitness of an individual in the CliffWalking-v1 environment.
|
|
22
|
+
|
|
23
|
+
The environment returns cumulative rewards (≤ 0).
|
|
24
|
+
To align with EvoLib's convention of minimizing fitness,
|
|
25
|
+
the reward is negated: higher rewards (closer to 0) become
|
|
26
|
+
smaller fitness values and are therefore preferred.
|
|
27
|
+
"""
|
|
28
|
+
reward = gym_env.evaluate(indiv, module="brain")
|
|
29
|
+
indiv.fitness = -reward
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def on_generation_end(pop: Population) -> None:
|
|
33
|
+
"""Visualize the best individual of the current generation as a GIF."""
|
|
34
|
+
|
|
35
|
+
best = pop.best()
|
|
36
|
+
gif = gym_env.visualize(
|
|
37
|
+
best,
|
|
38
|
+
pop.generation_num,
|
|
39
|
+
filename=f"{FRAME_FOLDER}/gen_{pop.generation_num:03d}.gif",
|
|
40
|
+
)
|
|
41
|
+
print(f"Saved: {gif}")
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
if __name__ == "__main__":
|
|
45
|
+
pop = resume_or_create(
|
|
46
|
+
CONFIG_FILE,
|
|
47
|
+
fitness_function=eval_fitness,
|
|
48
|
+
run_name="CliffWalking-v1",
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
pop.run(verbosity=1, on_generation_end=on_generation_end)
|
{evolib-0.2.0b3.dev1/examples/08_envs → evolib-0.2.0b3.dev2/examples/08_gym}/02_lunar_lander.py
RENAMED
|
@@ -14,6 +14,14 @@ def eval_lunar_fitness(indiv: Individual) -> None:
|
|
|
14
14
|
fitness = lunar_env.evaluate(indiv, module="brain")
|
|
15
15
|
indiv.fitness = -fitness
|
|
16
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
|
+
|
|
17
25
|
if __name__ == "__main__":
|
|
18
26
|
pop = resume_or_create(
|
|
19
27
|
CONFIG_FILE,
|
|
@@ -0,0 +1,85 @@
|
|
|
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)
|
|
@@ -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.0b3dev2"
|
|
8
8
|
description = "A modular framework for evolutionary strategies and neuroevolution."
|
|
9
9
|
authors = [
|
|
10
10
|
{ name = "EvoLib", email = "evolib@dismail.de" }
|
|
@@ -38,7 +38,8 @@ dev = [
|
|
|
38
38
|
"types-PyYAML",
|
|
39
39
|
"ray",
|
|
40
40
|
"gymnasium",
|
|
41
|
-
"imageio"
|
|
41
|
+
"imageio",
|
|
42
|
+
"Box2D"
|
|
42
43
|
]
|
|
43
44
|
docs = [
|
|
44
45
|
"sphinx",
|