예제 #1
0
        static void GenerateDatasetForTrainingCVAE()
        {
            const int N = 1 << 22;

            StreamWriter writer = new StreamWriter("ScattersDataSet.ds");

            Console.WriteLine("Generating file...");

            GRandom rnd = new GRandom();

            for (int i = 0; i < N; i++)
            {
                if (i % 1000 == 0)
                {
                    Console.Write("\r                                                ");
                    Console.Write("\rCompleted... " + (i * 100.0f / N).ToString("F2"));
                }

                var settings = GenerateNewSettings(rnd);
                var r        = Scattering.GetVPTSampleInSphere(settings, rnd);

                // code path variables in a compact way
                float3 zAxis = float3(0, 0, 1);
                float3 xAxis = abs(r.x.z) > 0.999 ? float3(1, 0, 0) : normalize(cross(r.x, float3(0, 0, 1)));
                float3 yAxis = cross(zAxis, xAxis);

                float3x3 normR    = transpose(float3x3(xAxis, yAxis, zAxis));
                float3   normx    = mul(r.x, normR);
                float3   normw    = mul(r.w, normR);
                float3   normX    = mul(r.X, normR);
                float3   normW    = mul(r.W, normR);
                float3   B        = float3(1, 0, 0);
                float3   T        = cross(normx, B);
                float    costheta = normx.z;
                float    beta     = dot(normw, T);
                float    alpha    = dot(normw, B);

                writer.WriteLine("{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}, {12}",
                                 settings.Sigma,
                                 settings.G,
                                 settings.Phi,
                                 r.N,
                                 costheta,
                                 beta,
                                 alpha,
                                 normX.x,
                                 normX.y,
                                 normX.z,
                                 normW.x,
                                 normW.y,
                                 normW.z
                                 );
            }
            Console.WriteLine();

            writer.Close();
            Console.WriteLine("Done.");
        }
예제 #2
0
        static void GenerateDatasetForTabulationXMethod()
        {
            int total = 0;

            Parallel.For(0, 8, file =>
            {
                BinaryWriter writer = new BinaryWriter(new FileStream("DataSet" + file + ".bin", FileMode.Create));

                GRandom rnd = new GRandom(file);

                int N = 1 << 24; // 16 million samples per file

                while (N-- > 0)
                {
                    var settings = GenerateSettingsForX(rnd);

                    var r = Scattering.GetVPTSampleInSphere(settings, rnd);

                    // code path variables in a compact way
                    float3 zAxis = float3(0, 0, 1);
                    float3 xAxis = abs(r.x.z) > 0.999 ? float3(1, 0, 0) : normalize(cross(r.x, float3(0, 0, 1)));
                    float3 yAxis = cross(zAxis, xAxis);

                    float3x3 normR = transpose(float3x3(xAxis, yAxis, zAxis));
                    float3 normx   = mul(r.x, normR);
                    float3 normw   = mul(r.w, normR);
                    float3 normX   = mul(r.X, normR);
                    float3 normW   = mul(r.W, normR);
                    float3 B       = float3(1, 0, 0);
                    float3 T       = cross(normx, B);
                    float costheta = normx.z;
                    float beta     = dot(normw, T);
                    float alpha    = dot(normw, B);

                    writer.Write(settings.Sigma);
                    writer.Write(settings.G);
                    writer.Write(r.N);
                    writer.Write(costheta);
                    writer.Write(beta);
                    writer.Write(alpha);

                    Interlocked.Add(ref total, 1);

                    if (total % 100000 == 0)
                    {
                        Console.WriteLine("Overall progress: {0}%", total * 100.0f / (8 * (1 << 24)));
                    }
                }

                writer.Close();
            });
        }