예제 #1
0
        public void Setup()
        {
            Pattern1 = new HopfieldPattern(0.0, 1.0, 0.0, 1.0);
            Pattern2 = new HopfieldPattern(1.0, 0.0, 0.0, 1.0);

            Network = new HopfieldNetwork(4);

            Network.Train(Pattern1);
            Network.Train(Pattern2);
        }
예제 #2
0
        /**
         * A simple main method to test the Hopfield neural network.
         *
         * @param args
         *            Not used.
         */
        static void Main(string[] args)
        {
            // Create the neural network.
            HopfieldNetwork network = new HopfieldNetwork(4);

            // This pattern will be trained
            bool[] TrainingPattern = { true, true, false, false };
            // This pattern will be presented
            bool[] PresentedPattern = { true, false, false, false };
            bool[] result;

            // train the neural network with pattern1
            Console.WriteLine("Training Hopfield network with: "
                              + FormatBoolean(TrainingPattern));
            network.Train(TrainingPattern);
            // present pattern1 and see it recognized
            result = network.Present(TrainingPattern);
            Console.WriteLine("Presenting pattern:" + FormatBoolean(TrainingPattern)
                              + ", and got " + FormatBoolean(result));
            // Present pattern2, which is similar to pattern 1. Pattern 1
            // should be recalled.
            result = network.Present(PresentedPattern);
            Console.WriteLine("Presenting pattern:" + FormatBoolean(PresentedPattern)
                              + ", and got " + FormatBoolean(result));
            Console.ReadLine();
        }
예제 #3
0
        public void GetResult()
        {
            var network = new HopfieldNetwork();

            network.Train(new Dictionary <string, string>
            {
                { "1", Pattern1 },
                { "2", Pattern2 }
            });

            var result = network.GetResult(Pattern1);

            Assert.AreEqual(Pattern1, result);
        }
예제 #4
0
        public void TrainEventTest()
        {
            var network = new HopfieldNetwork();

            network.OnItemProcessed += (sender, args) =>
            {
                Assert.AreEqual(Math.Sqrt(network.NumberOfNeurons), args.ItemsCount);
            };
            network.Train(new Dictionary <string, string>
            {
                { "1", Pattern1 },
                { "2", Pattern2 }
            });
        }
예제 #5
0
        public void EvaluateEnergyFunctionTest()
        {
            var network = new HopfieldNetwork();

            network.Train(new Dictionary <string, string>
            {
                { "1", Pattern1 },
                { "2", Pattern2 }
            });

            var energyState = network.CurrentEnergyState;

            network.GetResult(Pattern3);

            Assert.IsTrue(network.CurrentEnergyState <= energyState);
        }
        private void TrainButton_Click(object sender, RoutedEventArgs e)
        {
            var colCount = 5;
            var rowCount = 5;

            var pattern = new double[colCount * rowCount];

            for (var row = 0; row < rowCount; row++)
            {
                for (var col = 0; col < colCount; col++)
                {
                    pattern[row * colCount + col] = ((ToggleButton)_GetControlIn(DrawingGrid, new GridCoordinates(row, col))).IsChecked.Value
                        ? 1.0
                        : 0.0;
                }
            }

            var hopfieldPattern = new HopfieldPattern(pattern);

            hopfieldNetwork = hopfieldNetwork ?? new HopfieldNetwork(25);
            hopfieldNetwork.Train(hopfieldPattern);
        }