Exemplo n.º 1
0
        public void Construction()
        {
            var factory = StandardRng.GetFactory();
            var rng     = factory.Create();

            Assert.True(Statistics.TestMonobitFrequency32(rng, 100_000, Statistics.WideZScore));
            Assert.True(Statistics.TestMonobitFrequency64(rng, 100_000, Statistics.WideZScore));
            Assert.True(Statistics.TestMonobitFrequencyFill(rng, 100_000, Statistics.WideZScore));
        }
Exemplo n.º 2
0
 public BackgroundSource()
 {
     _rng = RandomShim.Create(StandardRng.Create());
     if (DateTime.Now.Month == 12)
     {
         _backgrounds.Add("Assets/backgrounds/christmas.jpg");
         _backgrounds.Add("Assets/backgrounds/christmas2.png");
         _backgrounds.Add("Assets/backgrounds/christmas3.jpg");
         _backgrounds.Add("Assets/backgrounds/christmasEve.jpg");
         _backgrounds.Add("Assets/backgrounds/IceQueen.png");
         _backgrounds.Add("Assets/backgrounds/imp.png");
     }
     else if (DateTime.Now.Month == 10)
     {
         _backgrounds.Add("Assets/backgrounds/sorceress.png");
         _backgrounds.Add("Assets/backgrounds/halloween.jpg");
         _backgrounds.Add("Assets/backgrounds/halloween2.png");
         _backgrounds.Add("Assets/backgrounds/halloween3.png");
         _backgrounds.Add("Assets/backgrounds/halloween4.jpg");
         _backgrounds.Add("Assets/backgrounds/halloween5.png");
         _backgrounds.Add("Assets/backgrounds/halloween6.png");
         _backgrounds.Add("Assets/backgrounds/halloween7.png");
         _backgrounds.Add("Assets/backgrounds/halloween8.png");
     }
     else
     {
         _backgrounds.Add("Assets/backgrounds/original.png");
         _backgrounds.Add("Assets/backgrounds/citiesInTheSky.png");
         _backgrounds.Add("Assets/backgrounds/deer.jpg");
         _backgrounds.Add("Assets/backgrounds/deer2.jpg");
         _backgrounds.Add("Assets/backgrounds/diceTable.jpg");
         _backgrounds.Add("Assets/backgrounds/dwarfHouse.jpg");
         _backgrounds.Add("Assets/backgrounds/faery.png");
         _backgrounds.Add("Assets/backgrounds/forest.png");
         _backgrounds.Add("Assets/backgrounds/forest2.jpg");
         _backgrounds.Add("Assets/backgrounds/LotsOfDices.png");
         _backgrounds.Add("Assets/backgrounds/merchant.jpg");
         _backgrounds.Add("Assets/backgrounds/original.png");
         _backgrounds.Add("Assets/backgrounds/sword.png");
         _backgrounds.Add("Assets/backgrounds/unicorn.png");
         _backgrounds.Add("Assets/backgrounds/warrior.jpg");
     }
 }
Exemplo n.º 3
0
        /// <summary>
        /// Runs this instance.
        /// </summary>
        private void Run()
        {
            const int width  = 64;
            const int height = 64;
            const int count  = width * height;

            const int totalIterations = 500;
            double    baseRadius      = Math.Sqrt(count) * 0.3;

            // prepare generator and randomized data set
            var generator       = new StandardRng();
            var dataSetProvider = new DiscreteRandomRgbDataSetProvider(generator, 5);
            var dataSet         = dataSetProvider.ProvideDataSet();

            // prepare factories
            var gridFactory   = new Grid2DFactory(generator);
            var neuronFactory = new RandomWeightGenerator(3);

            // prepare the metric
            var metric    = new EuclideanDistance();
            var bmuFinder = new BmuFinder(metric);

            // prepare the grid
            var grid = gridFactory.CreateGrid(width, height, neuronFactory);

            grid.IsToroidal = false;

            // prepare adjustment functions
            var radiusFunction = new RadiusExponentialShrink()
            {
                TotalIterations = totalIterations,
                StartRadius     = baseRadius,
                EndRadius       = 1
            };
            var neighborhoodFunction = new GaussianNeighborhood();
            var learningRateFunction = new LearningRateExponentialShrink()
            {
                TotalIterations = totalIterations,
                StartRate       = 1,
                EndRate         = 0.001,
            };
            var weightAdjustment = new WeightAdjustment(radiusFunction, neighborhoodFunction, learningRateFunction);

            // iterate
            for (int i = 0; i < totalIterations; ++i)
            {
                // pick a datum and find the best matching unit on the grid
                var picked = dataSet.PickRandom(generator);
                var bmu    = bmuFinder.FindBestMatchingUnit(grid, picked);

                // adjust all other neurons
                var trainingVectorWeights = picked.MapToWeights();
                foreach (var gridNeuron in grid)
                {
                    // calculate the distance on the grid
                    var distanceToBmu = grid.CalculateDistance(metric, bmu, gridNeuron);

                    // calculate the new weights
                    var currentWeights = gridNeuron.Neuron.Weights;
                    var newWeights     = weightAdjustment.CalculateNewWeights(i, trainingVectorWeights, currentWeights, distanceToBmu);

                    // update the neuron with the new weights
                    gridNeuron.Neuron.UpdateWeights(newWeights);
                }
            }

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            var form = new Main();

            form.SetGrid(grid);
            form.SetData(dataSet);
            Application.Run(form);
        }