evolib 0.2.0b4.dev8__tar.gz → 0.2.0b4.dev9__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.
Files changed (157) hide show
  1. {evolib-0.2.0b4.dev8/evolib.egg-info → evolib-0.2.0b4.dev9}/PKG-INFO +1 -1
  2. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/docs/config_guide.md +2 -2
  3. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/docs/config_parameter.md +4 -4
  4. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/config/evonet_component_config.py +9 -5
  5. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/config/vector_component_config.py +40 -9
  6. evolib-0.2.0b4.dev9/evolib/initializers/registry.py +112 -0
  7. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/interfaces/enums.py +1 -2
  8. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9/evolib.egg-info}/PKG-INFO +1 -1
  9. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/02_strategies/01_step_by_step_evolution.py +2 -2
  10. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/05_advanced_topics/06_evolving_mutation_strength_as_a_module.py +1 -1
  11. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/pyproject.toml +1 -1
  12. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/tests/test_config_loader.py +1 -1
  13. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/tests/test_evonet_neuron_dynamics.py +1 -1
  14. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/tests/test_initializer_evonet.py +2 -2
  15. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/tests/test_initializer_net.py +3 -3
  16. evolib-0.2.0b4.dev8/evolib/initializers/registry.py +0 -85
  17. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/LICENSE +0 -0
  18. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/MANIFEST.in +0 -0
  19. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/README.md +0 -0
  20. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/docs/api_core_individual.rst +0 -0
  21. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/docs/api_core_population.rst +0 -0
  22. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/docs/api_operators_crossover.rst +0 -0
  23. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/docs/api_operators_evonet_structural_mutation.rst +0 -0
  24. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/docs/api_operators_mutation.rst +0 -0
  25. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/docs/api_operators_replacement.rst +0 -0
  26. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/docs/api_operators_reproduction.rst +0 -0
  27. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/docs/api_operators_selection.rst +0 -0
  28. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/docs/api_operators_strategy.rst +0 -0
  29. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/docs/api_public_api.rst +0 -0
  30. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/docs/api_representation_evonet.rst +0 -0
  31. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/docs/api_representation_netvector.rst +0 -0
  32. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/docs/api_representation_vector.rst +0 -0
  33. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/docs/api_utils_benchmarks.rst +0 -0
  34. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/docs/api_utils_history_logger.rst +0 -0
  35. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/docs/api_utils_loss_functions.rst +0 -0
  36. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/docs/api_utils_plotting.rst +0 -0
  37. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/docs/conf.py +0 -0
  38. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/docs/getting_started.md +0 -0
  39. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/docs/index.md +0 -0
  40. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/__init__.py +0 -0
  41. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/api.py +0 -0
  42. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/config/__init__.py +0 -0
  43. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/config/base_component_config.py +0 -0
  44. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/config/component_registry.py +0 -0
  45. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/config/schema.py +0 -0
  46. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/core/README.md +0 -0
  47. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/core/__init__.py +0 -0
  48. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/core/individual.py +0 -0
  49. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/core/population.py +0 -0
  50. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/envs/gym_wrapper.py +0 -0
  51. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/globals/README.md +0 -0
  52. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/globals/__init__.py +0 -0
  53. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/globals/numeric.py +0 -0
  54. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/initializers/__init__.py +0 -0
  55. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/initializers/evonet_initializers.py +0 -0
  56. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/initializers/net_initializers.py +0 -0
  57. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/initializers/vector_initializers.py +0 -0
  58. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/interfaces/__init__.py +0 -0
  59. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/interfaces/enum_helpers.py +0 -0
  60. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/interfaces/structs.py +0 -0
  61. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/interfaces/types.py +0 -0
  62. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/io/checkpoint.py +0 -0
  63. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/io/serialization.py +0 -0
  64. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/operators/README.md +0 -0
  65. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/operators/__init__.py +0 -0
  66. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/operators/crossover.py +0 -0
  67. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/operators/evonet_structural_mutation.py +0 -0
  68. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/operators/heli.py +0 -0
  69. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/operators/mutation.py +0 -0
  70. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/operators/replacement.py +0 -0
  71. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/operators/reproduction.py +0 -0
  72. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/operators/selection.py +0 -0
  73. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/operators/strategy.py +0 -0
  74. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/registry/__init__.py +0 -0
  75. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/registry/replacement_registry.py +0 -0
  76. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/registry/selection_registry.py +0 -0
  77. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/registry/strategy_registry.py +0 -0
  78. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/representation/__init__.py +0 -0
  79. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/representation/_apply_config_mapping.py +0 -0
  80. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/representation/base.py +0 -0
  81. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/representation/composite.py +0 -0
  82. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/representation/dummy.py +0 -0
  83. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/representation/evo_params.py +0 -0
  84. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/representation/evonet.py +0 -0
  85. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/representation/netvector.py +0 -0
  86. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/representation/vector.py +0 -0
  87. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/utils/README.md +0 -0
  88. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/utils/__init__.py +0 -0
  89. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/utils/benchmarks.py +0 -0
  90. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/utils/config_loader.py +0 -0
  91. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/utils/fitness.py +0 -0
  92. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/utils/heli_experiment_logger.py +0 -0
  93. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/utils/heli_utils.py +0 -0
  94. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/utils/history_logger.py +0 -0
  95. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/utils/lineage_logger.py +0 -0
  96. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/utils/loss_functions.py +0 -0
  97. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/utils/parallel.py +0 -0
  98. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/utils/plotting.py +0 -0
  99. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/utils/random.py +0 -0
  100. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib/utils/registry.py +0 -0
  101. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib.egg-info/SOURCES.txt +0 -0
  102. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib.egg-info/dependency_links.txt +0 -0
  103. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib.egg-info/requires.txt +0 -0
  104. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/evolib.egg-info/top_level.txt +0 -0
  105. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/01_basic_usage/01_getting_started.py +0 -0
  106. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/01_basic_usage/02_mutation.py +0 -0
  107. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/01_basic_usage/03_population_mutation.py +0 -0
  108. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/01_basic_usage/04_fitness.py +0 -0
  109. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/02_strategies/02_mu_lambda_step.py +0 -0
  110. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/02_strategies/03_mu_lambda.py +0 -0
  111. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/02_strategies/04_flexible.py +0 -0
  112. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/03_comparisons/01_history.py +0 -0
  113. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/03_comparisons/02_plotting.py +0 -0
  114. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/03_comparisons/03_compare_runs.py +0 -0
  115. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/03_comparisons/04_exponential_decay_vs_static.py +0 -0
  116. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/03_comparisons/05_adaptive_global_vs_static.py +0 -0
  117. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/03_comparisons/06_adaptive_individual_vs_static.py +0 -0
  118. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/03_comparisons/07_selection_comparison.py +0 -0
  119. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/03_comparisons/08_selection_pressure.py +0 -0
  120. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/03_comparisons/09_selection_vs_mutation_pressure.py +0 -0
  121. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/03_comparisons/10_selection_stochastic_vs_deterministic.py +0 -0
  122. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/03_comparisons/11_crossover_comparison.py +0 -0
  123. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/04_function_approximation/01_polynomial_sine.py +0 -0
  124. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/04_function_approximation/02_sine_point_approximation.py +0 -0
  125. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/04_function_approximation/03_approximation_with_noise.py +0 -0
  126. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/05_advanced_topics/01_fitness_landscape_exploration.py +0 -0
  127. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/05_advanced_topics/02_rosenbrock_surface_path.py +0 -0
  128. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/05_advanced_topics/03_vector_control.py +0 -0
  129. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/05_advanced_topics/04_vector_control_with_obstacles.py +0 -0
  130. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/05_advanced_topics/05_piecewise_linear_xsys.py +0 -0
  131. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/06_netvector/01_netvector_sine_approximation.py +0 -0
  132. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/06_netvector/02_netvector_modulated_output.py +0 -0
  133. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/06_netvector/03_netvector_gain_and_bias.py +0 -0
  134. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/07_evonet/01_sine_approximation.py +0 -0
  135. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/07_evonet/02_sine_delay.py +0 -0
  136. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/07_evonet/03_delay_bitseq_echo.py +0 -0
  137. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/07_evonet/04_leaky_temporal_smoothing.py +0 -0
  138. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/07_evonet/05_image_approximation.py +0 -0
  139. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/07_evonet/06_structural_xor.py +0 -0
  140. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/07_evonet/07_recurrent_bit_prediction.py +0 -0
  141. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/07_evonet/08_recurrent_timeseries.py +0 -0
  142. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/07_evonet/09_recurrent_trading.py +0 -0
  143. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/08_gym/01_frozen_lake.py +0 -0
  144. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/08_gym/02_cliff_walking.py +0 -0
  145. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/08_gym/03_cartpole.py +0 -0
  146. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/08_gym/04_lunar_lander.py +0 -0
  147. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/08_gym/05_bipedal_walker.py +0 -0
  148. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/09_meta_learning/01_lamarck_linear_mapping.py +0 -0
  149. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/examples/09_meta_learning/02_meta_mapping_baldwin.py +0 -0
  150. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/setup.cfg +0 -0
  151. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/tests/test_benchmarks.py +0 -0
  152. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/tests/test_elitism_preserves_best_fitness.py +0 -0
  153. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/tests/test_evonet_deepcopy.py +0 -0
  154. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/tests/test_evonet_vector_io.py +0 -0
  155. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/tests/test_mutation.py +0 -0
  156. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/tests/test_population.py +0 -0
  157. {evolib-0.2.0b4.dev8 → evolib-0.2.0b4.dev9}/tests/test_selection.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: evolib
