コード例 #1
0
ファイル: Neurone.cs プロジェクト: Sorenly/neuron
        private void GetGraphOrder(out OneToManyMap <GraphMap <FeatureVector, WeightMatrix> .ILinkable, Pair <GraphMap <FeatureVector, WeightMatrix> .ILinkable, GraphMap <FeatureVector, WeightMatrix> .Link <WeightMatrix> > > backwards, out Queue <GraphMap <FeatureVector, WeightMatrix> .ILinkable> inputVectors, out Queue <GraphMap <FeatureVector, WeightMatrix> .ILinkable> outputVectors)
        {
            backwards = new OneToManyMap <GraphMap <FeatureVector, WeightMatrix> .ILinkable, Pair <GraphMap <FeatureVector, WeightMatrix> .ILinkable, GraphMap <FeatureVector, WeightMatrix> .Link <WeightMatrix> > >();

            // Just to keep track of the frontier
            Queue <GraphMap <FeatureVector, WeightMatrix> .ILinkable> queue = new Queue <GraphMap <FeatureVector, WeightMatrix> .ILinkable>();

            // To keep track of the order each output should be evaluated
            Dictionary <GraphMap <FeatureVector, WeightMatrix> .ILinkable, int> outputPriorities = new Dictionary <GraphMap <FeatureVector, WeightMatrix> .ILinkable, int>();

            Dictionary <GraphMap <FeatureVector, WeightMatrix> .ILinkable, int> inputPriorities = new Dictionary <GraphMap <FeatureVector, WeightMatrix> .ILinkable, int>();

            foreach (var input in inputs)
            {
                queue.Enqueue(input);
            }

            int outPriority = 0;

            while (queue.Count != 0)
            {
                var node = queue.Dequeue();
                foreach (var edge in node.Edges)
                {
                    // add next node to the frontier
                    queue.Enqueue((GraphMap <FeatureVector, WeightMatrix> .ILinkable)edge.Key);

                    // put this node in the set of outputs
                    outputPriorities[(GraphMap <FeatureVector, WeightMatrix> .ILinkable)edge.Key] = outPriority++;

                    backwards.Add((GraphMap <FeatureVector, WeightMatrix> .ILinkable)edge.Key, new Pair <GraphMap <FeatureVector, WeightMatrix> .ILinkable, GraphMap <FeatureVector, WeightMatrix> .Link <WeightMatrix> >()
                    {
                        a = node,
                        b = edge.Value
                    });
                }
            }

            // Vectors that receive outputs
            outputVectors = new Queue <GraphMap <FeatureVector, WeightMatrix> .ILinkable>();

            // Vectors that are inputs
            inputVectors = new Queue <GraphMap <FeatureVector, WeightMatrix> .ILinkable>();

            int inPriority = 0;

            foreach (var outputPriority in outputPriorities.OrderBy(x => x.Value))
            {
                outputVectors.Enqueue(outputPriority.Key);
                foreach (var input in backwards[outputPriority.Key])
                {
                    inputPriorities[input.a] = inPriority++;
                }
            }

            foreach (var inputPriority in inputPriorities.OrderByDescending(x => x.Value))
            {
                inputVectors.Enqueue(inputPriority.Key);
            }
        }
コード例 #2
0
ファイル: Neurone.cs プロジェクト: davidsiaw/neuron
        private void GetGraphOrder(out OneToManyMap<GraphMap<FeatureVector, WeightMatrix>.ILinkable, Pair<GraphMap<FeatureVector, WeightMatrix>.ILinkable, GraphMap<FeatureVector, WeightMatrix>.Link<WeightMatrix>>> backwards, out Queue<GraphMap<FeatureVector, WeightMatrix>.ILinkable> inputVectors, out Queue<GraphMap<FeatureVector, WeightMatrix>.ILinkable> outputVectors)
        {
            backwards = new OneToManyMap<GraphMap<FeatureVector, WeightMatrix>.ILinkable, Pair<GraphMap<FeatureVector, WeightMatrix>.ILinkable, GraphMap<FeatureVector, WeightMatrix>.Link<WeightMatrix>>>();

            // Just to keep track of the frontier
            Queue<GraphMap<FeatureVector, WeightMatrix>.ILinkable> queue = new Queue<GraphMap<FeatureVector, WeightMatrix>.ILinkable>();

            // To keep track of the order each output should be evaluated
            Dictionary<GraphMap<FeatureVector, WeightMatrix>.ILinkable, int> outputPriorities = new Dictionary<GraphMap<FeatureVector, WeightMatrix>.ILinkable, int>();

            Dictionary<GraphMap<FeatureVector, WeightMatrix>.ILinkable, int> inputPriorities = new Dictionary<GraphMap<FeatureVector, WeightMatrix>.ILinkable, int>();

            foreach (var input in inputs)
            {
                queue.Enqueue(input);
            }

            int outPriority = 0;
            while (queue.Count != 0)
            {
                var node = queue.Dequeue();
                foreach (var edge in node.Edges)
                {

                    // add next node to the frontier
                    queue.Enqueue((GraphMap<FeatureVector, WeightMatrix>.ILinkable)edge.Key);

                    // put this node in the set of outputs
                    outputPriorities[(GraphMap<FeatureVector, WeightMatrix>.ILinkable)edge.Key] = outPriority++;

                    backwards.Add((GraphMap<FeatureVector, WeightMatrix>.ILinkable)edge.Key, new Pair<GraphMap<FeatureVector, WeightMatrix>.ILinkable, GraphMap<FeatureVector, WeightMatrix>.Link<WeightMatrix>>()
                    {
                        a = node,
                        b = edge.Value
                    });
                }
            }

            // Vectors that receive outputs
            outputVectors = new Queue<GraphMap<FeatureVector, WeightMatrix>.ILinkable>();

            // Vectors that are inputs
            inputVectors = new Queue<GraphMap<FeatureVector, WeightMatrix>.ILinkable>();

            int inPriority = 0;
            foreach (var outputPriority in outputPriorities.OrderBy(x => x.Value))
            {
                outputVectors.Enqueue(outputPriority.Key);
                foreach (var input in backwards[outputPriority.Key])
                {
                    inputPriorities[input.a] = inPriority++;
                }
            }

            foreach (var inputPriority in inputPriorities.OrderByDescending(x => x.Value))
            {
                inputVectors.Enqueue(inputPriority.Key);
            }
        }