void RemoveSingleCells(ref Superposition[,] newSuperpositon, Superposition[,] existingSuperpositions,
                               Superposition empty, int neighbourLimit, int iterations)
        {
            for (int k = 0; k < iterations; k++)
            {
                int removed = 0;
                for (int i = 0; i < existingSuperpositions.GetLength(0); i++)
                {
                    for (int j = 0; j < existingSuperpositions.GetLength(1); j++)
                    {
                        // If tile is not white - check the neighbours.
                        if (existingSuperpositions[i, j].state != State.EMPTY)
                        {
                            // Count all the neighbours that are not white.
                            var neighbours = CountNotEmptyNeighbours(i, j, existingSuperpositions);

                            if (neighbours < neighbourLimit)
                            {
                                newSuperpositon[i, j]       = empty;
                                newSuperpositon[i, j].state = State.EMPTY;

                                removed++;
                            }
                        }
                    }
                }
                Console.WriteLine("removed: " + removed);
            }
        }
Пример #2
0
        static void Main(string[] args)
        {
            int ones  = 0;
            int zeros = 0;

            // Show statistical propability of Superposition
            using (var qsim = new QuantumSimulator())
            {
                for (int k = 0; k < 1000; k++)
                {
                    var result = Superposition.Run(qsim).Result;

                    if (result == Result.One)
                    {
                        ones++;
                    }
                    else
                    {
                        zeros++;
                    }
                }
            }

            Console.WriteLine("==============================================");
            Console.WriteLine("======== Superposition Calculations ==========");
            Console.WriteLine("==============================================");
            Console.WriteLine();
            Console.WriteLine($"Number of ONES: {ones}, Number of ZEROS: {zeros}");
            Console.WriteLine($"With a 50% propability they should have a simular distribution");
            Console.WriteLine();

            Console.ReadKey();
        }
Пример #3
0
        public void SuperpositionManipulationTest()
        {
            tree = new MediationTree(testDomain, testProblem, pathSuper, false, false, true);
            List <VirtualMediationTreeEdge> supers = new List <VirtualMediationTreeEdge>();

            foreach (MediationTreeEdge edge in tree.Root.Outgoing)
            {
                if (edge is VirtualMediationTreeEdge)
                {
                    supers.Add(edge as VirtualMediationTreeEdge);
                }
            }
            Assert.AreEqual(supers.Count, 1);

            VirtualMediationTreeNode node = tree.GetNode(tree.Root.Domain, tree.Root.Problem, supers[0]) as VirtualMediationTreeNode;

            node = tree.GetNode(node.Domain, node.Problem, node.Outgoing.Find(x => x.Action.Name.Equals("toggle-green"))) as VirtualMediationTreeNode;
            node = tree.GetNode(node.Domain, node.Problem, node.Outgoing[0]) as VirtualMediationTreeNode;
            Assert.IsTrue(node.Outgoing.Count > 1);

            node = tree.GetNode(node.Domain, node.Problem, node.Outgoing.Find(x => x.Action.Name.Equals("toggle-red"))) as VirtualMediationTreeNode;
            node = tree.GetNode(node.Domain, node.Problem, node.Outgoing[0]) as VirtualMediationTreeNode;
            node = tree.GetNode(node.Domain, node.Problem, node.Outgoing.Find(x => x.Action.Name.Equals("toggle-green"))) as VirtualMediationTreeNode;
            node = tree.GetNode(node.Domain, node.Problem, node.Outgoing[0]) as VirtualMediationTreeNode;

            Predicate term = new Predicate("used", new List <ITerm> {
                new Term("terminal1", true), new Term("boss", true)
            }, true);
            Predicate term2 = new Predicate("used", new List <ITerm> {
                new Term("terminal2", true), new Term("boss", true)
            }, true);
            Predicate term3 = new Predicate("has", new List <ITerm> {
                new Term("snake", true), new Term("c4", true)
            }, true);
            Predicate bossGear = new Predicate("at", new List <ITerm> {
                new Term("boss", true), new Term("gear", true)
            }, true);

            Superposition super = node.State as Superposition;

            Assert.IsTrue(super.IsUndetermined(term));
            Assert.IsTrue(super.IsUndetermined(term2));
            Assert.IsFalse(super.IsUndetermined(term3));

            node  = tree.GetNode(node.Domain, node.Problem, node.Outgoing.Find(x => x.Action.Name.Equals("move-location"))) as VirtualMediationTreeNode;
            super = node.State as Superposition;
            Assert.IsFalse(super.IsUndetermined(term));

            if (super.IsFalse(bossGear))
            {
                Assert.IsTrue(super.IsUndetermined(term2));
            }
            else
            {
                Assert.IsFalse(super.IsUndetermined(term2));
            }
        }
        // Create new superpositions that are empty.
        Superposition[,] NewCopiedSuperposition(Superposition[,] superpositions, List <Pattern> patterns)
        {
            var empty = new Superposition[superpositions.GetLength(0), superpositions.GetLength(1)];

            {
                for (int i = 0; i < superpositions.GetLength(0); i++)
                {
                    for (int j = 0; j < superpositions.GetLength(1); j++)
                    {
                        empty[i, j] = new Superposition(superpositions[i, j], patterns);
                    }
                }
            }

            return(empty);
        }
