Beispiel #1
0
        public ActionResult TestMany(InputOutputViewModel vm)
        {
            vm.HopfieldOutput = new MatrixViewModel(64);
            vm.ARTOutput      = new MatrixViewModel(64);
            vm.patterns       = disturbed;

            var testPatterns = disturbed;

            var vector       = vm.Input.neurons;
            var x            = string.Join("", vector);
            var y            = string.Join(",", vector);
            int failCountHP  = 0;
            int failCountART = 0;

            var outputVectorHP   = new int[testPatterns.Length / 64];
            var outputVectorART  = new int[testPatterns.Length / 64];
            var outputVectorART2 = new int[testPatterns.Length / 64];

            if (hp == null || art == null || hp.trained == false || art.trained == false)
            {
                ViewBag.Message = "You have to train neural networks before testing.";
                return(View("Index", vm));
            }

            string[] stringOupputART;
            for (int i = 0; i < testPatterns.Length / 64; i++)
            {
                var outMatrixHP = hp.Test(testPatterns.GetRow(i));
                var outART      = art.Test(testPatterns.GetRow(i));
                var outART2     = art2.Test(testPatterns.GetRow(i));
                var outHP       = hp.NeuronOutput(outMatrixHP, patterns);

                if (outART >= 10)
                {
                    outART = outART % 10;
                }
                if (outHP >= 10)
                {
                    outHP = outHP % 10;
                }
                if (outART2 >= 10)
                {
                    outART2 = outART2 % 10;
                }

                //outHP = patternsOrder.IndexOf(outHP);
                outART  = outART == -1 ? -1 : patternsOrder[outART];
                outART2 = outART2 == -1 ? -1 : patternsOrder[outART2];

                //vm.HopfieldOutput.neurons = outputHP;
                outputVectorHP[i]   = outHP;
                outputVectorART[i]  = outART;
                outputVectorART2[i] = outART2;

                if (outHP != i)
                {
                    failCountHP++;
                }
                if (outART != i)
                {
                    failCountART++;
                }
            }

            string stringHP        = string.Join("", outputVectorHP);
            string stringART       = string.Join("", outputVectorART);
            string stringFailCount = $"HP: {failCountHP}, ART: {failCountART}";

            System.IO.File.WriteAllText(@"C:\Patterns\responseHP.txt", stringHP);
            System.IO.File.WriteAllText(@"C:\Patterns\responseART.txt", stringART);

            System.IO.File.WriteAllText(@"C:\Patterns\symulacje\responseHP.txt", stringHP);
            System.IO.File.WriteAllText(@"C:\Patterns\symulacje\responseART.txt", stringART);

            System.IO.File.WriteAllText(@"C:\Patterns\symulacje\bledy.txt", stringFailCount);

            var outputMatrixHP = hp.Test(vm.Input.neurons);
            var outputART      = art.Test(vm.Input.neurons);
            //var outputART = art2.Test(vm.Input.neurons);
            var outputHP = hp.NeuronOutput(outputMatrixHP, teachingSet);

            if (outputART >= 10)
            {
                outputART = outputART % 10;
            }
            if (outputHP >= 10)
            {
                outputHP = outputHP % 10;
            }

            if (outputHP == -1)
            {
                ViewBag.Message = "Hopfield cannot recognize pattern.";
            }
            else
            {
                vm.HopfieldOutput.neurons = patternsChangeOrder.GetRow(outputHP);
            }

            if (outputART == -1)
            {
                ViewBag.Message = "ART cannot recognize pattern.";
            }
            else
            {
                vm.ARTOutput.neurons = patternsChangeOrder.GetRow(outputART);
            }

            return(View("Index", vm));
        }