Exemplo n.º 1
0
        private static void TimeSingleIterWithIncreasingNumberOfQubits()
        {
            var sim     = new QuantumSimulator();
            int numRuns = 100;

            System.Console.WriteLine($"# number of input qubits, average execution time in ms over {numRuns} runs, standard deviation over {numRuns} runs");

            for (int numInpQubits = 2; numInpQubits <= 13; numInpQubits++)
            {
                int numSuccesses = 0;
                var execTimes    = new List <double>(numRuns);
                for (int i = 0; i < numRuns; i++)
                {
                    var watch = System.Diagnostics.Stopwatch.StartNew();
                    var found = RunSingleIterGrovers.Run(sim, numInpQubits).Result;
                    if (found.TrueForAll(r => r == Result.Zero))
                    {
                        numSuccesses++;
                    }
                    watch.Stop();
                    double elapsedMs = watch.ElapsedMilliseconds;
                    // Discard first outlier
                    if (!(elapsedMs > 100 && i == 0))
                    {
                        execTimes.Add(elapsedMs);
                    }
                }
                var avg   = execTimes.Average();
                var stdev = System.Math.Sqrt(execTimes.Average(v => System.Math.Pow(v - avg, 2)));
                System.Console.WriteLine($"{numInpQubits}, {avg}, {stdev}");
            }
        }
Exemplo n.º 2
0
        private static void RunThreeQubitSingleIterGrovers()
        {
            var sim          = new QuantumSimulator();
            int numSuccesses = 0;
            int numTotal     = 1000;

            for (int i = 0; i < numTotal; i++)
            {
                var found = RunSingleIterGrovers.Run(sim, 3).Result;
                if (found.TrueForAll(r => r == Result.Zero))
                {
                    numSuccesses++;
                    //System.Console.WriteLine(found);
                }
            }
            System.Console.WriteLine($"Result of measurements: {numSuccesses} / {numTotal}");
        }
Exemplo n.º 3
0
        private static void RunSingleIterWithIncreasingNumberOfQubits()
        {
            int numRuns = 1000;

            System.Console.WriteLine($"# number of input qubits, successes out of {numRuns} runs");
            var sim = new QuantumSimulator();

            for (int numInpQubits = 2; numInpQubits <= 13; numInpQubits++)
            {
                int numSuccesses = 0;
                for (int i = 0; i < numRuns; i++)
                {
                    var found = RunSingleIterGrovers.Run(sim, numInpQubits).Result;
                    if (found.TrueForAll(r => r == Result.Zero))
                    {
                        numSuccesses++;
                    }
                }
                // print number of qubits without ancilla, and number of sucessess out of {numRuns} runs
                System.Console.WriteLine($"{numInpQubits}, {numSuccesses}");
            }
        }