3
- Version: 0.2.0b4.dev8
3
+ Version: 0.2.0b4.dev9
4
4
  Summary: A modular framework for evolutionary strategies and neuroevolution.
5
5
  Author-email: EvoLib <evolib@dismail.de>
6
6
  License: MIT License
@@ -30,7 +30,7 @@ evolution:
30
30
  modules:
31
31
  test-vector: # logical module name
32
32
  type: vector
33
- initializer: random_vector
33
+ initializer: uniform
34
34
  dim: 2
35
35
  bounds: [-1.0, 1.0]
36
36
 
@@ -89,7 +89,7 @@ modules:
89
89
  xs:
90
90
  type: vector
91
91
  dim: 6
92
- initializer: random_vector
92
+ initializer: uniform
93
93
  bounds: [0.0, 6.283185307] # [0, 2π]
94
94
  mutation:
95
95
  strategy: adaptive_individual
@@ -152,7 +152,7 @@ The `vector` module defines an evolvable parameter vector.
152
152
  | `type` | `"vector"` | — | Module type identifier. |
153
153
  | `dim` | `int \| list[int]` | — | Vector length (`int`) or structured dimensions (`list[int]`). Must be > 0. |
154
154
  | `structure` | `"flat" \| "net" | `"flat"` | Structural interpretation of the vector. |
155
- | `initializer` | `str` | — | Initializer name from the registry (e.g. `random_vector`, `zero_vector`, `normal_vector`, `fixed_vector`). |
155
+ | `initializer` | `str` | — | Initializer name from the registry (e.g. `uniform`, `zero`, `normal`, `fixed`). |
156
156
  | `bounds` | `tuple[float, float]` | `[-1.0, 1.0]` | Hard clamp range applied after mutation. |
157
157
  | `init_bounds` | `tuple[float, float] \| null` | `null` | Clamp applied only during initialization. Falls back to `bounds` if not set. |
158
158
  | `shape` | `tuple[int, ...] \| null` | `null` | Optional explicit shape. If set, `dim = product(shape)`. Shape is retained as metadata. |
@@ -232,7 +232,7 @@ modules:
232
232
  main:
233
233
  type: vector
234
234
  dim: 8
235
- initializer: random_vector
235
+ initializer: uniform
236
236
  bounds: [-1.0, 1.0]
237
237
 
238
238
  mutation:
@@ -288,7 +288,7 @@ modules:
288
288
  |-------------------|---------------------|---------|-------------|
289
289
  | `dim` | list[int] | — | Layer sizes, e.g. `[4, 0, 0, 2]`. Hidden layers can start empty (0) and grow through structural mutation. |
290
290
  | `activation` | str \| list[str] | — | If list: activation per layer. If str: used for non-input layers; input layer is treated as linear. |
291
- | `initializer` | str | default_evonet | Topology preset (e.g. `default_evonet`, `unconnected_evonet`, `identity_evonet`). Parameter initialization is configured via `weights`, `bias`, and `delay`. |
291
+ | `initializer` | str | default | Topology preset (e.g. `default`, `unconnected`, `identity`). Parameter initialization is configured via `weights`, `bias`, and `delay`. |
292
292
  | `weights` | dict | — | Weight init and bounds configuration (initializer, bounds, optional params). |
293
293
  | `bias` | dict | — | Bias init and bounds configuration (initializer, bounds, optional params). |
294
294
  | `neuron_dynamics` | list[dict] \| null | null | Optional per-layer neuron dynamics specification. Must match `len(dim)`. |
@@ -324,7 +324,7 @@ Allowed presets:
324
324
 
325
325
  | Initializer | Meaning (topology only) |
326
326
  |------------------------|-------------------------|
327
- | `default_evonet` | Standard EvoNet topology preset (uses `connection_scope`, `connection_density`, and `recurrent`). |
327
+ | `default` | Standard EvoNet topology preset (uses `connection_scope`, `connection_density`, and `recurrent`). |
328
328
  | `unconnected_evonet` | Creates neurons/layers but starts with **no connections** (use structural mutation to grow). |
329
329
  | `identity_evonet` | Special preset intended for stable recurrent memory (may override parameters internally; see notes below). |
330
330
 
@@ -30,6 +30,7 @@ from evolib.config.base_component_config import (
30
30
  EvoNetNeuronDynamicsConfig,
31
31
  StructuralMutationConfig,
32
32
  )
33
+ from evolib.interfaces.enums import RepresentationType
33
34
 
34
35
  Bounds = Tuple[float, float]
35
36
 
@@ -208,7 +209,10 @@ class EvoNetComponentConfig(BaseModel):
208
209
  model_config = ConfigDict(extra="forbid")
209
210
 
210
211
  # Module type is fixed to "evonet"
211
- type: Literal["evonet"] = "evonet"
212
+ type: RepresentationType = Field(
213
+ default=RepresentationType.EVONET,
214
+ description='Fixed module discriminator; must be "evonet" for this schema.',
215
+ )
212
216
 
213
217
  # Layer structure: list of neuron counts per layer [input, hidden..., output]
214
218
  dim: list[int]
@@ -228,7 +232,7 @@ class EvoNetComponentConfig(BaseModel):
228
232
 
229
233
  # Name of the initializer function (resolved via initializer registry)
230
234
  initializer: str = Field(
231
- default="default_evonet", description="Name of the initializer to use"
235
+ default="default", description="Name of the initializer to use"
232
236
  )
233
237
 
234
238
  # Connection topology for initialization
@@ -276,9 +280,9 @@ class EvoNetComponentConfig(BaseModel):
276
280
  Parameter initialization is handled exclusively via weights/bias/delay blocks.
277
281
  """
278
282
  allowed = {
279
- "default_evonet",
280
- "unconnected_evonet",
281
- "identity_evonet",
283
+ "default",
284
+ "unconnected",
285
+ "identity",
282
286
  }
283
287
 
284
288
  if name not in allowed:
@@ -1,7 +1,14 @@
1
1
  # SPDX-License-Identifier: MIT
2
2
  from typing import Any, Literal, Optional, Tuple, Union
3
3
 
4
- from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
4
+ from pydantic import (
5
+ BaseModel,
6
+ ConfigDict,
7
+ Field,
8
+ ValidationInfo,
9
+ field_validator,
10
+ model_validator,
11
+ )
5
12
 
6
13
  from evolib.config.base_component_config import CrossoverConfig, MutationConfig
7
14
  from evolib.interfaces.enums import RepresentationType
@@ -21,7 +28,7 @@ class VectorComponentConfig(BaseModel):
21
28
  type: vector
22
29
  structure: flat # "flat" | "net"
23
30
  dim: 16 # or a list for structured cases
24
- initializer: random_vector # name from the initializer registry
31
+ initializer: normal # name from the initializer registry
25
32
  bounds: [-1.0, 1.0]
26
33
  mutation:
27
34
  strategy: constant
@@ -86,7 +93,7 @@ class VectorComponentConfig(BaseModel):
86
93
  values: Optional[list[float]] = Field(
87
94
  default=None,
88
95
  description=(
89
- "Explicit values for 'fixed_vector' initializer. If 'dim' is absent it "
96
+ "Explicit values for 'fixed' initializer. If 'dim' is absent it "
90
97
  "will be inferred from the length of 'values'."
91
98
  ),
92
99
  )
@@ -102,7 +109,6 @@ class VectorComponentConfig(BaseModel):
102
109
 
103
110
  # Evolution (mutation / crossover)
104
111
  mutation: MutationConfig = Field(
105
- default=None,
106
112
  description=(
107
113
  "Mutation configuration. By default, 'probability' is an element-wise rate "
108
114
  "(per gene) in [0,1]; operators may optionally treat it as an apply gate."
@@ -143,18 +149,16 @@ class VectorComponentConfig(BaseModel):
143
149
  @classmethod
144
150
  def set_dim_for_fixed_vector(cls, config: dict[str, Any]) -> dict[str, Any]:
145
151
  """
146
- If using 'fixed_vector', ensure 'values' is provided and infer 'dim' if absent.
152
+ If using 'fixed', ensure 'values' is provided and infer 'dim' if absent.
147
153
 
148
154
  This keeps YAML concise and catches common mistakes early.
149
155
  """
150
156
  initializer = config.get("initializer")
151
157
  values = config.get("values")
152
158
 
153
- if initializer == "fixed_vector":
159
+ if initializer == "fixed":
154
160
  if not values:
155
- raise ValueError(
156
- "When using 'fixed_vector', 'values' must be provided."
157
- )
161
+ raise ValueError("When using 'fixed', 'values' must be provided.")
158
162
  if "dim" not in config:
159
163
  config["dim"] = len(values)
160
164
  return config
@@ -181,3 +185,30 @@ class VectorComponentConfig(BaseModel):
181
185
  else:
182
186
  raise TypeError("dim must be an int or list of ints")
183
187
  return dim
188
+
189
+ @field_validator("initializer")
190
+ @classmethod
191
+ def validate_initializer(cls, name: str, info: ValidationInfo) -> str:
192
+ """Validate allowed initializer names and provide clear errors for deprecated
193
+ names."""
194
+ if not isinstance(name, str) or not name.strip():
195
+ raise ValueError("initializer must be a non-empty string")
196
+
197
+ name = name.strip()
198
+
199
+ allowed = {"normal", "uniform", "zero", "fixed", "adaptive"}
200
+ if name not in allowed:
201
+ raise ValueError(
202
+ f"Unknown initializer '{name}'. " f"Allowed: {sorted(allowed)}"
203
+ )
204
+
205
+ # structure-aware check (only if structure is available in the data)
206
+ data = info.data or {}
207
+ structure = data.get("structure") or "flat"
208
+ if structure == "net" and name != "normal":
209
+ raise ValueError(
210
+ "For structure='net', initializer must be 'normal' "
211
+ "(use initializer: normal and structure: net)."
212
+ )
213
+
214
+ return name
@@ -0,0 +1,112 @@
1
+ # SPDX-License-Identifier: MIT
2
+ from __future__ import annotations
3
+
4
+ from collections.abc import Callable
5
+ from typing import Any
6
+
7
+ from evolib.config.schema import FullConfig
8
+
9
+ # EvoNet presets
10
+ from evolib.initializers.evonet_initializers import (
11
+ initializer_default_evonet,
12
+ initializer_identity_evonet,
13
+ initializer_unconnected_evonet,
14
+ )
15
+
16
+ # NetVector initializer (Vector with structure='net')
17
+ from evolib.initializers.net_initializers import initializer_normal_net
18
+
19
+ # Vector initializers
20
+ from evolib.initializers.vector_initializers import (
21
+ initializer_adaptive_vector,
22
+ initializer_fixed_vector,
23
+ initializer_normal_vector,
24
+ initializer_random_vector,
25
+ initializer_zero_vector,
26
+ )
27
+ from evolib.interfaces.enums import RepresentationType
28
+ from evolib.interfaces.types import ModuleConfig
29
+ from evolib.representation.base import ParaBase
30
+ from evolib.representation.composite import ParaComposite
31
+
32
+ InitializerFunction = Callable[[FullConfig, str], ParaBase]
33
+
34
+
35
+ def _resolve_vector_initializer(name: str, *, structure: str) -> InitializerFunction:
36
+ """
37
+ Resolve vector initializer by name and structure.
38
+
39
+ Design:
40
+ - 'structure: net' uses the NetVector-compatible initializer for 'normal'
41
+ - all other cases use vector initializers
42
+ """
43
+ name = str(name)
44
+ structure = str(structure or "flat")
45
+
46
+ match name:
47
+ case "normal":
48
+ if structure == "net":
49
+ return initializer_normal_net
50
+ return initializer_normal_vector
51
+ case "uniform":
52
+ return initializer_random_vector
53
+ case "zero":
54
+ return initializer_zero_vector
55
+ case "fixed":
56
+ return initializer_fixed_vector
57
+ case "adaptive":
58
+ return initializer_adaptive_vector
59
+ case _:
60
+ raise ValueError(
61
+ f"Unknown vector initializer '{name}'. "
62
+ "Allowed: normal, uniform, zero, fixed, adaptive."
63
+ )
64
+
65
+
66
+ def _resolve_evonet_initializer(name: str) -> InitializerFunction:
67
+ """Resolve EvoNet topology presets via initializer name."""
68
+ name = str(name)
69
+
70
+ match name:
71
+ case "default":
72
+ return initializer_default_evonet
73
+ case "unconnected":
74
+ return initializer_unconnected_evonet
75
+ case "identity":
76
+ return initializer_identity_evonet
77
+ case _:
78
+ raise ValueError(
79
+ f"Unknown evonet initializer '{name}'. "
80
+ "Allowed: default, unconnected, identity."
81
+ )
82
+
83
+
84
+ def resolve_initializer_fn(cfg: ModuleConfig) -> InitializerFunction:
85
+ """Resolve initializer function based on module type."""
86
+ mod_type = getattr(cfg, "type", None)
87
+ init_name = getattr(cfg, "initializer", None)
88
+ if init_name is None:
89
+ raise ValueError("module.initializer must be set")
90
+
91
+ match mod_type:
92
+ case RepresentationType.VECTOR:
93
+ structure = getattr(cfg, "structure", "flat") or "flat"
94
+ return _resolve_vector_initializer(str(init_name), structure=str(structure))
95
+ case RepresentationType.EVONET:
96
+ return _resolve_evonet_initializer(str(init_name))
97
+ case _:
98
+ raise ValueError(f"Unsupported module type: {mod_type!r}")
99
+
100
+
101
+ def build_composite_initializer(config: FullConfig) -> Callable[[Any], ParaBase]:
102
+ """Build a composite initializer used by Pop to create Para instances for each
103
+ module."""
104
+
105
+ def _init(_: Any) -> ParaBase:
106
+ modules: dict[str, ParaBase] = {}
107
+ for module_name, module_cfg in config.modules.items():
108
+ fn = resolve_initializer_fn(module_cfg)
109
+ modules[module_name] = fn(config, module_name)
110
+ return ParaComposite(modules)
111
+
112
+ return _init
@@ -20,8 +20,7 @@ class Origin(Enum):
20
20
 
21
21
  class RepresentationType(Enum):
22
22
  VECTOR = "vector"
23
- # NET = "net"
24
- # HYBRID = "hybrid"
23
+ EVONET = "evonet"
25
24
 
26
25
 
27
26
  class EvolutionStrategy(Enum):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: evolib
3
- Version: 0.2.0b4.dev8
3
+ Version: 0.2.0b4.dev9
4
4
  Summary: A modular framework for evolutionary strategies and neuroevolution.
5
5
  Author-email: EvoLib <evolib@dismail.de>
6
6
  License: MIT License
@@ -39,7 +39,7 @@ import numpy as np
39
39
  from evolib import Indiv, Pop, mse_loss, simple_quadratic
40
40
  from evolib.operators.crossover import crossover_offspring
41
41
  from evolib.operators.mutation import mutate_offspring
42
- from evolib.operators.replacement import replace_mu_lambda
42
+ from evolib.operators.replacement import replace_mu_plus_lambda
43
43
  from evolib.operators.reproduction import generate_cloned_offspring
44
44
 
45
45
  np.random.seed(42)
@@ -95,7 +95,7 @@ pop.evaluate_indivs(offspring)
95
95
  print_indivs("5) Evaluate offspring: ", offspring)
96
96
 
97
97
  # Step 6) Replacement (μ from parents + offspring)
98
- replace_mu_lambda(pop, pop.indivs + offspring)
98
+ replace_mu_plus_lambda(pop, pop.indivs + offspring)
99
99
  print_indivs("6) Replacement: ", pop.indivs)
100
100
 
101
101
  # Step 7) Stats / logging (increments generation)
@@ -71,7 +71,7 @@ def mu_plus_lambda_step(pop: Pop) -> None:
71
71
 
72
72
  def run() -> None:
73
73
  np.random.seed(42)
74
- pop = Pop("new.yaml", fitness_function=eval_fitness)
74
+ pop = Pop("06_evolving_mutation_strength_as_a_module.yaml", fitness_function=eval_fitness)
75
75
  # initial eval
76
76
  for ind in pop.indivs:
77
77
  eval_fitness(ind)
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "evolib"
7
- version = "0.2.0b4.dev8"
7
+ version = "0.2.0b4.dev9"
8
8
  description = "A modular framework for evolutionary strategies and neuroevolution."
9
9
  authors = [
10
10
  { name = "EvoLib", email = "evolib@dismail.de" }
@@ -20,7 +20,7 @@ def minimal_config_yaml(tmp_path: Path) -> Path:
20
20
  "main": {
21
21
  "type": "vector",
22
22
  "dim": 4,
23
- "initializer": "zero_initializer",
23
+ "initializer": "zero",
24
24
  "bounds": [-1.0, 1.0],
25
25
  "mutation": {
26
26
  "strategy": "constant",
@@ -47,7 +47,7 @@ def test_neuron_dynamics_applied_to_neurons() -> None:
47
47
  "type": "evonet",
48
48
  "dim": [1, 3, 1],
49
49
  "activation": ["linear", "tanh", "tanh"],
50
- "initializer": "default_evonet",
50
+ "initializer": "default",
51
51
  "recurrent": "local",
52
52
  "connection_scope": "adjacent",
53
53
  "connection_density": 1.0,
@@ -1,5 +1,5 @@
1
1
  from evolib.config.schema import FullConfig
2
- from evolib.initializers.registry import get_initializer
2
+ from evolib.initializers.registry import _resolve_evonet_initializer
3
3
  from evolib.representation.evonet import EvoNet
4
4
 
5
5
 
@@ -34,7 +34,7 @@ def test_default_initializer_evonet_builds_expected_structure() -> None:
34
34
  },
35
35
  )
36
36
 
37
- init_fn = get_initializer("default_evonet")
37
+ init_fn = _resolve_evonet_initializer("default")
38
38
  para = init_fn(config, "brain")
39
39
  assert isinstance(para, EvoNet)
40
40
  net = para.net
@@ -3,7 +3,7 @@ from typing import cast
3
3
  import numpy as np
4
4
 
5
5
  from evolib.config.schema import FullConfig
6
- from evolib.initializers.registry import get_initializer
6
+ from evolib.initializers.registry import _resolve_vector_initializer
7
7
  from evolib.representation.netvector import NetVector
8
8
  from evolib.representation.vector import Vector
9
9
 
@@ -27,7 +27,7 @@ def test_normal_initializer_netvector_builds_expected_structure() -> None:
27
27
  "structure": "net",
28
28
  "dim": layer_dims,
29
29
  "activation": activation,
30
- "initializer": "normal_vector",
30
+ "initializer": "normal",
31
31
  "bounds": (-1.0, 1.0),
32
32
  "init_bounds": (-1.0, 1.0),
33
33
  "mean": 0.0,
@@ -41,7 +41,7 @@ def test_normal_initializer_netvector_builds_expected_structure() -> None:
41
41
  },
42
42
  )
43
43
 
44
- init_fn = get_initializer("normal_net")
44
+ init_fn = _resolve_vector_initializer("normal", structure="net")
45
45
  para = cast(Vector, init_fn(config, "brain"))
46
46
 
47
47
  # Check shape and size
@@ -1,85 +0,0 @@
1
- # SPDX-License-Identifier: MIT
2
- """
3
- Provides access to registered parameter initializers based on their name and
4
- configuration.
5
-
6
- This module dispatches initializer functions based on a string identifier
7
- (e.g. "normal_initializer") and the associated module name within FullConfig.
8
-
9
- Usage:
10
- init_fn = get_initializer("ininitializer_normal_vector")
11
- para = init_fn(config, module="brain")
12
- """
13
-
14
- from typing import Any, Callable
15
-
16
- from evolib.config.schema import FullConfig
17
-
18
- # EvoNet-based initializer
19
- from evolib.initializers.evonet_initializers import (
20
- initializer_default_evonet,
21
- initializer_identity_evonet,
22
- initializer_unconnected_evonet,
23
- )
24
-
25
- # NetVector-based initializer
26
- from evolib.initializers.net_initializers import initializer_normal_net
27
-
28
- # Vector-based initializers
29
- from evolib.initializers.vector_initializers import (
30
- initializer_adaptive_vector,
31
- initializer_fixed_vector,
32
- initializer_normal_vector,
33
- initializer_random_vector,
34
- initializer_zero_vector,
35
- )
36
- from evolib.representation.base import ParaBase
37
- from evolib.representation.composite import ParaComposite
38
-
39
- # Typalias for initializer function
40
- InitializerFunction = Callable[[FullConfig, str], ParaBase]
41
-
42
-
43
- # Registry of known initializer functions
44
- INITIALIZER_REGISTRY: dict[str, InitializerFunction] = {
45
- "normal_vector": initializer_normal_vector,
46
- "random_vector": initializer_random_vector,
47
- "zero_vector": initializer_zero_vector,
48
- "fixed_vector": initializer_fixed_vector,
49
- "adaptive_vector": initializer_adaptive_vector,
50
- "normal_net": initializer_normal_net,
51
- "default_evonet": initializer_default_evonet,
52
- "identity_evonet": initializer_identity_evonet,
53
- "unconnected_evonet": initializer_unconnected_evonet,
54
- }
55
-
56
-
57
- def get_initializer(name: str) -> InitializerFunction:
58
- """
59
- Returns the initializer function for the given name.
60
-
61
- Args:
62
- name (str): Identifier of the initializer (must match registry)
63
-
64
- Returns:
65
- Callable[[FullConfig, str], ParaBase]: Initializer function
66
-
67
- Raises:
68
- ValueError: If the name is not registered
69
- """
70
- if name not in INITIALIZER_REGISTRY:
71
- raise ValueError(f"Unknown initializer: '{name}'")
72
-
73
- return INITIALIZER_REGISTRY[name]
74
-
75
-
76
- def build_composite_initializer(config: FullConfig) -> Callable[[Any], ParaComposite]:
77
- def initializer(_: Any) -> ParaComposite:
78
- return ParaComposite(
79
- {
80
- name: get_initializer(config.modules[name].initializer)(config, name)
81
- for name in config.modules
82
- }
83
- )
84
-
85
- return initializer
File without changes
File without changes
File without changes
File without changes