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