예제 #1
0
        public void BatchDivisionTest2()
        {
            // Sequential
            float[,]
            x = Enumerable.Range(0, 20000 * 784).Select(_ => ThreadSafeRandom.NextUniform(100)).ToArray().AsSpan().AsMatrix(20000, 784),
            y = Enumerable.Range(0, 20000 * 10).Select(_ => ThreadSafeRandom.NextUniform(100)).ToArray().AsSpan().AsMatrix(20000, 10);
            BatchesCollection batches = BatchesCollection.From((x, y), 1547);
            HashSet <int>     set1    = new HashSet <int>();

            for (int i = 0; i < 20000; i++)
            {
                set1.Add(GetUid(x, i) ^ GetUid(y, i));
            }
            HashSet <int> set2 = new HashSet <int>();

            for (int i = 0; i < batches.BatchesCount; i++)
            {
                int h = batches.Batches[i].X.GetLength(0);
                for (int j = 0; j < h; j++)
                {
                    set2.Add(GetUid(batches.Batches[i].X, j) ^ GetUid(batches.Batches[i].Y, j));
                }
            }
            Assert.IsTrue(set1.OrderBy(h => h).SequenceEqual(set2.OrderBy(h => h)));
            batches.CrossShuffle();
            HashSet <int> set3 = new HashSet <int>();

            for (int i = 0; i < batches.BatchesCount; i++)
            {
                int h = batches.Batches[i].X.GetLength(0);
                for (int j = 0; j < h; j++)
                {
                    set3.Add(GetUid(batches.Batches[i].X, j) ^ GetUid(batches.Batches[i].Y, j));
                }
            }
            Assert.IsTrue(set1.OrderBy(h => h).SequenceEqual(set3.OrderBy(h => h)));
        }
예제 #2
0
        public MainWindow()
        {
            InitializeComponent();

            CPPNSettings.ThumbnailWidth  = 360;
            CPPNSettings.ThumbnailHeight = 240;

            CPPNSettings.RenderWidth  = 15360;
            CPPNSettings.RenderHeight = 8640;

            CPPNSettings.PaletteSize = 65535;

            CPPNSettings.UseColor = false;

            CPPNSettings.GenerateWeight = () => ThreadSafeRandom.NextUniform() * 4;

            //CPPNSettings.GenerateWeight = () => 1;

            CPPNSettings.Activations.Add(Activations.Tanh);
            CPPNSettings.Activations.Add(Activations.Gaussian);
            CPPNSettings.Activations.Add(Activations.Sin);
            //CPPNSettings.Activations.Add(Activations.Cos);
            //CPPNSettings.Activations.Add(Activations.ID);
            //CPPNSettings.Activations.Add(Activations.Sqrt);
            //CPPNSettings.Activations.Add(x => x.Magnitude);
            //CPPNSettings.Activations.Add(x => -x);
            //CPPNSettings.Activations.Add(x => SharpNoise.NoiseGenerator.GradientCoherentNoise3D(x, 1, 1));
            //CPPNSettings.Activations.Add(x => x < -1 ? -1 : x > 1 ? 1 : x);

            //CPPNSettings.Activations.Add(Activations.ArcTan);
            //CPPNSettings.Activations.Add(Activations.Sigmoid);
            //CPPNSettings.Activations.Add(Activations.AbsTanh);
            //CPPNSettings.Activations.Add(Activations.Abs);
            //CPPNSettings.Activations.Add(Activations.Sinc);

            CPPNSettings.Activations.Add(Activations.Square);
            CPPNSettings.Activations.Add(Activations.Cube);
            ////CPPNSettings.Activations.Add(Activations.Sqrt);
            //CPPNSettings.Activations.Add(Activations.Log);
            //CPPNSettings.Activations.Add(Activations.Recp);
            //CPPNSettings.Activations.Add(x => x % 1.0);

            CPPNSettings.Combinators.Add((x, y) => x + y);
            //CPPNSettings.Combinators.Add((x, y) => x * y);
            //CPPNSettings.Combinators.Add((x, y) => x % y);
            //CPPNSettings.Combinators.Add((x, y) => Math.Min(x.Magnitude, y.Magnitude));

            //CPPNSettings.Combinators.Add((x, y) => {
            //    var a = Math.Cos(x / (2 * Math.PI));
            //    var b = Math.Sin(x / (2 * Math.PI));

            //    var c = Math.Cos(y / (2 * Math.PI));
            //    var d = Math.Sin(y / (2 * Math.PI));

            //    var r = (a * c) - (b * d);
            //    var i = (a * d) + (c * b);

            //    return Math.Atan2(i, r);
            //});

            CPPNSettings.OutputTransform = Activations.ID;

            InitializePopulation();

            RenderPopulation();
        }
예제 #3
0
 public void BatchInitializationTest()
 {
     float[,]
     x = Enumerable.Range(0, 250 * 600).Select(_ => ThreadSafeRandom.NextUniform(1000)).ToArray().AsSpan().AsMatrix(250, 600),
     y = Enumerable.Range(0, 250 * 10).Select(_ => ThreadSafeRandom.NextUniform(500)).ToArray().AsSpan().AsMatrix(250, 10);
     (float[], float[])[] samples = Enumerable.Range(0, 250).Select(i =>