Exemple #1
0
        public Neuron(int id, CnnNet cnnNet,
                      IEnumerable <AxonGuidanceForceBase> axonGuidanceForces,
                      IEnumerable <SomaGuidanceForceBase> somaGuidanceForces,
                      NeuronType type)
        {
            Contract.Requires <ArgumentException>(id >= 0);
            Contract.Requires <ArgumentNullException>(cnnNet != null);
            Contract.Requires <ArgumentNullException>(axonGuidanceForces != null);
            Contract.Requires <ArgumentNullException>(somaGuidanceForces != null);

            Id            = id;
            Network       = cnnNet;
            AxonWayPoints = new List <NeuronAxonWaypoint>
            {
                new NeuronAxonWaypoint(1, this, new Point(PosX, PosY))
            };
            AxonGuidanceForces = new ReadOnlyCollection <AxonGuidanceForceBase>(axonGuidanceForces.ToList());
            SomaGuidanceForces = new ReadOnlyCollection <SomaGuidanceForceBase>(somaGuidanceForces.ToList());

            Type = type;
            HasSomaReachedFinalPosition = Type == NeuronType.Input || Type == NeuronType.Output;
            HasAxonReachedFinalPosition = Type == NeuronType.Output;

            _synapses = new List <DendricSynapse>();
            _synapsesActivationHistory = new FixedSizedQueue <DendricSynapse[]>(cnnNet.NeuronActivityHistoryLength);
            _random = new Random();
        }
Exemple #2
0
        public ViewerNetworkUndesirability(CnnNet network)
            : base(network.Width, network.Height, true)
        {
            Contract.Requires <ArgumentNullException>(network != null);

            _network = network;
        }
Exemple #3
0
        public Neuron(int id, CnnNet cnnNet, 
			IEnumerable<AxonGuidanceForceBase> axonGuidanceForces, 
			IEnumerable<SomaGuidanceForceBase> somaGuidanceForces,
			NeuronType type)
        {
            Contract.Requires<ArgumentException>(id >= 0);
            Contract.Requires<ArgumentNullException>(cnnNet != null);
            Contract.Requires<ArgumentNullException>(axonGuidanceForces != null);
            Contract.Requires<ArgumentNullException>(somaGuidanceForces != null);

            Id = id;
            Network = cnnNet;
            AxonWayPoints = new List<NeuronAxonWaypoint>
            {
                new NeuronAxonWaypoint(1, this, new Point(PosX, PosY))
            };
            AxonGuidanceForces = new ReadOnlyCollection<AxonGuidanceForceBase>(axonGuidanceForces.ToList());
            SomaGuidanceForces = new ReadOnlyCollection<SomaGuidanceForceBase>(somaGuidanceForces.ToList());

            Type = type;
            HasSomaReachedFinalPosition = Type == NeuronType.Input || Type == NeuronType.Output;
            HasAxonReachedFinalPosition = Type == NeuronType.Output;

            _synapses = new List<DendricSynapse>();
            _synapsesActivationHistory = new FixedSizedQueue<DendricSynapse[]>(cnnNet.NeuronActivityHistoryLength);
            _random = new Random();
        }
Exemple #4
0
        public static Neuron[] GetNeuronsWithinRange(int posX, int posY, CnnNet network, int range)
        {
            var result = new List <Neuron>();

            int minX = Math.Max(posX - range, 0);
            int maxX = Math.Min(posX + range, network.Width - 1);

            int minY = Math.Max(posY - range, 0);
            int maxY = Math.Min(posY + range, network.Height - 1);

            for (int y = minY; y < maxY; y++)
            {
                for (int x = minX; x < maxX; x++)
                {
                    if ((x == posX && y == posY) ||
                        GetDistance(posX, posY, x, y) > range)
                    {
                        continue;
                    }

                    var neuron = GetNeuronAt(y, x, network);

                    if (neuron != null)
                    {
                        result.Add(neuron);
                    }
                }
            }

            return(result.ToArray());
        }
