コード例 #1
0
        public void addQuery(String[] words, int interval, float intensivity)
        {
            int index = 0;

            frame = 0;

            frameChanged(frame, null);
            query.clear();

            foreach (String word in words)
            {
                AnimatedNeuron an = neurons.Find(k => k.Name == word);

                if (an == null)
                {
                    continue;
                }

                Receptor receptor = brain.Receptors.Find(k => k.Name == word);
                Synapse  synapse  = brain.Synapses.Find(k => k.Pre == receptor);

                receptor.initialize(interval, interval - index - 1, intensivity);
                new SequenceReceptor(query, receptor);

                AnimatedReceptor ar = new AnimatedReceptor(receptor, an, index++ % 4);
                synapses.Add(new AnimatedSynapse(ar, an, synapse));
                receptors.Add(ar);
            }

            query.arrange();
        }
コード例 #2
0
        public CreationSequence addSentence(String sentence)
        {
            List <CreationFrame> frames   = new List <CreationFrame>();
            List <Neuron>        sequence = new List <Neuron>();

            String[] words = sentence.Split(' ');

            int index = 0;

            foreach (String word in words)
            {
                CreationFrame frame  = create(word, ++sentences);
                Neuron        neuron = frame.Neuron.Neuron;

                for (int i = 0; i < index; i++)
                {
                    Synapse synapse = neuron.Input.Find(k => k.Pre.Equals(sequence[i]));

                    if (synapse == null)
                    {
                        synapse = new Synapse(sequence[i], neuron);
                        synapses.Add(synapse);

                        neuron.Input.Add(synapse);
                        sequence[i].Output.Add(synapse);
                        frame.add(synapse);
                    }

                    synapse.Change += 1 / (float)(index - i);
                }

                foreach (Synapse synapse in neuron.Input)
                {
                    if (synapse.Change == 0)
                    {
                        continue;
                    }

                    float weight = synapse.Weight;
                    synapse.Factor += synapse.Change;
                    synapse.Weight  = (2 * synapse.Factor) / (neuron.Count + synapse.Factor);

                    CreationData data = new CreationData(synapse, frame, synapse.Change, weight, synapse.Weight);
                    synapse.Changes.Add(data);
                    frame.add(data);

                    synapse.Change = 0;
                }

                sequence.Add(neuron);
                frames.Add(frame);
                this.frames.Add(frame);

                index++;
            }

            return(new CreationSequence(frames));
        }
コード例 #3
0
        public AnimatedState(Synapse synapse, AnimatedVector vector, bool duplex = false)
        {
            this.synapse = synapse;
            this.vector  = vector;
            this.duplex  = duplex;

            radius  = Constant.Radius / 2;
            history = new List <CreationData>();
        }
コード例 #4
0
        public AnimatedSynapse(AnimatedNeuron pre, AnimatedNeuron post, Synapse syn)
        {
            this.pre  = pre;
            this.post = post;

            duplex  = null;
            vector  = new AnimatedVector(pre, post);
            synapse = new AnimatedState(syn, vector);

            pre.Output.Add(this);
            post.Input.Add(this);

            changePosition();
        }
コード例 #5
0
        public CreationData(Synapse synapse, CreationFrame frame, float change, float start, float finish)
        {
            this.synapse = synapse;
            this.frame   = frame;
            this.change  = change;
            this.start   = start;
            this.finish  = finish;

            Height = 35;
            Width  = 160;
            initializeGraphics();

            MouseEnter += new EventHandler(mouseEnter);
            MouseLeave += new EventHandler(mouseLeave);
            background  = SystemColors.Control;
        }
コード例 #6
0
        CreationFrame create(String word, int frame)
        {
            Neuron neuron = neurons.Find(i => i.Word == word);

            if (neuron == null)
            {
                neuron = new Neuron(word, alpha, beta);
                neurons.Add(neuron);

                Receptor receptor = new Receptor();
                Synapse  synapse  = new Synapse(receptor, neuron);

                synapses.Add(synapse);
                receptors.Add(receptor);
                receptor.Output = synapse;
            }

            neuron.Count++;
            return(new CreationFrame(neuron, frame));
        }
コード例 #7
0
ファイル: CreationFrame.cs プロジェクト: Grzesiaczek/Brain
 public void add(Synapse synapse)
 {
     created.Add(synapse);
 }
コード例 #8
0
 public void setDuplex(Synapse synapse)
 {
     duplex = new AnimatedState(synapse, vector, true);
     duplex.changePosition();
 }
コード例 #9
0
        public CreationFrame add(CreationSequence sequence, BuiltElement element, int frame)
        {
            CreationFrame result = create(element.Name, frame);
            Neuron        neuron = result.Neuron.Neuron;
            int           index  = sequence.Frames.Count;

            for (int i = 0; i < index; i++)
            {
                Neuron  previous = sequence.Frames[i].Neuron.Neuron;
                Synapse synapse  = neuron.Input.Find(k => k.Pre.Equals(previous));

                if (synapse == null)
                {
                    synapse = new Synapse(previous, neuron);
                    synapses.Add(synapse);

                    neuron.Input.Add(synapse);
                    previous.Output.Add(synapse);
                    result.add(synapse);
                }

                synapse.Change += 1 / (float)(index - i);
            }

            foreach (Synapse synapse in neuron.Input)
            {
                if (synapse.Change == 0)
                {
                    continue;
                }

                int   count  = 0;
                float start  = 0;
                float weight = 0;

                List <CreationData> changes = synapse.Changes;
                synapse.Factor = 0;

                foreach (CreationData cd in changes)
                {
                    if (cd.Frame > frame)
                    {
                        break;
                    }

                    count++;
                    start           = cd.Weight;
                    synapse.Factor += cd.Change;
                }

                synapse.Factor += synapse.Change;
                weight          = (2 * synapse.Factor) / (synapse.Factor + count + 1);

                CreationData data = new CreationData(synapse, result, synapse.Change, start, weight);

                changes.Insert(count, data);
                result.add(data);
                start = weight;

                for (int i = count; i < changes.Count; i++)
                {
                    synapse.Factor += changes[i].Change;
                    weight          = (2 * synapse.Factor) / (synapse.Factor + i + 1);

                    changes[i].Start  = start;
                    changes[i].Weight = weight;

                    start = synapse.Weight;
                }

                synapse.Weight = weight;
                synapse.Change = 0;
            }

            for (int i = frame; i < frames.Count; i++)
            {
                frames[i].Frame = i;
            }

            frames.Insert(result.Frame, result);
            return(result);
        }