evonet 0.1.0.dev12__tar.gz → 0.1.0.dev13__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 (27) hide show
  1. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/PKG-INFO +1 -1
  2. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/evonet/core.py +2 -2
  3. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/evonet/mutation.py +32 -9
  4. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/evonet.egg-info/PKG-INFO +1 -1
  5. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/pyproject.toml +1 -1
  6. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/LICENSE +0 -0
  7. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/README.md +0 -0
  8. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/evonet/__init__.py +0 -0
  9. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/evonet/activation.py +0 -0
  10. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/evonet/connection.py +0 -0
  11. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/evonet/core_mit_plot_simple.py +0 -0
  12. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/evonet/enums.py +0 -0
  13. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/evonet/io.py +0 -0
  14. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/evonet/layer.py +0 -0
  15. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/evonet/neuron.py +0 -0
  16. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/evonet/serialization.py +0 -0
  17. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/evonet/utils.py +0 -0
  18. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/evonet/visualize.py +0 -0
  19. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/evonet.egg-info/SOURCES.txt +0 -0
  20. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/evonet.egg-info/dependency_links.txt +0 -0
  21. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/evonet.egg-info/requires.txt +0 -0
  22. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/evonet.egg-info/top_level.txt +0 -0
  23. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/setup.cfg +0 -0
  24. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/tests/test_activation.py +0 -0
  25. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/tests/test_core.py +0 -0
  26. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/tests/test_nnet_io_and_forward.py +0 -0
  27. {evonet-0.1.0.dev12 → evonet-0.1.0.dev13}/tests/test_recurrent_dynamics.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: evonet
3
- Version: 0.1.0.dev12
3
+ Version: 0.1.0.dev13
4
4
  Summary: Evolvable neural network core for integration with EvoLib
5
5
  Author-email: EvoLib <evolib@dismail.de>
6
6
  License: MIT License
@@ -230,12 +230,12 @@ class Nnet:
230
230
  Args:
231
231
  source (Neuron): Source neuron.
232
232
  target (Neuron): Target neuron.
233
- weight (float | None): Initial weight. If None, random value is used.
233
+ weight (float | None): Initial weight. If None, 0.0 is used.
234
234
  conn_type (ConnectionType): Type of connection (e.g. standard, recurrent).
235
235
  """
236
236
 
237
237
  if weight is None:
238
- weight = np.random.randn() * 0.5
238
+ weight = 0.0
239
239
 
240
240
  conn = Connection(source, target, weight=weight, conn_type=conn_type)
241
241
  source.outgoing.append(conn)
@@ -152,21 +152,44 @@ def mutate_biases(net: Nnet, probability: float = 1.0, std: float = 0.1) -> None
152
152
  def add_random_connection(
153
153
  net: Nnet,
154
154
  allowed_recurrent: Optional[Collection[RecurrentKind | str]] = None,
155
+ connection_init: Literal["zero", "random", "near_zero"] = "zero",
155
156
  ) -> bool:
156
157
  """
157
158
  Add a valid connection between two randomly chosen neurons.
158
159
 
159
160
  Rules:
160
- - disallow connections into INPUT neurons
161
- - disallow duplicate (source, target) pairs
162
- - classify connection type by layer order:
163
- * src_layer < dst_layer -> STANDARD
164
- * src_layer >= dst_layer -> RECURRENT
165
-
166
- Recurrent edges are filtered by allowed_recurrent
167
- (list of 'direct' | 'lateral' | 'indirect').
161
+ - Disallow connections into INPUT neurons.
162
+ - Disallow duplicate (source, target) pairs.
163
+ - Classify connection type by layer order:
164
+ * src_layer < dst_layer -> STANDARD
165
+ * src_layer >= dst_layer -> RECURRENT
166
+ - Recurrent edges are filtered by `allowed_recurrent`
167
+ (list of 'direct' | 'lateral' | 'indirect').
168
+
169
+ Args:
170
+ net (Nnet): Target network to modify.
171
+ allowed_recurrent (Collection[RecurrentKind | str] | None):
172
+ Allowed recurrent connection kinds. Default: None (no recurrent edges).
173
+ connection_init (Literal["zero", "random", "near_zero"]):
174
+ Weight initialization mode for the new connection.
175
+ - "zero": Weight = 0.0 (neutral; ideal with HELI)
176
+ - "random": Weight ~ N(0, 0.5)
177
+ - "near_zero": Weight ~ U(-0.05, 0.05)
178
+
179
+ Returns:
180
+ bool: True if a connection was added, False otherwise.
168
181
  """
169
182
 
183
+ # Weight initialization
184
+ if connection_init == "zero":
185
+ weight = 0.0
186
+ elif connection_init == "random":
187
+ weight = np.random.randn() * 0.5
188
+ elif connection_init == "near_zero":
189
+ weight = np.random.uniform(-0.05, 0.05)
190
+ else:
191
+ raise ValueError(f"Unknown init mode: {connection_init}")
192
+
170
193
  # normalize to set[RecurrentKind]
171
194
  kinds: set[RecurrentKind] = set()
172
195
  if allowed_recurrent:
@@ -223,7 +246,7 @@ def add_random_connection(
223
246
  else ConnectionType.RECURRENT
224
247
  )
225
248
 
226
- net.add_connection(src, dst, conn_type=conn_type)
249
+ net.add_connection(src, dst, weight=weight, conn_type=conn_type)
227
250
  return True
228
251
 
229
252
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: evonet
3
- Version: 0.1.0.dev12
3
+ Version: 0.1.0.dev13
4
4
  Summary: Evolvable neural network core for integration with EvoLib
5
5
  Author-email: EvoLib <evolib@dismail.de>
6
6
  License: MIT License
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "evonet"
7
- version = "0.1.0.dev12"
7
+ version = "0.1.0.dev13"
8
8
  description = "Evolvable neural network core for integration with EvoLib"
9
9
  authors = [
10
10
  { name = "EvoLib", email = "evolib@dismail.de" }
File without changes
File without changes
File without changes
File without changes