Exemple #5
0
        public static Neuron GetClosestNeuronsWithinRange(int posX, int posY, CnnNet network, int range)
        {
            Neuron result = null;

            int minX = Math.Max(posX - range, 0);
            int maxX = Math.Min(posX + range, network.Width - 1);

            int minY = Math.Max(posY - range, 0);
            int maxY = Math.Min(posY + range, network.Height - 1);

            double minDistance = double.MaxValue;

            for (int y = minY; y < maxY; y++)
            {
                for (int x = minX; x < maxX; x++)
                {
                    double distance;
                    if ((distance = GetDistance(posX, posY, x, y)) > range ||
                        distance > minDistance)
                    {
                        continue;
                    }

                    var neuron = GetNeuronAt(y, x, network);
                    if (neuron != null)
                    {
                        minDistance = distance;
                        result      = neuron;
                    }
                }
            }

            return(result);
        }
        protected GuidanceForceBase(int guidanceForceRange, CnnNet network)
        {
            Contract.Requires <ArgumentOutOfRangeException>(guidanceForceRange > 0);
            Contract.Requires <ArgumentNullException>(network != null);

            GuidanceForceRange  = guidanceForceRange;
            Network             = network;
            GuidanceForceHeight = GuidanceForceWidth = 2 * GuidanceForceRange + 1;
        }
        public ViewerManagerNetwork(CnnNet network)
            : base(network.Width, network.Height)
        {
            Contract.Requires <ArgumentNullException>(network != null);

            _network              = network;
            _neuronIconDestRect   = new Rect(0, 0, Resources.NeuronIdle.PixelWidth, Resources.NeuronIdle.PixelHeight);
            _neuronIconSourceRect = new Rect(0, 0, Resources.NeuronIdle.PixelWidth, Resources.NeuronIdle.PixelHeight);
        }
Exemple #8
0
        protected GuidanceForceBase(int guidanceForceRange, CnnNet network)
        {
            Contract.Requires<ArgumentOutOfRangeException>(guidanceForceRange > 0);
            Contract.Requires<ArgumentNullException>(network != null);

            GuidanceForceRange = guidanceForceRange;
            Network = network;
            GuidanceForceHeight = GuidanceForceWidth = 2 * GuidanceForceRange + 1;
        }
        public PushPullBoxActivityGenerator(CnnNet network, 
            IEnumerable<Neuron> inputNeurons, IEnumerable<Neuron> outputNeurons)
        {
            Contract.Requires<ArgumentNullException>(network != null);
            Contract.Requires<ArgumentNullException>(inputNeurons != null);
            Contract.Requires<ArgumentNullException>(outputNeurons != null);

            _network = network;
            _inputNeurons = inputNeurons;
            _outputNeurons = outputNeurons;

            _remainingActivations = _network.NeuronInputMaxConsecutiveActivations;
        }
        public PushPullBoxActivityGenerator(CnnNet network,
                                            IEnumerable <Neuron> inputNeurons, IEnumerable <Neuron> outputNeurons)
        {
            Contract.Requires <ArgumentNullException>(network != null);
            Contract.Requires <ArgumentNullException>(inputNeurons != null);
            Contract.Requires <ArgumentNullException>(outputNeurons != null);

            _network       = network;
            _inputNeurons  = inputNeurons;
            _outputNeurons = outputNeurons;

            _remainingActivations = _network.NeuronInputMaxConsecutiveActivations;
        }
Exemple #11
0
        private void OnWindowLoaded(object sender, RoutedEventArgs e)
        {
            Network = new CnnNet(Constants.NetworkWidth, Constants.NetworkHeight);

            #region Viewer Network

            InitializeViewer(_viewerManager = new ViewerManagerNetwork(Network),
                             new ViewerBase[]
            {
                _viewerDesirability   = new ViewerNetworkDesirability(Network),
                _viewerUndesirability = new ViewerNetworkUndesirability(Network)
            },
                             ImageNetwork);
            _viewerManager.NeuronSelectedChanged += OnViewerManagerNeuronSelectedChanged;

            #endregion

            #region Viewer Axon Terminal Guidance Forces

            InitializeViewer
                (_viewerManagerAxonTerminal = new ViewerManager
                                                  (Constants.AxonGuidanceForcesImageWidth, Constants.AxonGuidanceForcesImageHeight, true),
                new ViewerBase[]
            {
                _viewerAxonTerminalGuidanceForces = new ViewerGuidanceForce(Network.AxonGuidanceForces.ElementAt(0), ColorIndex.Green)
            }, ImageAxonTerminalGuidanceForces);

            #endregion

            #region Viewer Soma Guidance Forces

            InitializeViewer
                (_viewerManagerSoma = new ViewerManager
                                          (Constants.SomaGuidanceForcesImageWidth, Constants.SomaGuidanceForcesImageHeight, true),
                new ViewerBase[]
            {
                _viewerSomaDesirabilityMapGuidanceForce = new ViewerGuidanceForce(Network.SomaGuidanceForces.ElementAt(0), ColorIndex.Green)
            }, ImageSomaDesirabilityMapGuidanceForce);

            #endregion

            Network.ActiveNeuronGenerator = cboxGenerateInput.IsChecked.Value
                ? Network.NormalActiveNeuronGenerator
                : Network.BindedActiveNeuronGenerator;

            CompositionTarget.Rendering += OnCompositionTargetRendering;
        }
 protected SomaGuidanceForceBase(CnnNet network)
     : base(network.SomaGuidanceForceSearchPlainRange, network)
 {
     Contract.Requires<ArgumentNullException>(network != null);
 }