Пример #5
0
        static void Main(string[] args)
        {
            using (var qsim = new QuantumSimulator())
            {
                //  Each Q# operation generates a C# class with the same name. 
                // This class has a Run method that asynchronously executes the operation. 
                // The execution is asynchronous because execution on actual hardware will be asynchronous.
                // However, Result blocks execution until task completes; return synchronously
                var res = HelloQ.Run(qsim).Result;
            }
            System.Console.WriteLine("Press any key to continue...");
            System.Console.WriteLine("Next up: Superposition: ");
            Console.ReadKey();
                // work with superposition
            using (var qsim = new QuantumSimulator())
            {
                // Try initial values
                Result[] initials = new Result[] { Result.Zero, Result.One };
                foreach (Result initial in initials)
                {
                    // '.Result' blocks execution until the task completes and returns the result synchronously.
                    var res = Superposition.Run(qsim, 1000, initial).Result;
                    var (numZeros, numOnes) = res;
                    System.Console.WriteLine(
                        $"Init:{initial,-4} 0s={numZeros,-4} 1s={numOnes,-4}");
                }
            }

            System.Console.WriteLine("Press any key to continue...");
            System.Console.WriteLine("Next up: Entanglement: ");
            Console.ReadKey();
                // work with entanglement
            using (var qsim = new QuantumSimulator())
            {
                Result[] initials = new Result[] { Result.Zero, Result.One };
                foreach (Result initial in initials)
                {
                    var res = Entanglement.Run(qsim, 1000, initial).Result;
                    var (numZeros, numOnes, agree) = res;
                    System.Console.WriteLine(
                        $"Init:{initial,-4} 0s={numZeros,-4} 1s={numOnes,-4} agree={agree,-4}");
                }
            }

            System.Console.WriteLine("Press any key to continue...");
            Console.ReadKey();
        }
Пример #6
0
 static void Run_Superposition(string[] args)
 {
     Console.WriteLine("Running: Superposition Test");
     // Initialise the quantum simulator
     using (var qsim = new QuantumSimulator())
     {
         Result[] initials = { Result.Zero, Result.One };
         foreach (var initial in initials)
         {
             // Execute the quantum function
             var res = Superposition.Run(qsim, 1000, initial).Result;
             var(numZeros, numOnes) = res;
             Console.WriteLine($"Init:{initial,-4} 0s={numZeros,-4} 1s={numOnes,-4}");
         }
     }
     Console.WriteLine();
 }
        Superposition FindEmptySuperpositionToReplace(Superposition[,] superpositions, List <Pattern> patterns)
        {
            Superposition x = new Superposition(superpositions[0, 0], patterns);

            for (int i = 0; i < superpositions.GetLength(0); i++)
            {
                for (int j = 0; j < superpositions.GetLength(1); j++)
                {
                    if (superpositions[i, j].state == State.EMPTY)
                    {
                        return(superpositions[i, j]);
                    }
                }
            }

            return(null);
        }
