evolib 0.2.0b2.dev3__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.dev3/evolib.egg-info → evolib-0.2.0b2.dev5}/PKG-INFO +1 -1
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/individual.py +42 -9
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/population.py +37 -21
- evolib-0.2.0b2.dev5/evolib/initializers/evonet_initializers.py +144 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/registry.py +7 -1
- evolib-0.2.0b2.dev5/evolib/interfaces/enum_helpers.py +31 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/operators/crossover.py +13 -20
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/operators/evonet_structural_mutation.py +2 -14
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/operators/reproduction.py +7 -8
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/operators/selection.py +14 -17
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/operators/strategy.py +10 -10
- evolib-0.2.0b2.dev5/evolib/representation/dummy.py +31 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/evonet.py +7 -47
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/utils/benchmarks.py +98 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/utils/plotting.py +3 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5/evolib.egg-info}/PKG-INFO +1 -1
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib.egg-info/SOURCES.txt +3 -2
- {evolib-0.2.0b2.dev3 → 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.dev3 → evolib-0.2.0b2.dev5}/pyproject.toml +1 -1
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/tests/test_evonet_vector_io.py +5 -5
- evolib-0.2.0b2.dev3/evolib/initializers/evonet_initializers.py +0 -27
- evolib-0.2.0b2.dev3/evolib/utils/copy_indiv.py +0 -20
- evolib-0.2.0b2.dev3/examples/07_evonet/04_recurrent_bitseq.py +0 -103
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/LICENSE +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/MANIFEST.in +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/README.md +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/docs/api_core_individual.rst +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/docs/api_core_population.rst +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/docs/api_operators_crossover.rst +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/docs/api_operators_evonet_structural_mutation.rst +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/docs/api_operators_mutation.rst +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/docs/api_operators_replacement.rst +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/docs/api_operators_reproduction.rst +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/docs/api_operators_selection.rst +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/docs/api_operators_strategy.rst +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/docs/api_public_api.rst +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/docs/api_representation_evonet.rst +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/docs/api_representation_netvector.rst +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/docs/api_representation_vector.rst +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/docs/api_utils_benchmarks.rst +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/docs/api_utils_history_logger.rst +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/docs/api_utils_loss_functions.rst +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/docs/api_utils_plotting.rst +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/docs/conf.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/docs/config_guide.md +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/docs/config_parameter.md +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/docs/getting_started.md +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/docs/index.md +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/PIL/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/annotated_types/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/asyncio/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/collections/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/concurrent/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/ctypes/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/cycler/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/email/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/evolib/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/evolib/config/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/evolib/registry/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/evolib/representation/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/html/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/importlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/jinja2/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/json/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/logging/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/markdown_it/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/markdown_it/common/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/markdown_it/helpers/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/markdown_it/presets/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/markdown_it/rules_block/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/markdown_it/rules_core/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/markdown_it/rules_inline/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/mdurl/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/os/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/packaging/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/pydantic/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/pydantic/_internal/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/pydantic/deprecated/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/pydantic/plugin/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/pydantic/v1/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/pydantic_core/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/rich/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/sys/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/typing_inspection/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/unittest/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/urllib/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/xml/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/yaml/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/zipfile/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/3.12/zoneinfo/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/.mypy_cache/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/api.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/config/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/config/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/config/base_component_config.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/config/component_registry.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/config/evonet_component_config.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/config/schema.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/config/vector_component_config.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/PIL/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/asyncio/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/collections/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/concurrent/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/ctypes/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/cycler/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/email/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/evolib/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/html/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/importlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/jinja2/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/json/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/logging/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/os/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/packaging/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/sys/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/unittest/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/urllib/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/xml/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/yaml/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/zipfile/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/.mypy_cache/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/README.md +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/core/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/globals/README.md +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/globals/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/globals/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/globals/numeric.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/PIL/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/asyncio/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/collections/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/concurrent/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/ctypes/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/cycler/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/email/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/evolib/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/html/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/importlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/jinja2/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/json/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/logging/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/os/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/packaging/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/sys/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/unittest/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/urllib/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/xml/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/yaml/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/zipfile/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/.mypy_cache/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/net_initializers.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/initializers/vector_initializers.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/interfaces/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/interfaces/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/interfaces/enums.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/interfaces/structs.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/interfaces/types.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/io/checkpoint.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/io/serialization.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/operators/README.md +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/operators/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/operators/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/operators/mutation.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/operators/replacement.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/registry/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/registry/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/registry/replacement_registry.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/registry/selection_registry.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/registry/strategy_registry.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/PIL/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/annotated_types/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/asyncio/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/collections/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/concurrent/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/ctypes/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/cycler/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/email/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/evolib/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/evolib/config/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/evolib/registry/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/evolib/representation/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/html/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/importlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/jinja2/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/json/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/logging/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/markdown_it/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/markdown_it/common/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/markdown_it/helpers/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/markdown_it/presets/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_block/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_core/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_inline/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/mdurl/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/os/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/packaging/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/pydantic/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/pydantic/_internal/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/pydantic/deprecated/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/pydantic/plugin/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/pydantic/v1/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/pydantic_core/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/rich/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/sys/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/typing_inspection/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/unittest/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/urllib/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/xml/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/yaml/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/zipfile/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/3.12/zoneinfo/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/.mypy_cache/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/_apply_config_mapping.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/base.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/composite.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/evo_params.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/netvector.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/representation/vector.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/utils/README.md +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/utils/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/utils/config_loader.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/utils/fitness.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/utils/history_logger.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/utils/loss_functions.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/utils/random.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib/utils/registry.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib.egg-info/dependency_links.txt +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib.egg-info/requires.txt +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/evolib.egg-info/top_level.txt +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/01_basic_usage/01_getting_started.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/01_basic_usage/02_mutation.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/01_basic_usage/03_population_mutation.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/01_basic_usage/04_fitness.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/02_strategies/02_mu_lambda_step.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/02_strategies/03_mu_lambda.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/02_strategies/04_flexible.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/03_comparisons/01_history.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/03_comparisons/02_plotting.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/03_comparisons/03_compare_runs.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/03_comparisons/04_exponential_decay_vs_static.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/03_comparisons/05_adaptive_global_vs_static.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/03_comparisons/06_adaptive_individual_vs_static.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/03_comparisons/07_selection_comparison.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/03_comparisons/08_selection_pressure.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/03_comparisons/09_selection_vs_mutation_pressure.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/03_comparisons/10_selection_stochastic_vs_deterministic.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/03_comparisons/11_crossover_comparison.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/04_function_approximation/01_polynomial_sine.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/04_function_approximation/02_sine_point_approximation.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/04_function_approximation/03_approximation_with_noise.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/05_advanced_topics/01_fitness_landscape_exploration.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/05_advanced_topics/02_rosenbrock_surface_path.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/05_advanced_topics/03_vector_control.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/05_advanced_topics/04_vector_control_with_obstacles.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/05_advanced_topics/05_piecewise_linear_xsys.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/05_advanced_topics/06_evolving_mutation_strength_as_a_module.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/06_netvector/01_netvector_sine_approximation.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/06_netvector/02_netvector_modulated_output.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/06_netvector/03_netvector_gain_and_bias.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/07_evonet/01_sine_approximation.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/07_evonet/02_image_approximation.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/07_evonet/03_structural_xor.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/examples/07_evonet/resize_all_images.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/setup.cfg +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/tests/test_benchmarks.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/tests/test_config_loader.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/tests/test_elitism_preserves_best_fitness.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/tests/test_initializer_evonet.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/tests/test_initializer_net.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/tests/test_mutation.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/tests/test_population.py +0 -0
- {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev5}/tests/test_selection.py +0 -0
|
@@ -21,15 +21,17 @@ Classes:
|
|
|
21
21
|
|
|
22
22
|
from copy import deepcopy
|
|
23
23
|
from typing import Any, Dict, Optional
|
|
24
|
+
from uuid import uuid4
|
|
24
25
|
|
|
25
26
|
from evolib.interfaces.enums import Origin
|
|
27
|
+
from evolib.representation.dummy import ParaDummy
|
|
26
28
|
|
|
27
29
|
|
|
28
30
|
class Indiv:
|
|
29
31
|
"""Represents an individual in an evolutionary optimization algorithm."""
|
|
30
32
|
|
|
31
|
-
#: para (Any
|
|
32
|
-
para: Any
|
|
33
|
+
#: para (Any): Parameter values of the individual. Default: None.
|
|
34
|
+
para: Any
|
|
33
35
|
|
|
34
36
|
#: fitness (float): Fitness value of the individual.
|
|
35
37
|
#: None means the individual has not yet been evaluated.
|
|
@@ -60,6 +62,7 @@ class Indiv:
|
|
|
60
62
|
extra_metrics: dict[str, float]
|
|
61
63
|
|
|
62
64
|
__slots__ = (
|
|
65
|
+
"id",
|
|
63
66
|
"para",
|
|
64
67
|
"fitness",
|
|
65
68
|
"is_evaluated",
|
|
@@ -72,7 +75,8 @@ class Indiv:
|
|
|
72
75
|
)
|
|
73
76
|
|
|
74
77
|
def __init__(self, para: Any = None):
|
|
75
|
-
self.
|
|
78
|
+
self.id: str = str(uuid4())
|
|
79
|
+
self.para = para if para is not None else ParaDummy()
|
|
76
80
|
self.fitness = None
|
|
77
81
|
self.is_evaluated = False
|
|
78
82
|
self.age = 0
|
|
@@ -160,14 +164,43 @@ class Indiv:
|
|
|
160
164
|
"""Return True if the individual is an offspring."""
|
|
161
165
|
return self.origin == Origin.OFFSPRING
|
|
162
166
|
|
|
163
|
-
def copy(
|
|
167
|
+
def copy(
|
|
168
|
+
self,
|
|
169
|
+
*,
|
|
170
|
+
reset_id: bool = True,
|
|
171
|
+
reset_fitness: bool = False,
|
|
172
|
+
reset_age: bool = False,
|
|
173
|
+
reset_evaluation: bool = False,
|
|
174
|
+
reset_origin: bool = False,
|
|
175
|
+
) -> "Indiv":
|
|
164
176
|
"""
|
|
165
|
-
Create a copy of the individual.
|
|
177
|
+
Create a copy of the individual, with optional resets.
|
|
166
178
|
|
|
167
|
-
|
|
168
|
-
|
|
179
|
+
Args:
|
|
180
|
+
reset_id (bool): If True (default), assign a new unique ID to the copy.
|
|
181
|
+
reset_fitness (bool): If True, set fitness to None in the copy.
|
|
182
|
+
reset_age (bool): If True, set age to 0 in the copy.
|
|
183
|
+
reset_evaluation (bool): If True, set is_evaluated = False in the copy.
|
|
184
|
+
reset_origin (bool): If True, set origin = Origin.OFFSPRING
|
|
185
|
+
and parent_idx = None in the copy.
|
|
169
186
|
|
|
170
187
|
Returns:
|
|
171
|
-
Indiv: A copy of this individual.
|
|
188
|
+
Indiv: A (possibly reset) copy of this individual.
|
|
172
189
|
"""
|
|
173
|
-
|
|
190
|
+
new_indiv: Indiv = deepcopy(self)
|
|
191
|
+
|
|
192
|
+
if reset_id:
|
|
193
|
+
new_indiv.id = str(uuid4())
|
|
194
|
+
if reset_fitness:
|
|
195
|
+
new_indiv.fitness = None
|
|
196
|
+
if reset_age:
|
|
197
|
+
new_indiv.age = 0
|
|
198
|
+
if reset_evaluation:
|
|
199
|
+
new_indiv.is_evaluated = False
|
|
200
|
+
if reset_origin:
|
|
201
|
+
from evolib.interfaces.enums import Origin
|
|
202
|
+
|
|
203
|
+
new_indiv.origin = Origin.OFFSPRING
|
|
204
|
+
new_indiv.parent_idx = None
|
|
205
|
+
|
|
206
|
+
return new_indiv
|
|
@@ -208,6 +208,10 @@ class Pop:
|
|
|
208
208
|
para = init_fn(self)
|
|
209
209
|
self.add_indiv(Indiv(para=para))
|
|
210
210
|
|
|
211
|
+
# initialize adaptive parameters for initial parents
|
|
212
|
+
if self.indivs:
|
|
213
|
+
self.update_parameters(self.indivs)
|
|
214
|
+
|
|
211
215
|
def set_fitness_function(self, func: FitnessFunction) -> None:
|
|
212
216
|
"""
|
|
213
217
|
Sets the fitness function to be used for evaluating individuals.
|
|
@@ -567,7 +571,7 @@ class Pop:
|
|
|
567
571
|
|
|
568
572
|
self.history_logger.reset()
|
|
569
573
|
|
|
570
|
-
def update_parameters(self) -> None:
|
|
574
|
+
def update_parameters(self, indivs: list[Indiv]) -> None:
|
|
571
575
|
"""
|
|
572
576
|
Update all strategy-dependent parameters for the current generation.
|
|
573
577
|
|
|
@@ -577,43 +581,54 @@ class Pop:
|
|
|
577
581
|
ValueError or AttributeError if the population or its individuals
|
|
578
582
|
are invalid.
|
|
579
583
|
"""
|
|
580
|
-
self.update_mutation_parameters()
|
|
581
|
-
self.update_crossover_parameters()
|
|
584
|
+
self.update_mutation_parameters(indivs)
|
|
585
|
+
self.update_crossover_parameters(indivs)
|
|
582
586
|
|
|
583
|
-
def update_mutation_parameters(self) -> None:
|
|
587
|
+
def update_mutation_parameters(self, indivs: list[Indiv]) -> None:
|
|
584
588
|
"""
|
|
585
|
-
|
|
586
|
-
|
|
589
|
+
Update mutation-related parameters for a given set of individuals via their
|
|
590
|
+
`para` objects.
|
|
587
591
|
|
|
588
|
-
|
|
589
|
-
|
|
592
|
+
Typical usage:
|
|
593
|
+
- During population initialization: called once on all parents to ensure
|
|
594
|
+
they start with valid adaptive parameters.
|
|
595
|
+
- During evolution: called on offspring *before* mutation, so that new
|
|
596
|
+
individuals use up-to-date parameters (e.g. annealing schedules).
|
|
590
597
|
|
|
591
|
-
|
|
592
|
-
|
|
598
|
+
Notes:
|
|
599
|
+
- Parents are not updated in every generation. They keep the parameters
|
|
600
|
+
assigned at initialization, ensuring selection acts on stable values.
|
|
601
|
+
- Offspring are updated once per generation, prior to mutation.
|
|
593
602
|
"""
|
|
594
|
-
|
|
603
|
+
|
|
604
|
+
for indiv in indivs:
|
|
605
|
+
assert indiv.para is not None
|
|
595
606
|
indiv.para.update_mutation_parameters(
|
|
596
607
|
self.generation_num, self.max_generations, self.diversity_ema
|
|
597
608
|
)
|
|
598
609
|
|
|
599
|
-
def update_crossover_parameters(self) -> None:
|
|
610
|
+
def update_crossover_parameters(self, indivs: list[Indiv]) -> None:
|
|
600
611
|
"""
|
|
601
|
-
|
|
612
|
+
Update crossover-related parameters for a given set of individuals.
|
|
602
613
|
|
|
603
|
-
|
|
604
|
-
|
|
614
|
+
Typical usage:
|
|
615
|
+
- During population initialization: called once on all parents to ensure
|
|
616
|
+
they start with valid crossover parameters.
|
|
617
|
+
- During evolution: called on offspring *before* crossover, so that new
|
|
618
|
+
individuals use up-to-date parameters (e.g. annealing schedules or
|
|
619
|
+
adaptive rates).
|
|
605
620
|
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
621
|
+
Notes:
|
|
622
|
+
- Parents are not updated in every generation. They keep the parameters
|
|
623
|
+
assigned at initialization, ensuring selection acts on stable values.
|
|
624
|
+
- Offspring are updated once per generation, prior to crossover.
|
|
610
625
|
"""
|
|
611
|
-
if not
|
|
626
|
+
if not indivs:
|
|
612
627
|
raise ValueError(
|
|
613
628
|
"Population is empty – cannot update crossover parameters."
|
|
614
629
|
)
|
|
615
630
|
|
|
616
|
-
for indiv in
|
|
631
|
+
for indiv in indivs:
|
|
617
632
|
if not hasattr(indiv, "para") or not hasattr(
|
|
618
633
|
indiv.para, "update_crossover_parameters"
|
|
619
634
|
):
|
|
@@ -622,6 +637,7 @@ class Pop:
|
|
|
622
637
|
"with 'update_crossover_parameters' method."
|
|
623
638
|
)
|
|
624
639
|
|
|
640
|
+
assert indiv.para is not None
|
|
625
641
|
indiv.para.update_crossover_parameters(
|
|
626
642
|
self.generation_num,
|
|
627
643
|
self.max_generations,
|
|
@@ -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
|
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
from typing import Optional, Set
|
|
4
|
+
|
|
5
|
+
from evonet.enums import RecurrentKind
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def resolve_recurrent_kinds(preset: Optional[str]) -> Set[RecurrentKind]:
|
|
9
|
+
"""
|
|
10
|
+
Map a preset string to the corresponding set of recurrent connection types.
|
|
11
|
+
|
|
12
|
+
Parameters
|
|
13
|
+
----------
|
|
14
|
+
preset : Optional[str]
|
|
15
|
+
One of: "none", "direct", "local", "all", or None.
|
|
16
|
+
|
|
17
|
+
Returns
|
|
18
|
+
-------
|
|
19
|
+
Set[RecurrentKind]
|
|
20
|
+
A set of recurrent kinds to use.
|
|
21
|
+
"""
|
|
22
|
+
if preset is None or preset == "none":
|
|
23
|
+
return set()
|
|
24
|
+
elif preset == "direct":
|
|
25
|
+
return {RecurrentKind.DIRECT}
|
|
26
|
+
elif preset == "local":
|
|
27
|
+
return {RecurrentKind.DIRECT, RecurrentKind.LATERAL}
|
|
28
|
+
elif preset == "all":
|
|
29
|
+
return {RecurrentKind.DIRECT, RecurrentKind.LATERAL, RecurrentKind.INDIRECT}
|
|
30
|
+
else:
|
|
31
|
+
raise ValueError(f"Unknown recurrent preset: {preset}")
|
|
@@ -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
|
+
)
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import numpy as np
|
|
4
4
|
from evonet.core import Nnet
|
|
5
|
-
from evonet.enums import NeuronRole
|
|
5
|
+
from evonet.enums import NeuronRole
|
|
6
6
|
from evonet.mutation import (
|
|
7
7
|
add_random_connection,
|
|
8
8
|
add_random_neuron,
|
|
@@ -12,19 +12,7 @@ from evonet.mutation import (
|
|
|
12
12
|
)
|
|
13
13
|
|
|
14
14
|
from evolib.config.base_component_config import StructuralMutationConfig
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
def resolve_recurrent_kinds(preset: str | None) -> set[RecurrentKind]:
|
|
18
|
-
if preset == "none" or preset is None:
|
|
19
|
-
return set()
|
|
20
|
-
elif preset == "direct":
|
|
21
|
-
return {RecurrentKind.DIRECT}
|
|
22
|
-
elif preset == "local":
|
|
23
|
-
return {RecurrentKind.DIRECT, RecurrentKind.LATERAL}
|
|
24
|
-
elif preset == "all":
|
|
25
|
-
return {RecurrentKind.DIRECT, RecurrentKind.LATERAL, RecurrentKind.INDIRECT}
|
|
26
|
-
else:
|
|
27
|
-
raise ValueError(f"Unknown recurrent preset: {preset}")
|
|
15
|
+
from evolib.interfaces.enum_helpers import resolve_recurrent_kinds
|
|
28
16
|
|
|
29
17
|
|
|
30
18
|
def mutate_structure(net: Nnet, cfg: StructuralMutationConfig) -> None:
|
|
@@ -4,9 +4,6 @@ from typing import Any, List
|
|
|
4
4
|
|
|
5
5
|
import numpy as np
|
|
6
6
|
|
|
7
|
-
from evolib.interfaces.enums import Origin
|
|
8
|
-
from evolib.utils.copy_indiv import copy_indiv
|
|
9
|
-
|
|
10
7
|
|
|
11
8
|
def generate_cloned_offspring(parents: List[Any], lambda_: int) -> List[Any]:
|
|
12
9
|
"""
|
|
@@ -37,11 +34,13 @@ def generate_cloned_offspring(parents: List[Any], lambda_: int) -> List[Any]:
|
|
|
37
34
|
|
|
38
35
|
for idx in parent_indices:
|
|
39
36
|
parent = parents[idx]
|
|
40
|
-
child =
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
37
|
+
child = parent.copy(
|
|
38
|
+
reset_id=True,
|
|
39
|
+
reset_fitness=True,
|
|
40
|
+
reset_age=True,
|
|
41
|
+
reset_evaluation=True,
|
|
42
|
+
reset_origin=True,
|
|
43
|
+
)
|
|
45
44
|
child.parent_idx = idx
|
|
46
45
|
offspring.append(child)
|
|
47
46
|
|
|
@@ -12,10 +12,9 @@ Included methods:
|
|
|
12
12
|
- Truncation Selection
|
|
13
13
|
|
|
14
14
|
All methods operate on a population of individuals with assigned fitness values and
|
|
15
|
-
return
|
|
15
|
+
return copies of selected parents.
|
|
16
16
|
"""
|
|
17
17
|
|
|
18
|
-
import copy
|
|
19
18
|
import random
|
|
20
19
|
from typing import TYPE_CHECKING, Any, List, Optional
|
|
21
20
|
|
|
@@ -124,7 +123,7 @@ def selection_tournament(
|
|
|
124
123
|
)
|
|
125
124
|
|
|
126
125
|
# Kopie des besten Individuums hinzufuegen
|
|
127
|
-
selected_parents.append(
|
|
126
|
+
selected_parents.append(pop.indivs[best_idx].copy())
|
|
128
127
|
|
|
129
128
|
# Entfernen, falls gewuenscht
|
|
130
129
|
if remove_selected:
|
|
@@ -159,7 +158,7 @@ def selection_rank_based(
|
|
|
159
158
|
Default: False (minimization).
|
|
160
159
|
|
|
161
160
|
Returns:
|
|
162
|
-
List[Any]: List of selected individuals (
|
|
161
|
+
List[Any]: List of selected individuals (copies).
|
|
163
162
|
|
|
164
163
|
Raises:
|
|
165
164
|
ValueError: If parameters are invalid (e.g., empty population,
|
|
@@ -181,8 +180,6 @@ def selection_rank_based(
|
|
|
181
180
|
if mode == "exponential" and exp_base is None:
|
|
182
181
|
raise ValueError("exp_base must be set when using exponential rank selection.")
|
|
183
182
|
|
|
184
|
-
exp_base = 1.0
|
|
185
|
-
|
|
186
183
|
fitnesses = [indiv.fitness for indiv in pop.indivs]
|
|
187
184
|
if any(f is None or np.isnan(f) for f in fitnesses):
|
|
188
185
|
raise TypeError("All fitness values must be valid (not None or NaN)")
|
|
@@ -222,7 +219,7 @@ def selection_rank_based(
|
|
|
222
219
|
# Select an individual based on rank probability
|
|
223
220
|
list_index = np.random.choice(population_size, p=probabilities)
|
|
224
221
|
selected_idx = available_indices[list_index]
|
|
225
|
-
selected_parents.append(
|
|
222
|
+
selected_parents.append(pop.indivs[selected_idx].copy())
|
|
226
223
|
|
|
227
224
|
# Optionally remove selected individual
|
|
228
225
|
if remove_selected:
|
|
@@ -260,13 +257,13 @@ def selection_random(pop: "Pop", remove_selected: bool = False) -> List[Indiv]:
|
|
|
260
257
|
|
|
261
258
|
# Randomly select individual from the population
|
|
262
259
|
selected_parent = random.choice(available_indivs)
|
|
263
|
-
parent = copy
|
|
260
|
+
parent = selected_parent.copy()
|
|
264
261
|
|
|
265
262
|
# Append the best individual to offspring
|
|
266
263
|
selected_parents.append(parent)
|
|
267
264
|
|
|
268
265
|
if remove_selected:
|
|
269
|
-
available_indivs.remove(
|
|
266
|
+
available_indivs.remove(selected_parent)
|
|
270
267
|
|
|
271
268
|
return selected_parents
|
|
272
269
|
|
|
@@ -282,7 +279,7 @@ def selection_roulette(
|
|
|
282
279
|
fitness_maximization (bool): If True, higher fitness is better.
|
|
283
280
|
|
|
284
281
|
Returns:
|
|
285
|
-
List[Any]: List of selected individuals (
|
|
282
|
+
List[Any]: List of selected individuals (copies).
|
|
286
283
|
"""
|
|
287
284
|
if not pop.indivs:
|
|
288
285
|
raise ValueError("Population is empty")
|
|
@@ -302,7 +299,7 @@ def selection_roulette(
|
|
|
302
299
|
probabilities = fitnesses / total_fitness
|
|
303
300
|
indices = np.random.choice(len(pop.indivs), size=num_parents, p=probabilities)
|
|
304
301
|
|
|
305
|
-
return [
|
|
302
|
+
return [pop.indivs[i].copy() for i in indices]
|
|
306
303
|
|
|
307
304
|
|
|
308
305
|
def selection_sus(
|
|
@@ -316,7 +313,7 @@ def selection_sus(
|
|
|
316
313
|
fitness_maximization (bool): If True, higher fitness is better.
|
|
317
314
|
|
|
318
315
|
Returns:
|
|
319
|
-
List[Any]: Selected individuals (
|
|
316
|
+
List[Any]: Selected individuals (copies).
|
|
320
317
|
"""
|
|
321
318
|
if not pop.indivs:
|
|
322
319
|
raise ValueError("Population is empty")
|
|
@@ -345,7 +342,7 @@ def selection_sus(
|
|
|
345
342
|
for p in pointers:
|
|
346
343
|
while p > cumulative[i]:
|
|
347
344
|
i += 1
|
|
348
|
-
selected.append(
|
|
345
|
+
selected.append(pop.indivs[i].copy())
|
|
349
346
|
|
|
350
347
|
return selected
|
|
351
348
|
|
|
@@ -365,7 +362,7 @@ def selection_boltzmann(
|
|
|
365
362
|
fitness_maximization (bool): If True, higher fitness is better.
|
|
366
363
|
|
|
367
364
|
Returns:
|
|
368
|
-
List[Any]: Selected individuals (
|
|
365
|
+
List[Any]: Selected individuals (copies).
|
|
369
366
|
"""
|
|
370
367
|
if not pop.indivs:
|
|
371
368
|
raise ValueError("Population is empty")
|
|
@@ -388,7 +385,7 @@ def selection_boltzmann(
|
|
|
388
385
|
probabilities = exp_values / np.sum(exp_values)
|
|
389
386
|
|
|
390
387
|
indices = np.random.choice(len(pop.indivs), size=num_parents, p=probabilities)
|
|
391
|
-
return [
|
|
388
|
+
return [pop.indivs[i].copy() for i in indices]
|
|
392
389
|
|
|
393
390
|
|
|
394
391
|
def selection_truncation(
|
|
@@ -402,7 +399,7 @@ def selection_truncation(
|
|
|
402
399
|
fitness_maximization (bool): If True, selects best fitness; else lowest.
|
|
403
400
|
|
|
404
401
|
Returns:
|
|
405
|
-
List[Any]: Selected individuals (
|
|
402
|
+
List[Any]: Selected individuals (copies).
|
|
406
403
|
"""
|
|
407
404
|
|
|
408
405
|
if not pop.indivs:
|
|
@@ -419,4 +416,4 @@ def selection_truncation(
|
|
|
419
416
|
sorted_indices = sorted_indices[::-1]
|
|
420
417
|
|
|
421
418
|
selected_indices = sorted_indices[:num_parents]
|
|
422
|
-
return [
|
|
419
|
+
return [pop.indivs[i].copy() for i in selected_indices]
|