コード例 #1
0
        public void RunWitnessTest()
        {
            if (Verbose)
            {
                Console.WriteLine();
                Console.WriteLine($"File Name: {FileName}");
                Console.WriteLine();
                Console.WriteLine(EntanglementType + ":  " + String.Join("  ", EntanglementLabel.ToArray()));

                StringBuilder sb = new StringBuilder("      Target:");
                foreach (Double target in EntanglementTarget)
                {
                    sb.Append(target.ToString(FMT));
                }
                Console.WriteLine(sb.ToString());
            }

            InitializeStream();

            CoupledTwoQubitQNN network = new CoupledTwoQubitQNN(TimeChunks, Tf);

            const int V = 14200;

            for (int currentCount = V; currentCount <= Count; currentCount += CountStep)
            {
                for (int epoch = 1; epoch <= Epochs; epoch++)
                {
                    StringBuilder fileString    = new StringBuilder(currentCount.ToString());
                    StringBuilder consoleString = new StringBuilder("     " + currentCount.ToString("0000000") + ":");

                    foreach (Complex[] state in States)
                    {
                        double entanglement = network.MeasureEntanglementWitness(state, currentCount);

                        if (!Signed)
                        {
                            entanglement = Math.Abs(entanglement);
                        }

                        if (Verbose)
                        {
                            consoleString.Append("  " + entanglement.ToString(FMT));
                        }

                        fileString.Append(",").Append(entanglement);
                    }

                    if (Verbose)
                    {
                        Console.WriteLine(consoleString.ToString());
                        Console.Out.Flush();
                    }


                    Stream.WriteLine(fileString.ToString());
                }
            }

            Stream.Close();
        }
コード例 #2
0
        public void DriverTargets()
        {
            int    timeChunks  = 4;
            double time_final  = 1.580 / (8 * Math.PI);
            int    count       = 1000;
            int    totalEpochs = 11;

            int[]    states = { 1, 2, 3, 4 };
            double[] target = { 1.0, 0, 0, 0.663325 };                 // There must be one target for every initial state

            CoupledTwoQubitQNN network = new CoupledTwoQubitQNN(timeChunks, time_final);

            for (int epoch = 1; epoch < totalEpochs; epoch++)
            {
                double[] entanglement = network.MeasureEntanglementWitness(states, count);

                for (int i = 0; i < timeChunks; i++)
                {
                    entanglement[i] = Math.Abs(entanglement[i]);

                    Assert.InRange(entanglement[i], 0, 1);
                }
            }
        }