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