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)); }
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"); } }
/// <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); }