Exemple #1
0
        /// <summary>
        /// Main entry point to the program.
        /// </summary>
        /// <param name="args">Command-line parameters.</param>
        static void Main(string[] args)
        {
            const int trialCount = 10000;
            var       generator  = new Random();

            using (QuantumSimulator sim = new QuantumSimulator())
            {
                var classicalWinCount = 0;
                var quantumWinCount   = 0;
                for (int i = 0; i < trialCount; i++)
                {
                    bool aliceBit           = GetRandomBit(generator);
                    bool bobBit             = GetRandomBit(generator);
                    bool aliceMeasuresFirst = GetRandomBit(generator);
                    bool classicalXor       =
                        !PlayClassicalStrategy(aliceBit, bobBit);
                    bool quantumXor =
                        !PlayQuantumStrategy.Run(
                            sim,
                            aliceBit,
                            bobBit,
                            aliceMeasuresFirst).Result;

                    if ((aliceBit && bobBit) == classicalXor)
                    {
                        classicalWinCount++;
                    }

                    if ((aliceBit && bobBit) == quantumXor)
                    {
                        quantumWinCount++;
                    }
                }

                Console.WriteLine(
                    "Classical success rate: "
                    + classicalWinCount / (float)trialCount);
                Console.WriteLine(
                    "Quantum success rate: "
                    + quantumWinCount / (float)trialCount);

                if (quantumWinCount > classicalWinCount)
                {
                    Console.WriteLine("The quantum success rate exceeded the classical success rate!");
                }
            }
        }
Exemple #2
0
        static void Main(string[] args)
        {
            int j = 0;

            do
            {
                j++;
                const int trialCount = 20000;
                Random    generator  = new Random();

                using (QuantumSimulator sim = new QuantumSimulator())
                {
                    int classicalWinCount         = 0;
                    int quantumWinCount           = 0;
                    int classicalAliceBobWinCount = 0;
                    int classicalJohnMikeWinCount = 0;
                    int quantumAliceBobWinCount   = 0;
                    int quantumJohnMikeWinCount   = 0;
                    int classicalnowincount       = 0;
                    int quantumnowincount         = 0;
                    for (int i = 0; i < trialCount; i++)
                    {
                        bool   aliceBit           = GetRandomBit(generator);
                        bool   bobBit             = GetRandomBit(generator);
                        bool   johnBit            = GetRandomBit(generator);
                        bool   mikeBit            = GetRandomBit(generator);
                        bool   aliceMeasuresFirst = GetRandomBit(generator);
                        bool[] classicalXor       =
                            PlayClassicalStrategy(aliceBit, bobBit, johnBit, mikeBit);
                        bool[] quantumXor =
                            PlayQuantumStrategy.Run(
                                sim,
                                aliceBit,
                                bobBit,
                                johnBit,
                                mikeBit,
                                aliceMeasuresFirst).Result.ToArray();

                        if ((aliceBit && bobBit) == !classicalXor[0])
                        {
                            classicalWinCount++;
                            classicalAliceBobWinCount++;
                        }
                        else if ((johnBit && mikeBit) == !classicalXor[1])
                        {
                            classicalWinCount++;
                            classicalJohnMikeWinCount++;
                        }
                        else
                        {
                            classicalnowincount++;
                        }
                        if ((aliceBit && bobBit) == !quantumXor[0])
                        {
                            quantumWinCount++;
                            quantumAliceBobWinCount++;
                        }
                        else if ((johnBit && mikeBit) == !quantumXor[1])
                        {
                            quantumWinCount++;
                            quantumJohnMikeWinCount++;
                        }
                        else
                        {
                            quantumnowincount++;
                        }
                    }

                    Console.WriteLine(
                        "Classical success rate: "
                        + classicalWinCount / (float)trialCount);
                    Console.WriteLine("Classical Alice and Bob won {0} times ", classicalAliceBobWinCount);
                    Console.WriteLine("Classical John and Mike won {0} times ", classicalJohnMikeWinCount);
                    Console.WriteLine("Classical did not win {0} times ", classicalnowincount);
                    Console.WriteLine();
                    Console.WriteLine(
                        "Quantum success rate: "
                        + quantumWinCount / (float)trialCount);
                    Console.WriteLine("Quantum Alice and Bob won {0} times ", quantumAliceBobWinCount);
                    Console.WriteLine("Quantum John and Mike won {0} times ", quantumJohnMikeWinCount);
                    Console.WriteLine("Quantum did not win {0} times ", quantumnowincount);
                    Console.WriteLine();

                    if (quantumWinCount > classicalWinCount)
                    {
                        Console.WriteLine("Round {0} Quantum Win ", j);
                    }
                    else
                    {
                        Console.WriteLine("Round {0} Classical Win ", j);
                    }
                }
                Console.WriteLine();
            } while (j < 10);
            Console.WriteLine();
            Console.WriteLine("All rounds completed");
            Console.ReadLine();
        }