From d91057cf973910d84d86103c69e50c6743d7524f Mon Sep 17 00:00:00 2001 From: Pascal Serrarens Date: Tue, 25 Nov 2025 16:19:26 +0100 Subject: [PATCH] WIP: NaN error because zero distance --- Assembly-CSharp-Editor.csproj | 2 +- .../{GraphEditorWindow.cs => NeuroidWindow.cs} | 16 ++++++++-------- ...ditorWindow.cs.meta => NeuroidWindow.cs.meta} | 0 Assets/NanoBrain/Neuroid.cs | 4 ++++ Assets/Scenes/Boids/Boids.unity | 4 ++-- Assets/Scenes/Boids/Scripts/Boid.cs | 9 +++------ 6 files changed, 18 insertions(+), 17 deletions(-) rename Assets/NanoBrain/Editor/{GraphEditorWindow.cs => NeuroidWindow.cs} (93%) rename Assets/NanoBrain/Editor/{GraphEditorWindow.cs.meta => NeuroidWindow.cs.meta} (100%) diff --git a/Assembly-CSharp-Editor.csproj b/Assembly-CSharp-Editor.csproj index 0750862..584a691 100644 --- a/Assembly-CSharp-Editor.csproj +++ b/Assembly-CSharp-Editor.csproj @@ -48,7 +48,7 @@ - + diff --git a/Assets/NanoBrain/Editor/GraphEditorWindow.cs b/Assets/NanoBrain/Editor/NeuroidWindow.cs similarity index 93% rename from Assets/NanoBrain/Editor/GraphEditorWindow.cs rename to Assets/NanoBrain/Editor/NeuroidWindow.cs index e66eddb..afef229 100644 --- a/Assets/NanoBrain/Editor/GraphEditorWindow.cs +++ b/Assets/NanoBrain/Editor/NeuroidWindow.cs @@ -3,7 +3,7 @@ using UnityEngine; using System.Linq; using System.Collections.Generic; -public class Layer { +public class NeuroidLayer { public int ix = 0; public List neuroids = new(); } @@ -13,7 +13,7 @@ public class GraphEditorWindow : EditorWindow { private List allNeuroids; private Dictionary neuroidPositions = new(); - private List layers = new(); + private List layers = new(); private void OnEnable() { EditorApplication.update += EditorUpdate; @@ -33,7 +33,7 @@ public class GraphEditorWindow : EditorWindow { // While there are unvisited neuroid while (neuroids.Any(neuroid => !neuronVisited.Contains(neuroid))) { // Create the next layer - Layer currentLayer = new() { ix = layerIx }; + NeuroidLayer currentLayer = new() { ix = layerIx }; int neuroidIx = 0; foreach (Neuroid neuroid in neuroids) { @@ -82,7 +82,7 @@ public class GraphEditorWindow : EditorWindow { if (currentNeuroid == null) return; - foreach (Layer layer in layers) + foreach (NeuroidLayer layer in layers) DrawLayer(layer); // int column = 100; // int row = 200; @@ -119,7 +119,7 @@ public class GraphEditorWindow : EditorWindow { // } // } - private void DrawLayer(Layer layer) { + private void DrawLayer(NeuroidLayer layer) { int column = layer.ix * 100; int nodeCount = layer.neuroids.Count; float maxValue = 0; @@ -161,7 +161,7 @@ public class GraphEditorWindow : EditorWindow { private void HandleMouseHover(Neuroid neuroid, Rect rect) { // Draw the tooltip - GUIContent tooltip = new($"{neuroid.name}\n Value: {neuroid.outputValue}"); + GUIContent tooltip = new($"{neuroid.name}\n synapse count {neuroid.synapses.Count} \n Value: {neuroid.outputValue}"); Vector2 mousePosition = Event.current.mousePosition; // Display tooltip with some offset @@ -197,8 +197,8 @@ public class GraphEditorWindow : EditorWindow { } - [MenuItem("Window/Graph Visualizer")] + [MenuItem("Window/Neuroid Visualizer")] public static void ShowWindow() { - GetWindow("Graph Visualizer"); + GetWindow("Neuroid Visualizer"); } } diff --git a/Assets/NanoBrain/Editor/GraphEditorWindow.cs.meta b/Assets/NanoBrain/Editor/NeuroidWindow.cs.meta similarity index 100% rename from Assets/NanoBrain/Editor/GraphEditorWindow.cs.meta rename to Assets/NanoBrain/Editor/NeuroidWindow.cs.meta diff --git a/Assets/NanoBrain/Neuroid.cs b/Assets/NanoBrain/Neuroid.cs index 5a40f88..1650c1c 100644 --- a/Assets/NanoBrain/Neuroid.cs +++ b/Assets/NanoBrain/Neuroid.cs @@ -98,6 +98,10 @@ public class Neuroid { } Vector3 Activation(Vector3 sum) { + if (synapses.Count == 0 && mode == Mode.Average) + Debug.LogWarning($"{this.id} {this.name} has zero synapses for average"); + if (float.IsNaN(sum.magnitude)) + Debug.LogWarning($"{this.id} {this.name} sum is nan"); return mode switch { Mode.Sum => sum, Mode.Average => sum / synapses.Count, diff --git a/Assets/Scenes/Boids/Boids.unity b/Assets/Scenes/Boids/Boids.unity index e9b5a3b..85e18e2 100644 --- a/Assets/Scenes/Boids/Boids.unity +++ b/Assets/Scenes/Boids/Boids.unity @@ -373,12 +373,12 @@ MonoBehaviour: m_EditorClassIdentifier: Assembly-CSharp::SwarmControl speed: 0.5 inertia: 0.1 - alignmentForce: 0 + alignmentForce: 1 cohesionForce: 10 separationForce: 5 separationDistance: 0.5 bodyForce: 20 - boundaryForce: 5 + boundaryForce: 2 spaceSize: {x: 10, y: 10, z: 10} boundaryWidth: {x: 1, y: 1, z: 1} --- !u!114 &301943979 diff --git a/Assets/Scenes/Boids/Scripts/Boid.cs b/Assets/Scenes/Boids/Scripts/Boid.cs index a6d660c..1f1c5d6 100644 --- a/Assets/Scenes/Boids/Scripts/Boid.cs +++ b/Assets/Scenes/Boids/Scripts/Boid.cs @@ -104,12 +104,9 @@ public class Boid : MonoBehaviour // outside distances per axis (0 if inside on that axis) Vector3 outside = Vector3.Max(Vector3.zero, Vector3.Max(below, above)); - Vector3 dir = Vector3.zero; - dir.x = (below.x > 0f) ? 1f : ((above.x > 0f) ? -1f : 0f); - dir.y = (below.y > 0f) ? 1f : ((above.y > 0f) ? -1f : 0f); - dir.z = (below.z > 0f) ? 1f : ((above.z > 0f) ? -1f : 0f); - - outside = Vector3.Scale(outside, dir); + float magnitude = outside.magnitude; + Vector3 direction = (sc.transform.position - this.transform.position).normalized; + outside = direction * magnitude; boundary.SetInput(id, outside, sc.boundaryForce); Debug.Log($"boundary {this.transform.position} {outside} force = {outside * sc.boundaryForce}");