Пример #8
0
 // Given a mediation node, creates an HTML representation of its initial state.
 public static void ToHTML(string directory, Superposition super)
 {
     /*string file = directory + "super.html";
      *
      * using (StreamWriter writer = new StreamWriter(file, false))
      * {
      *  writer.WriteLine("<html>");
      *  writer.WriteLine("<head><style>td { text-align:center }</style></head>");
      *  writer.WriteLine("<body>");
      *  writer.WriteLine("<table text-align=\"center\">");
      *  foreach (IPredicate key in super.Table.Keys)
      *  {
      *      writer.WriteLine("<tr><th colspan=\"2\">" + key + "</th><th colspan=\"2\">(not " + key + ")</th></tr><tr><th>TRUE</th><th>FALSE</th><th>TRUE</th><th>FALSE</th></tr>");
      *      List<IPredicate> tt = super.GetContents(key, super.TrueTrue);
      *      List<IPredicate> tf = super.GetContents(key, super.TrueFalse);
      *      List<IPredicate> ft = super.GetContents(key, super.FalseTrue);
      *      List<IPredicate> ff = super.GetContents(key, super.FalseFalse);
      *
      *      int max = Math.Max(tt.Count, Math.Max(tf.Count, Math.Max(ft.Count, ff.Count)));
      *
      *      for (int i = 0; i < max; i++)
      *      {
      *          writer.WriteLine("<tr>");
      *          if (i < tt.Count) writer.WriteLine("<td>" + tt[i] + "</td>");
      *          else writer.WriteLine("<td> </td>");
      *          if (i < tf.Count) writer.WriteLine("<td>" + tf[i] + "</td>");
      *          else writer.WriteLine("<td> </td>");
      *          if (i < ft.Count) writer.WriteLine("<td>" + ft[i] + "</td>");
      *          else writer.WriteLine("<td> </td>");
      *          if (i < ff.Count) writer.WriteLine("<td>" + ff[i] + "</td>");
      *          else writer.WriteLine("<td> </td>");
      *          writer.WriteLine("</tr>");
      *      }
      *  }
      *  writer.WriteLine("</table>");
      *  writer.WriteLine("</body>");
      *  writer.WriteLine("</html>");
      * }*/
 }
        Superposition[,] RemoveNoiseFromImage(WaveCollapseHistoryElement wfc, PatternFromSampleElement p)
        {
            var patterns = p.Patterns;
            // Original image superpositions
            var superpositions = wfc.Superpositions;

            // Create new copied superpositions[,].
            Superposition[,] superpositionsWithoutNoise = NewCopiedSuperposition(superpositions, patterns);

            // Find superposition to replace once colorful cells should be changed to empty.
            Superposition emptySuperpositiontoReplace = FindEmptySuperpositionToReplace(superpositions, patterns);

            RemoveSingleCells(ref superpositionsWithoutNoise, superpositions, emptySuperpositiontoReplace, 2, 1);
            RemoveSingleCells(ref superpositionsWithoutNoise, superpositions, emptySuperpositiontoReplace, 1, 1);
            RemoveSingleCells(ref superpositionsWithoutNoise, superpositions, emptySuperpositiontoReplace, 2, 1);
            RemoveSingleCells(ref superpositionsWithoutNoise, superpositions, emptySuperpositiontoReplace, 1, 1);
            //RemoveSingleCells(ref superpositionsWithoutNoise, superpositions, emptySuperpositiontoReplace, 2, 1);
            //RemoveSingleCells(ref superpositionsWithoutNoise, superpositions, emptySuperpositiontoReplace, 1, 1);
            //RemoveSingleCells(ref superpositionsWithoutNoise, superpositions, emptySuperpositiontoReplace, 2, 1);
            //RemoveSingleCells(ref superpositionsWithoutNoise, superpositions, emptySuperpositiontoReplace, 1, 1);


            return(superpositionsWithoutNoise);
        }
Пример #10
0
        // Finds all possible actions for the given character and state.
        public static List <Operator> GetActions(string character, Domain domain, Problem problem, Superposition superposition)
        {
            List <Operator> satisfiedActions = new List <Operator>();

            foreach (State state in superposition.States)
            {
                satisfiedActions.AddRange(GetActions(character, domain, problem, state));
            }

            return(satisfiedActions.Distinct <Operator>().ToList <Operator>());
        }