Exemple #13
0
 public static Neuron GetNeuronAt(int y, int x, CnnNet network)
 {
     return(network.NeuronPositionMap[y, x]);
 }
Exemple #14
0
        /// <summary>
        /// Remember to optimize this by using spiral matrix processing
        /// http://pastebin.com/4EYJvv5X
        /// </summary>
        /// <param name="referenceY"></param>
        /// <param name="referenceX"></param>
        /// <param name="neuron"></param>
        /// <returns></returns>
        public static double GetDistanceToNearestNeuron(int referenceY, int referenceX, Neuron neuron, CnnNet network)
        {
            double minDistance = network.MinDistanceBetweenNeurons + 1;

            int xMin = Math.Max(referenceX - network.MinDistanceBetweenNeurons, 0);
            int xMax = Math.Min(referenceX + network.MinDistanceBetweenNeurons, network.Width - 1);
            int yMin = Math.Max(referenceY - network.MinDistanceBetweenNeurons, 0);
            int yMax = Math.Min(referenceY + network.MinDistanceBetweenNeurons, network.Height - 1);

            for (int y = yMin; y <= yMax; y++)
            {
                for (int x = xMin; x < xMax; x++)
                {
                    if (network.NeuronPositionMap[y, x] != null &&
                        network.NeuronPositionMap[y, x] != neuron)
                    {
                        var distance = Extensions.GetDistance(referenceX, referenceY, x, y);
                        if (minDistance > distance)
                        {
                            minDistance = distance;
                        }
                    }
                }
            }

            return(minDistance);
        }
Exemple #15
0
        public static Neuron[] GetNeuronsWithAxonTerminalWithinRange(int posX, int posY, CnnNet network, int range)
        {
            int minX = Math.Max(posX - range, 0);
            int maxX = Math.Min(posX + range, network.Width - 1);

            int minY = Math.Max(posY - range, 0);
            int maxY = Math.Min(posY + range, network.Height - 1);

            return(network.Neurons.Where
                       (neuron => neuron.PosX != posX &&
                       neuron.PosY != posY &&
                       neuron.HasAxonReachedFinalPosition &&
                       minX <= neuron.AxonTerminal.X && neuron.AxonTerminal.X <= maxX &&
                       minY <= neuron.AxonTerminal.Y && neuron.AxonTerminal.Y <= maxY &&
                       GetDistance(neuron.AxonTerminal.X, neuron.AxonTerminal.Y, posX, posY) <= range).ToArray());
        }
 public AxonFollowExistingGuidanceForce(CnnNet network)
     : base(network)
 {
     Contract.Requires <ArgumentNullException>(network != null);
 }
 public AxonFollowExistingGuidanceForce(CnnNet network)
     : base(network)
 {
     Contract.Requires<ArgumentNullException>(network != null);
 }
 public SomaDesirabilityMapGuidanceForce(CnnNet network)
     : base(network)
 {
     Contract.Requires <ArgumentNullException>(network != null);
 }
 protected AxonGuidanceForceBase(CnnNet network)
     : base(network.AxonGuidanceForceSearchPlainRange, network)
 {
     Contract.Requires <ArgumentNullException>(network != null);
 }
 public AxonUndesirabilityMapGuidanceForce(CnnNet network)
     : base(network)
 {
     Contract.Requires<ArgumentNullException>(network != null);
 }