evolib 0.2.0b2.dev4__tar.gz → 0.2.0b2.dev5__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.0b2.dev4/evolib.egg-info → evolib-0.2.0b2.dev5}/PKG-INFO +1 -1
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/individual.py +5 -4
- evolib-0.2.0b2.dev5/evolib/initializers/evonet_initializers.py +144 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/registry.py +7 -1
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/operators/crossover.py +13 -20
- evolib-0.2.0b2.dev5/evolib/representation/dummy.py +31 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/evonet.py +0 -42
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/utils/benchmarks.py +98 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/utils/plotting.py +3 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5/evolib.egg-info}/PKG-INFO +1 -1
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib.egg-info/SOURCES.txt +2 -1
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/02_strategies/01_step_by_step_evolution.py +5 -5
- evolib-0.2.0b2.dev5/examples/07_evonet/04_recurrent_bit_prediction.py +107 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/pyproject.toml +1 -1
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/tests/test_evonet_vector_io.py +5 -5
- evolib-0.2.0b2.dev4/evolib/initializers/evonet_initializers.py +0 -27
- evolib-0.2.0b2.dev4/examples/07_evonet/04_recurrent_bitseq.py +0 -144
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/LICENSE +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/MANIFEST.in +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/README.md +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/docs/api_core_individual.rst +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/docs/api_core_population.rst +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/docs/api_operators_crossover.rst +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/docs/api_operators_evonet_structural_mutation.rst +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/docs/api_operators_mutation.rst +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/docs/api_operators_replacement.rst +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/docs/api_operators_reproduction.rst +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/docs/api_operators_selection.rst +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/docs/api_operators_strategy.rst +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/docs/api_public_api.rst +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/docs/api_representation_evonet.rst +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/docs/api_representation_netvector.rst +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/docs/api_representation_vector.rst +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/docs/api_utils_benchmarks.rst +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/docs/api_utils_history_logger.rst +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/docs/api_utils_loss_functions.rst +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/docs/api_utils_plotting.rst +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/docs/conf.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/docs/config_guide.md +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/docs/config_parameter.md +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/docs/getting_started.md +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/docs/index.md +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/PIL/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/annotated_types/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/asyncio/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/collections/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/concurrent/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/ctypes/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/cycler/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/email/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/evolib/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/evolib/config/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/evolib/registry/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/evolib/representation/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/html/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/importlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/jinja2/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/json/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/logging/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/markdown_it/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/markdown_it/common/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/markdown_it/helpers/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/markdown_it/presets/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/markdown_it/rules_block/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/markdown_it/rules_core/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/markdown_it/rules_inline/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/mdurl/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/os/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/packaging/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/pydantic/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/pydantic/_internal/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/pydantic/deprecated/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/pydantic/plugin/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/pydantic/v1/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/pydantic_core/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/rich/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/sys/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/typing_inspection/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/unittest/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/urllib/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/xml/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/yaml/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/zipfile/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/zoneinfo/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/api.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/config/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/config/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/config/base_component_config.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/config/component_registry.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/config/evonet_component_config.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/config/schema.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/config/vector_component_config.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/PIL/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/asyncio/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/collections/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/concurrent/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/ctypes/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/cycler/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/email/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/evolib/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/html/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/importlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/jinja2/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/json/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/logging/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/os/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/packaging/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/sys/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/unittest/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/urllib/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/xml/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/yaml/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/zipfile/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/README.md +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/core/population.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/globals/README.md +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/globals/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/globals/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/globals/numeric.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/PIL/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/asyncio/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/collections/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/concurrent/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/ctypes/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/cycler/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/email/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/evolib/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/html/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/importlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/jinja2/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/json/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/logging/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/os/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/packaging/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/sys/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/unittest/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/urllib/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/xml/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/yaml/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/zipfile/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/net_initializers.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/initializers/vector_initializers.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/interfaces/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/interfaces/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/interfaces/enum_helpers.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/interfaces/enums.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/interfaces/structs.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/interfaces/types.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/io/checkpoint.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/io/serialization.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/operators/README.md +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/operators/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/operators/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/operators/evonet_structural_mutation.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/operators/mutation.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/operators/replacement.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/operators/reproduction.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/operators/selection.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/operators/strategy.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/registry/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/registry/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/registry/replacement_registry.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/registry/selection_registry.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/registry/strategy_registry.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/PIL/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/annotated_types/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/asyncio/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/collections/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/concurrent/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/ctypes/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/cycler/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/email/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/evolib/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/evolib/config/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/evolib/registry/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/evolib/representation/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/html/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/importlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/jinja2/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/json/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/logging/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/markdown_it/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/markdown_it/common/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/markdown_it/helpers/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/markdown_it/presets/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_block/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_core/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_inline/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/mdurl/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/os/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/packaging/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/pydantic/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/pydantic/_internal/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/pydantic/deprecated/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/pydantic/plugin/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/pydantic/v1/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/pydantic_core/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/rich/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/sys/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/typing_inspection/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/unittest/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/urllib/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/xml/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/yaml/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/zipfile/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/zoneinfo/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/_apply_config_mapping.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/base.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/composite.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/evo_params.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/netvector.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/representation/vector.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/utils/README.md +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/utils/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/utils/config_loader.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/utils/fitness.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/utils/history_logger.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/utils/loss_functions.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/utils/random.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib/utils/registry.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib.egg-info/dependency_links.txt +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib.egg-info/requires.txt +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/evolib.egg-info/top_level.txt +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/01_basic_usage/01_getting_started.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/01_basic_usage/02_mutation.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/01_basic_usage/03_population_mutation.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/01_basic_usage/04_fitness.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/02_strategies/02_mu_lambda_step.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/02_strategies/03_mu_lambda.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/02_strategies/04_flexible.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/03_comparisons/01_history.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/03_comparisons/02_plotting.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/03_comparisons/03_compare_runs.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/03_comparisons/04_exponential_decay_vs_static.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/03_comparisons/05_adaptive_global_vs_static.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/03_comparisons/06_adaptive_individual_vs_static.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/03_comparisons/07_selection_comparison.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/03_comparisons/08_selection_pressure.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/03_comparisons/09_selection_vs_mutation_pressure.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/03_comparisons/10_selection_stochastic_vs_deterministic.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/03_comparisons/11_crossover_comparison.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/04_function_approximation/01_polynomial_sine.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/04_function_approximation/02_sine_point_approximation.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/04_function_approximation/03_approximation_with_noise.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/05_advanced_topics/01_fitness_landscape_exploration.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/05_advanced_topics/02_rosenbrock_surface_path.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/05_advanced_topics/03_vector_control.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/05_advanced_topics/04_vector_control_with_obstacles.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/05_advanced_topics/05_piecewise_linear_xsys.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/05_advanced_topics/06_evolving_mutation_strength_as_a_module.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/06_netvector/01_netvector_sine_approximation.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/06_netvector/02_netvector_modulated_output.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/06_netvector/03_netvector_gain_and_bias.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/07_evonet/01_sine_approximation.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/07_evonet/02_image_approximation.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/07_evonet/03_structural_xor.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/07_evonet/resize_all_images.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/setup.cfg +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/tests/test_benchmarks.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/tests/test_config_loader.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/tests/test_elitism_preserves_best_fitness.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/tests/test_initializer_evonet.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/tests/test_initializer_net.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/tests/test_mutation.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/tests/test_population.py +0 -0
- {evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/tests/test_selection.py +0 -0
|
@@ -24,13 +24,14 @@ from typing import Any, Dict, Optional
|
|
|
24
24
|
from uuid import uuid4
|
|
25
25
|
|
|
26
26
|
from evolib.interfaces.enums import Origin
|
|
27
|
+
from evolib.representation.dummy import ParaDummy
|
|
27
28
|
|
|
28
29
|
|
|
29
30
|
class Indiv:
|
|
30
31
|
"""Represents an individual in an evolutionary optimization algorithm."""
|
|
31
32
|
|
|
32
|
-
#: para (Any
|
|
33
|
-
para: Any
|
|
33
|
+
#: para (Any): Parameter values of the individual. Default: None.
|
|
34
|
+
para: Any
|
|
34
35
|
|
|
35
36
|
#: fitness (float): Fitness value of the individual.
|
|
36
37
|
#: None means the individual has not yet been evaluated.
|
|
@@ -73,9 +74,9 @@ class Indiv:
|
|
|
73
74
|
"is_elite",
|
|
74
75
|
)
|
|
75
76
|
|
|
76
|
-
def __init__(self, para: Any
|
|
77
|
+
def __init__(self, para: Any = None):
|
|
77
78
|
self.id: str = str(uuid4())
|
|
78
|
-
self.para = para
|
|
79
|
+
self.para = para if para is not None else ParaDummy()
|
|
79
80
|
self.fitness = None
|
|
80
81
|
self.is_evaluated = False
|
|
81
82
|
self.age = 0
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
"""
|
|
3
|
+
Initializers for EvoNet networks.
|
|
4
|
+
|
|
5
|
+
These initializers convert a module configuration with `type: evonet` into a fully
|
|
6
|
+
initialized EvoNet instance.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import numpy as np
|
|
10
|
+
from evonet.activation import random_function_name
|
|
11
|
+
from evonet.enums import NeuronRole
|
|
12
|
+
|
|
13
|
+
from evolib.config.evonet_component_config import EvoNetComponentConfig
|
|
14
|
+
from evolib.config.schema import FullConfig
|
|
15
|
+
from evolib.interfaces.enum_helpers import resolve_recurrent_kinds
|
|
16
|
+
from evolib.representation.evonet import EvoNet
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _build_architecture(para: EvoNet, cfg: EvoNetComponentConfig) -> None:
|
|
20
|
+
"""
|
|
21
|
+
Build the EvoNet architecture (layers, neurons, activations) from config.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
para (EvoNet): The EvoNet instance (already has parameters set).
|
|
25
|
+
cfg (EvoNetComponentConfig): Config with architecture definition.
|
|
26
|
+
"""
|
|
27
|
+
# Activation functions per layer
|
|
28
|
+
if isinstance(cfg.activation, list):
|
|
29
|
+
activations = cfg.activation
|
|
30
|
+
else:
|
|
31
|
+
# Input layer linear, others same activation
|
|
32
|
+
activations = ["linear"] + [cfg.activation] * (len(cfg.dim) - 1)
|
|
33
|
+
|
|
34
|
+
for layer_idx, num_neurons in enumerate(cfg.dim):
|
|
35
|
+
if num_neurons == 0:
|
|
36
|
+
continue
|
|
37
|
+
|
|
38
|
+
activation_name = activations[layer_idx]
|
|
39
|
+
if activation_name == "random":
|
|
40
|
+
if cfg.activations_allowed is not None:
|
|
41
|
+
activation_name = random_function_name(cfg.activations_allowed)
|
|
42
|
+
else:
|
|
43
|
+
activation_name = random_function_name()
|
|
44
|
+
|
|
45
|
+
para.net.add_layer()
|
|
46
|
+
|
|
47
|
+
if layer_idx == 0:
|
|
48
|
+
role = NeuronRole.INPUT
|
|
49
|
+
elif layer_idx == len(cfg.dim) - 1:
|
|
50
|
+
role = NeuronRole.OUTPUT
|
|
51
|
+
else:
|
|
52
|
+
role = NeuronRole.HIDDEN
|
|
53
|
+
|
|
54
|
+
recurrent_kinds = resolve_recurrent_kinds(cfg.recurrent)
|
|
55
|
+
para.net.add_neuron(
|
|
56
|
+
count=num_neurons,
|
|
57
|
+
activation=activation_name,
|
|
58
|
+
role=role,
|
|
59
|
+
connection_init="zero",
|
|
60
|
+
bias=0.0,
|
|
61
|
+
recurrent=recurrent_kinds if role != NeuronRole.INPUT else None,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def initializer_normal_evonet(config: FullConfig, module: str) -> EvoNet:
|
|
66
|
+
"""
|
|
67
|
+
Initializes an EvoNet with normally distributed weights.
|
|
68
|
+
|
|
69
|
+
Args:
|
|
70
|
+
config (FullConfig): Full experiment configuration
|
|
71
|
+
module (str): Module name (e.g. "brain")
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
EvoNet: Initialized EvoNet representation
|
|
75
|
+
"""
|
|
76
|
+
para = EvoNet()
|
|
77
|
+
cfg = config.modules[module].model_copy(deep=True)
|
|
78
|
+
para.apply_config(cfg)
|
|
79
|
+
|
|
80
|
+
_build_architecture(para, cfg)
|
|
81
|
+
|
|
82
|
+
# Initialize weights and biases with normal distribution
|
|
83
|
+
weights = np.random.normal(loc=0.0, scale=0.5, size=para.net.num_weights)
|
|
84
|
+
biases = np.random.normal(loc=0.0, scale=0.5, size=para.net.num_biases)
|
|
85
|
+
|
|
86
|
+
para.net.set_weights(weights)
|
|
87
|
+
para.net.set_biases(biases)
|
|
88
|
+
return para
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def initializer_random_evonet(config: FullConfig, module: str) -> EvoNet:
|
|
92
|
+
"""
|
|
93
|
+
Initializes an EvoNet with uniformly random weights and biases within init_bounds
|
|
94
|
+
(fallback: weight_bounds, bias_bounds).
|
|
95
|
+
|
|
96
|
+
Args:
|
|
97
|
+
config (FullConfig): Full experiment configuration
|
|
98
|
+
module (str): Module name
|
|
99
|
+
|
|
100
|
+
Returns:
|
|
101
|
+
EvoNet: Initialized EvoNet representation
|
|
102
|
+
"""
|
|
103
|
+
para = EvoNet()
|
|
104
|
+
cfg = config.modules[module].model_copy(deep=True)
|
|
105
|
+
para.apply_config(cfg)
|
|
106
|
+
|
|
107
|
+
_build_architecture(para, cfg)
|
|
108
|
+
|
|
109
|
+
# Use weight_bounds if available, else fall back to bounds
|
|
110
|
+
weight_bounds = cfg.weight_bounds or (-1.0, 1.0)
|
|
111
|
+
min_weight = weight_bounds[0]
|
|
112
|
+
max_weight = weight_bounds[1]
|
|
113
|
+
bias_bounds = cfg.bias_bounds or (-0.5, 0.5)
|
|
114
|
+
min_bias = bias_bounds[0]
|
|
115
|
+
max_bias = bias_bounds[1]
|
|
116
|
+
|
|
117
|
+
weights = np.random.uniform(min_weight, max_weight, size=para.net.num_weights)
|
|
118
|
+
biases = np.random.uniform(min_bias, max_bias, size=para.net.num_biases)
|
|
119
|
+
|
|
120
|
+
para.net.set_weights(weights)
|
|
121
|
+
para.net.set_biases(biases)
|
|
122
|
+
return para
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def initializer_zero_evonet(config: FullConfig, module: str) -> EvoNet:
|
|
126
|
+
"""
|
|
127
|
+
Initializes an EvoNet with all weights and biases set to zero.
|
|
128
|
+
|
|
129
|
+
Args:
|
|
130
|
+
config (FullConfig): Full experiment configuration
|
|
131
|
+
module (str): Module name
|
|
132
|
+
|
|
133
|
+
Returns:
|
|
134
|
+
EvoNet: Initialized EvoNet representation
|
|
135
|
+
"""
|
|
136
|
+
para = EvoNet()
|
|
137
|
+
cfg = config.modules[module].model_copy(deep=True)
|
|
138
|
+
para.apply_config(cfg)
|
|
139
|
+
|
|
140
|
+
_build_architecture(para, cfg)
|
|
141
|
+
|
|
142
|
+
para.net.set_weights(np.zeros(para.net.num_weights))
|
|
143
|
+
para.net.set_biases(np.zeros(para.net.num_biases))
|
|
144
|
+
return para
|
|
@@ -16,7 +16,11 @@ from typing import Any, Callable
|
|
|
16
16
|
from evolib.config.schema import FullConfig
|
|
17
17
|
|
|
18
18
|
# EvoNet-based initializer
|
|
19
|
-
from evolib.initializers.evonet_initializers import
|
|
19
|
+
from evolib.initializers.evonet_initializers import (
|
|
20
|
+
initializer_normal_evonet,
|
|
21
|
+
initializer_random_evonet,
|
|
22
|
+
initializer_zero_evonet,
|
|
23
|
+
)
|
|
20
24
|
|
|
21
25
|
# NetVector-based initializer
|
|
22
26
|
from evolib.initializers.net_initializers import initializer_normal_net
|
|
@@ -45,6 +49,8 @@ INITIALIZER_REGISTRY: dict[str, InitializerFunction] = {
|
|
|
45
49
|
"adaptive_vector": initializer_adaptive_vector,
|
|
46
50
|
"normal_net": initializer_normal_net,
|
|
47
51
|
"normal_evonet": initializer_normal_evonet,
|
|
52
|
+
"random_evonet": initializer_random_evonet,
|
|
53
|
+
"zero_evonet": initializer_zero_evonet,
|
|
48
54
|
}
|
|
49
55
|
|
|
50
56
|
|
|
@@ -196,9 +196,11 @@ def crossover_intermediate(
|
|
|
196
196
|
|
|
197
197
|
def crossover_offspring(pop: "Pop", offspring: list["Indiv"]) -> None:
|
|
198
198
|
"""
|
|
199
|
-
Perform crossover for each pair of offspring individuals.
|
|
200
|
-
|
|
201
|
-
|
|
199
|
+
Perform crossover for each pair of offspring individuals.
|
|
200
|
+
|
|
201
|
+
Delegates the actual crossover logic to the individuals' parameter
|
|
202
|
+
representations (ParaBase subclasses). Works for both single-module
|
|
203
|
+
(e.g. Vector, EvoNet) and multi-module (ParaComposite) individuals.
|
|
202
204
|
|
|
203
205
|
Notes:
|
|
204
206
|
- Offspring are assumed to be copied before this call.
|
|
@@ -216,20 +218,11 @@ def crossover_offspring(pop: "Pop", offspring: list["Indiv"]) -> None:
|
|
|
216
218
|
if child1.para is None or child2.para is None:
|
|
217
219
|
continue
|
|
218
220
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
continue
|
|
228
|
-
|
|
229
|
-
effective_prob = min(prob1, prob2)
|
|
230
|
-
|
|
231
|
-
if effective_prob <= 0.0 or np.random.rand() >= effective_prob:
|
|
232
|
-
continue
|
|
233
|
-
|
|
234
|
-
# Perform crossover
|
|
235
|
-
module1.crossover_with(module2)
|
|
221
|
+
# Delegate crossover to para (Vector, EvoNet, or ParaComposite)
|
|
222
|
+
try:
|
|
223
|
+
child1.para.crossover_with(child2.para)
|
|
224
|
+
except Exception as e:
|
|
225
|
+
# Optional: log or raise, depending on how strict du es haben willst
|
|
226
|
+
raise RuntimeError(
|
|
227
|
+
f"Crossover failed for individuals {child1.id} and {child2.id}: {e}"
|
|
228
|
+
)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Placeholder implementation of ParaBase for uninitialized individuals.
|
|
3
|
+
|
|
4
|
+
Ensures that every individual always has a ParaBase instance, even before configuration.
|
|
5
|
+
All operations (mutation, crossover, apply_config) raise clear errors to prevent
|
|
6
|
+
accidental use of uninitialized parameters.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from typing import Any
|
|
10
|
+
|
|
11
|
+
from evolib.interfaces.types import ModuleConfig
|
|
12
|
+
from evolib.representation.base import ParaBase
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ParaDummy(ParaBase):
|
|
16
|
+
"""Placeholder ParaBase used for uninitialized individuals."""
|
|
17
|
+
|
|
18
|
+
def apply_config(self, cfg: ModuleConfig) -> None:
|
|
19
|
+
raise RuntimeError("DummyPara cannot be configured.")
|
|
20
|
+
|
|
21
|
+
def mutate(self) -> None:
|
|
22
|
+
raise RuntimeError("DummyPara cannot be mutated.")
|
|
23
|
+
|
|
24
|
+
def print_status(self) -> None:
|
|
25
|
+
print("[DummyPara] (no parameters)")
|
|
26
|
+
|
|
27
|
+
def get_status(self) -> str | dict[str, Any]:
|
|
28
|
+
return "<DummyPara: no parameters>"
|
|
29
|
+
|
|
30
|
+
def crossover_with(self, partner: "ParaBase") -> None:
|
|
31
|
+
raise RuntimeError("DummyPara cannot participate in crossover.")
|
|
@@ -10,14 +10,12 @@ import random as rng
|
|
|
10
10
|
from typing import Any, Literal, Optional
|
|
11
11
|
|
|
12
12
|
import numpy as np
|
|
13
|
-
from evonet.activation import random_function_name
|
|
14
13
|
from evonet.core import Nnet
|
|
15
14
|
from evonet.enums import NeuronRole
|
|
16
15
|
from evonet.mutation import mutate_activations, mutate_bias, mutate_weight
|
|
17
16
|
|
|
18
17
|
from evolib.config.base_component_config import StructuralMutationConfig
|
|
19
18
|
from evolib.config.evonet_component_config import EvoNetComponentConfig
|
|
20
|
-
from evolib.interfaces.enum_helpers import resolve_recurrent_kinds
|
|
21
19
|
from evolib.interfaces.enums import MutationStrategy
|
|
22
20
|
from evolib.interfaces.types import ModuleConfig
|
|
23
21
|
from evolib.operators.evonet_structural_mutation import mutate_structure
|
|
@@ -112,46 +110,6 @@ class EvoNet(ParaBase):
|
|
|
112
110
|
# Apply crossover config
|
|
113
111
|
apply_crossover_config(evo_params, cfg.crossover)
|
|
114
112
|
|
|
115
|
-
# Activation functions per layer
|
|
116
|
-
if isinstance(cfg.activation, list):
|
|
117
|
-
activations = cfg.activation
|
|
118
|
-
else:
|
|
119
|
-
# Apply the same activation to all hidden/output layers,
|
|
120
|
-
# but force input layer to be linear
|
|
121
|
-
activations = ["linear"] + [cfg.activation] * (len(cfg.dim) - 1)
|
|
122
|
-
|
|
123
|
-
for layer_idx, num_neurons in enumerate(self.dim):
|
|
124
|
-
if num_neurons == 0:
|
|
125
|
-
continue
|
|
126
|
-
|
|
127
|
-
activation_name = activations[layer_idx]
|
|
128
|
-
|
|
129
|
-
if activation_name == "random":
|
|
130
|
-
if cfg.activations_allowed is not None:
|
|
131
|
-
activation_name = random_function_name(cfg.activations_allowed)
|
|
132
|
-
else:
|
|
133
|
-
activation_name = random_function_name()
|
|
134
|
-
|
|
135
|
-
self.net.add_layer()
|
|
136
|
-
|
|
137
|
-
if layer_idx == 0:
|
|
138
|
-
# Input Layer
|
|
139
|
-
role = NeuronRole.INPUT
|
|
140
|
-
elif layer_idx == len(self.dim) - 1:
|
|
141
|
-
# Output Layer
|
|
142
|
-
role = NeuronRole.OUTPUT
|
|
143
|
-
else:
|
|
144
|
-
# Hidden Layer
|
|
145
|
-
role = NeuronRole.HIDDEN
|
|
146
|
-
|
|
147
|
-
recurrent_kinds = resolve_recurrent_kinds(cfg.recurrent)
|
|
148
|
-
self.net.add_neuron(
|
|
149
|
-
count=num_neurons,
|
|
150
|
-
activation=activation_name,
|
|
151
|
-
role=role,
|
|
152
|
-
recurrent=recurrent_kinds if role != NeuronRole.INPUT else None,
|
|
153
|
-
)
|
|
154
|
-
|
|
155
113
|
def calc(self, input_values: list[float]) -> list[float]:
|
|
156
114
|
return self.net.calc(input_values)
|
|
157
115
|
|
|
@@ -1,9 +1,107 @@
|
|
|
1
1
|
# SPDX-License-Identifier: MIT
|
|
2
2
|
"""Common mathematical benchmark functions for optimization tasks."""
|
|
3
3
|
|
|
4
|
+
from typing import Sequence
|
|
5
|
+
|
|
4
6
|
import numpy as np
|
|
5
7
|
|
|
6
8
|
|
|
9
|
+
def lfsr_sequence(
|
|
10
|
+
length: int,
|
|
11
|
+
seed: int = 0b10011,
|
|
12
|
+
taps: tuple[int, ...] = (5, 2),
|
|
13
|
+
invert_feedback: bool = True,
|
|
14
|
+
) -> list[int]:
|
|
15
|
+
"""
|
|
16
|
+
Generate a binary sequence using an n-bit LFSR (Linear Feedback Shift Register).
|
|
17
|
+
|
|
18
|
+
Parameters
|
|
19
|
+
----------
|
|
20
|
+
length : int
|
|
21
|
+
Number of output bits to generate.
|
|
22
|
+
seed : int, optional
|
|
23
|
+
Initial state of the LFSR (must be non-zero). Default: 0b10011.
|
|
24
|
+
taps : tuple[int, ...], optional
|
|
25
|
+
Tap positions (1-based, e.g. (5, 2) for x^5 + x^2 + 1).
|
|
26
|
+
invert_feedback : bool, optional
|
|
27
|
+
If True (default), the feedback bit is inverted at initialization.
|
|
28
|
+
This variant ensures a maximal-length sequence for (5, 2).
|
|
29
|
+
If False, the classical Fibonacci-LFSR update rule is used.
|
|
30
|
+
|
|
31
|
+
Returns
|
|
32
|
+
-------
|
|
33
|
+
list[int]
|
|
34
|
+
Generated bit sequence of the given length.
|
|
35
|
+
"""
|
|
36
|
+
n = max(taps)
|
|
37
|
+
if seed == 0:
|
|
38
|
+
raise ValueError("Seed must be non-zero for LFSR.")
|
|
39
|
+
|
|
40
|
+
state = seed & ((1 << n) - 1)
|
|
41
|
+
seq: list[int] = []
|
|
42
|
+
|
|
43
|
+
for _ in range(length):
|
|
44
|
+
bit = state & 1
|
|
45
|
+
seq.append(bit)
|
|
46
|
+
|
|
47
|
+
fb = 1 if invert_feedback else 0
|
|
48
|
+
for t in taps:
|
|
49
|
+
fb ^= (state >> (t - 1)) & 1
|
|
50
|
+
|
|
51
|
+
state = (state >> 1) | (fb << (n - 1))
|
|
52
|
+
|
|
53
|
+
return seq
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def xor_sequence(length: int, k: int = 2, seed: Sequence[int] = (0, 1)) -> list[int]:
|
|
57
|
+
"""
|
|
58
|
+
Generate a sequence where each new bit is the XOR of the last k bits.
|
|
59
|
+
|
|
60
|
+
Parameters
|
|
61
|
+
----------
|
|
62
|
+
length : int
|
|
63
|
+
Length of the sequence to generate.
|
|
64
|
+
k : int, optional
|
|
65
|
+
Window size for XOR. Default: 2 (classic XOR sequence).
|
|
66
|
+
seed : Sequence[int], optional
|
|
67
|
+
Initial bits to start the sequence. Must have length >= k.
|
|
68
|
+
|
|
69
|
+
Returns
|
|
70
|
+
-------
|
|
71
|
+
list[int]
|
|
72
|
+
Generated bit sequence of the given length.
|
|
73
|
+
"""
|
|
74
|
+
if len(seed) < k:
|
|
75
|
+
raise ValueError(f"Seed must have at least {k} bits.")
|
|
76
|
+
seq = list(seed)
|
|
77
|
+
while len(seq) < length:
|
|
78
|
+
next_bit = 0
|
|
79
|
+
for i in range(1, k + 1):
|
|
80
|
+
next_bit ^= seq[-i]
|
|
81
|
+
seq.append(next_bit)
|
|
82
|
+
return seq[:length]
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def random_fixed_sequence(length: int, seed: int = 1234) -> list[int]:
|
|
86
|
+
"""
|
|
87
|
+
Generate a reproducible random bit sequence with a fixed seed.
|
|
88
|
+
|
|
89
|
+
Parameters
|
|
90
|
+
----------
|
|
91
|
+
length : int
|
|
92
|
+
Length of the sequence.
|
|
93
|
+
seed : int, optional
|
|
94
|
+
Random seed for reproducibility. Default: 1234.
|
|
95
|
+
|
|
96
|
+
Returns
|
|
97
|
+
-------
|
|
98
|
+
list[int]
|
|
99
|
+
Generated random bit sequence (0/1).
|
|
100
|
+
"""
|
|
101
|
+
rng = np.random.RandomState(seed)
|
|
102
|
+
return rng.randint(0, 2, size=length).tolist()
|
|
103
|
+
|
|
104
|
+
|
|
7
105
|
def simple_quadratic(x: np.ndarray) -> float:
|
|
8
106
|
"""
|
|
9
107
|
Simple 1D benchmark: f(x) = x^2
|
|
@@ -632,6 +632,9 @@ def plot_bit_prediction(
|
|
|
632
632
|
axes[1].set_ylabel("Value")
|
|
633
633
|
axes[1].legend(loc="upper right")
|
|
634
634
|
|
|
635
|
+
# add threshold line at 0.5
|
|
636
|
+
axes[1].axhline(0.5, color="gray", linestyle="--", linewidth=1, alpha=0.6)
|
|
637
|
+
|
|
635
638
|
# save/show
|
|
636
639
|
if save_path:
|
|
637
640
|
os.makedirs(os.path.dirname(save_path), exist_ok=True)
|
|
@@ -306,6 +306,7 @@ evolib/representation/__init__.py
|
|
|
306
306
|
evolib/representation/_apply_config_mapping.py
|
|
307
307
|
evolib/representation/base.py
|
|
308
308
|
evolib/representation/composite.py
|
|
309
|
+
evolib/representation/dummy.py
|
|
309
310
|
evolib/representation/evo_params.py
|
|
310
311
|
evolib/representation/evonet.py
|
|
311
312
|
evolib/representation/netvector.py
|
|
@@ -445,7 +446,7 @@ examples/06_netvector/03_netvector_gain_and_bias.py
|
|
|
445
446
|
examples/07_evonet/01_sine_approximation.py
|
|
446
447
|
examples/07_evonet/02_image_approximation.py
|
|
447
448
|
examples/07_evonet/03_structural_xor.py
|
|
448
|
-
examples/07_evonet/
|
|
449
|
+
examples/07_evonet/04_recurrent_bit_prediction.py
|
|
449
450
|
examples/07_evonet/resize_all_images.py
|
|
450
451
|
tests/test_benchmarks.py
|
|
451
452
|
tests/test_config_loader.py
|
{evolib-0.2.0b2.dev4 → evolib-0.2.0b2.dev5}/examples/02_strategies/01_step_by_step_evolution.py
RENAMED
|
@@ -74,14 +74,14 @@ pop = Pop(config_path="01_step_by_step_evolution.yaml", fitness_function=my_fitn
|
|
|
74
74
|
pop.evaluate_fitness()
|
|
75
75
|
print_indivs("0) Evaluate parents :", pop.indivs)
|
|
76
76
|
|
|
77
|
-
# Step 1)
|
|
78
|
-
pop.update_parameters()
|
|
79
|
-
print_indivs("1) Update parameters: ", pop.indivs)
|
|
80
|
-
|
|
81
|
-
# Step 2) Produce offspring by cloning
|
|
77
|
+
# Step 1) Produce offspring by cloning
|
|
82
78
|
offspring = generate_cloned_offspring(pop.indivs, pop.offspring_pool_size)
|
|
83
79
|
print_indivs("2) Reproduction (clone parents -> offspring): ", offspring)
|
|
84
80
|
|
|
81
|
+
# Step 2) Update per-generation parameters (mutation/crossover controls)
|
|
82
|
+
pop.update_parameters(offspring)
|
|
83
|
+
print_indivs("1) Update parameters: ", pop.indivs)
|
|
84
|
+
|
|
85
85
|
# Step 3) Crossover pairs (in-place)
|
|
86
86
|
crossover_offspring(pop, offspring)
|
|
87
87
|
print_indivs("3) Crossover: ", offspring)
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Example: Recurrent Bit Sequence Prediction (with LFSR)
|
|
3
|
+
|
|
4
|
+
This example demonstrates how an EvoNet with recurrent connections
|
|
5
|
+
can be evolved to predict the next bit in a pseudo-random binary sequence
|
|
6
|
+
generated by a 5-bit LFSR.
|
|
7
|
+
|
|
8
|
+
Key details:
|
|
9
|
+
- The sequence has period length 31 (maximal length LFSR).
|
|
10
|
+
- The sequence is repeated twice: first pass = warm-up, second pass = evaluation.
|
|
11
|
+
- Fitness combines mean squared error with a penalty for misclassification.
|
|
12
|
+
- Visualization shows input, target, and predictions during the evaluation phase.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from evolib import Individual, Population, plot_bit_prediction
|
|
16
|
+
from evolib.utils.benchmarks import lfsr_sequence
|
|
17
|
+
|
|
18
|
+
FRAME_FOLDER = "04_frames"
|
|
19
|
+
CONFIG_FILE = "configs/04_recurrent_bit_prediction.yaml"
|
|
20
|
+
|
|
21
|
+
SEQ_LENGTH = 31
|
|
22
|
+
warmup_steps = SEQ_LENGTH
|
|
23
|
+
|
|
24
|
+
input_seq = lfsr_sequence(SEQ_LENGTH) * 2
|
|
25
|
+
target_seq = input_seq[1:] + [input_seq[0]]
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def fitness_bitseq(indiv: Individual) -> None:
|
|
29
|
+
"""
|
|
30
|
+
Evaluate how well the EvoNet predicts the next bit in a fixed sequence.
|
|
31
|
+
|
|
32
|
+
Additionally logs classification accuracy in indiv.extra_metrics.
|
|
33
|
+
Note: Fitness combines MSE with penalty term (1-accuracy)/4
|
|
34
|
+
"""
|
|
35
|
+
net = indiv.para["brain"].net
|
|
36
|
+
net.reset(full=True)
|
|
37
|
+
|
|
38
|
+
total_error = 0.0
|
|
39
|
+
correct = 0
|
|
40
|
+
count = 0
|
|
41
|
+
|
|
42
|
+
for t in range(len(input_seq)):
|
|
43
|
+
output = net.calc([input_seq[t]])[0]
|
|
44
|
+
if t >= warmup_steps:
|
|
45
|
+
target = target_seq[t]
|
|
46
|
+
# --- MSE ---
|
|
47
|
+
error = output - target
|
|
48
|
+
total_error += error**2
|
|
49
|
+
|
|
50
|
+
# --- Accuracy ---
|
|
51
|
+
pred_bit = 1 if output > 0.5 else 0
|
|
52
|
+
if pred_bit == target:
|
|
53
|
+
correct += 1
|
|
54
|
+
count += 1
|
|
55
|
+
|
|
56
|
+
mse = total_error / count
|
|
57
|
+
acc = correct / count if count > 0 else 0.0
|
|
58
|
+
|
|
59
|
+
# Log extra metrics
|
|
60
|
+
indiv.extra_metrics = {"accuracy": acc, "mse": mse}
|
|
61
|
+
|
|
62
|
+
indiv.fitness = mse + (1 - acc) / 4
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def save_plot(pop: Population) -> None:
|
|
66
|
+
best = pop.best()
|
|
67
|
+
net = best.para["brain"].net
|
|
68
|
+
net.reset(full=True)
|
|
69
|
+
|
|
70
|
+
# Warmup
|
|
71
|
+
for bit in input_seq[:SEQ_LENGTH]:
|
|
72
|
+
net.calc([bit])
|
|
73
|
+
|
|
74
|
+
# Prediction
|
|
75
|
+
y_preds = [net.calc([bit])[0] for bit in input_seq[SEQ_LENGTH:]]
|
|
76
|
+
|
|
77
|
+
true_bits = target_seq[SEQ_LENGTH:]
|
|
78
|
+
input_bits = input_seq[SEQ_LENGTH:]
|
|
79
|
+
|
|
80
|
+
acc = best.extra_metrics.get("accuracy", 0.0)
|
|
81
|
+
mse = best.extra_metrics.get("mse", best.fitness)
|
|
82
|
+
|
|
83
|
+
print(
|
|
84
|
+
f"[Gen {pop.generation_num}] best fitness={best.fitness:.5f}, "
|
|
85
|
+
f"acc={acc:.3%}, mse={mse:.5f}"
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
plot_bit_prediction(
|
|
89
|
+
true_bits=true_bits,
|
|
90
|
+
pred_values=y_preds,
|
|
91
|
+
input_bits=input_bits,
|
|
92
|
+
title=(
|
|
93
|
+
f"Bit Prediction (gen={pop.generation_num}, "
|
|
94
|
+
f"MSE={mse:.5f}, Acc={acc:.3%})"
|
|
95
|
+
),
|
|
96
|
+
save_path=f"{FRAME_FOLDER}/gen_{pop.generation_num:03d}.png",
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
if __name__ == "__main__":
|
|
101
|
+
pop = Population(CONFIG_FILE, fitness_function=fitness_bitseq)
|
|
102
|
+
pop.run(verbosity=0, on_generation_end=save_plot)
|
|
103
|
+
|
|
104
|
+
best = pop.best()
|
|
105
|
+
best.para["brain"].net.print_graph(
|
|
106
|
+
"04_recurrent_bit_prediction", fillcolors_on=True
|
|
107
|
+
)
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "evolib"
|
|
7
|
-
version = "0.2.0b2.
|
|
7
|
+
version = "0.2.0b2.dev5"
|
|
8
8
|
description = "A modular framework for evolutionary strategies and neuroevolution."
|
|
9
9
|
authors = [
|
|
10
10
|
{ name = "EvoLib", email = "evolib@dismail.de" }
|
|
@@ -17,21 +17,21 @@ def _build_net_2_3_1(para: EvoNet) -> None:
|
|
|
17
17
|
role=NeuronRole.INPUT,
|
|
18
18
|
activation="linear",
|
|
19
19
|
count=2,
|
|
20
|
-
|
|
20
|
+
connection_init="none",
|
|
21
21
|
)
|
|
22
22
|
para.net.add_neuron(
|
|
23
23
|
layer_idx=1,
|
|
24
24
|
role=NeuronRole.HIDDEN,
|
|
25
25
|
activation="linear",
|
|
26
26
|
count=3,
|
|
27
|
-
|
|
27
|
+
connection_init="random",
|
|
28
28
|
)
|
|
29
29
|
para.net.add_neuron(
|
|
30
30
|
layer_idx=2,
|
|
31
31
|
role=NeuronRole.OUTPUT,
|
|
32
32
|
activation="linear",
|
|
33
33
|
count=1,
|
|
34
|
-
|
|
34
|
+
connection_init="random",
|
|
35
35
|
)
|
|
36
36
|
|
|
37
37
|
|
|
@@ -44,14 +44,14 @@ def _build_net_1_1(para: EvoNet) -> None:
|
|
|
44
44
|
role=NeuronRole.INPUT,
|
|
45
45
|
activation="linear",
|
|
46
46
|
count=1,
|
|
47
|
-
|
|
47
|
+
connection_init="none",
|
|
48
48
|
)
|
|
49
49
|
para.net.add_neuron(
|
|
50
50
|
layer_idx=1,
|
|
51
51
|
role=NeuronRole.OUTPUT,
|
|
52
52
|
activation="linear",
|
|
53
53
|
count=1,
|
|
54
|
-
|
|
54
|
+
connection_init="random",
|
|
55
55
|
)
|
|
56
56
|
|
|
57
57
|
|