Exemplo n.º 1
0
    public void StartTest()
    {
        if (Circuit.Amplitudes != null && Circuit.Amplitudes.Length > 0)
        {
            Circuit.AmplitudeLength = Circuit.Amplitudes.Length;
        }
        Amplitudes    = simulator.Simulate(Circuit);
        Probabilities = simulator.GetProbabilities(Amplitudes);
        QiskitString  = Circuit.GetQiskitString();

        FloatCircuit = new QuantumCircuitFloat(Circuit);


        MicroQiskitSimulatorFloat floatSimulator = new MicroQiskitSimulatorFloat();

        FloatProbabilities = floatSimulator.GetProbabilities(FloatCircuit);



        ProbabilitieDifference = new double[Probabilities.Length];

        for (int i = 0; i < Probabilities.Length; i++)
        {
            ProbabilitieDifference[i] = Probabilities[i] - FloatProbabilities[i];
        }
    }
Exemplo n.º 2
0
        public static Texture2D CalculateColorTexture(QuantumCircuitFloat redCircuit, QuantumCircuitFloat greenCircuit, QuantumCircuitFloat blueCircuit, int width, int height, bool renormalize = false)
        {
            Texture2D texture = new Texture2D(width, height, TextureFormat.RGBA32, false);

            int widthLog  = Mathf.CeilToInt(Mathf.Log(width) / Mathf.Log(2));
            int heightLog = widthLog;

            int[] widthLines  = MakeLinesInt(widthLog);
            int[] heightLines = widthLines;

            if (height != width)
            {
                heightLog   = Mathf.CeilToInt(Mathf.Log(height) / Mathf.Log(2));
                heightLines = MakeLinesInt(heightLog);
            }

            MicroQiskitSimulatorFloat simulator = new MicroQiskitSimulatorFloat();

            float[] redProbs   = simulator.GetProbabilities(redCircuit);
            float[] greenProbs = simulator.GetProbabilities(greenCircuit);
            float[] blueProbs  = simulator.GetProbabilities(blueCircuit);


            float normalizationRed   = 0;
            float normalizationGreen = 0;
            float normalizationBlue  = 0;

            if (!renormalize && redCircuit.OriginalSum > 0 && greenCircuit.OriginalSum > 0 && blueCircuit.OriginalSum > 0)
            {
                normalizationRed   = redCircuit.OriginalSum;
                normalizationGreen = greenCircuit.OriginalSum;
                normalizationBlue  = blueCircuit.OriginalSum;
            }
            else
            {
                for (int i = 0; i < width; i++)
                {
                    for (int j = 0; j < height; j++)
                    {
                        int pos = widthLines[i] * height + heightLines[j];
                        if (redProbs[pos] > normalizationRed)
                        {
                            normalizationRed = redProbs[pos];
                        }
                        if (greenProbs[pos] > normalizationGreen)
                        {
                            normalizationGreen = greenProbs[pos];
                        }
                        if (blueProbs[pos] > normalizationBlue)
                        {
                            normalizationBlue = blueProbs[pos];
                        }
                    }
                }
                normalizationRed   = 1.0f / normalizationRed;
                normalizationGreen = 1.0f / normalizationGreen;
                normalizationBlue  = 1.0f / normalizationBlue;
            }

            Unity.Collections.NativeArray <Color32> data = texture.GetRawTextureData <Color32>();

            //TODO set blocks of color


            float redValue;
            float greenValue;
            float blueValue;

            //Color color = new Color();

            int posX = 0;

            for (int x = 0; x < width; x++)
            {
                posX = widthLines[x] * height;
                for (int y = 0; y < height; y++)
                {
                    int index = posX + heightLines[y];
                    redValue   = (redProbs[index] * normalizationRed);
                    greenValue = (greenProbs[index] * normalizationGreen);
                    blueValue  = (blueProbs[index] * normalizationBlue);
                    //color.r = redValue;
                    //color.g = greenValue;
                    //color.b = blueValue;
                    texture.SetPixel(x, y, new Color(redValue, greenValue, blueValue));
                }
            }


            texture.Apply();
            return(texture);
        }