Ejemplo n.º 1
0
        public static List <int[]> CleanSequence(TwoBucketLab twoBucketLab)
        {
            List <int[]> cleanedSequence = new List <int[]>();


            int lastA = -1;
            int lastB = -1;

            foreach (var state in twoBucketLab.StateSequence)
            {
                if (state[0] == 0 && state[1] == 0)
                {
                    cleanedSequence.Clear();
                    //cleanedSequence.Add(state);
                }

                if (lastA != state[0] || lastB != state[1])
                {
                    cleanedSequence.Add(state);
                    lastA = state[0];
                    lastB = state[1];
                }
            }

            return(cleanedSequence);
        }
Ejemplo n.º 2
0
        private static void ManuallySolveForFour()
        {
            var firstBucket     = new Bucket(5);
            var secondBucket    = new Bucket(3);
            int desiredSolution = 4;

            //Setup
            var bucketLab = new TwoBucketLab(firstBucket, secondBucket, desiredSolution);

            Console.WriteLine(bucketLab);
            bucketLab.FillBucket(firstBucket);
            Console.WriteLine(bucketLab);
            bucketLab.Transfer(firstBucket, secondBucket, 3);
            Console.WriteLine(bucketLab);
            bucketLab.EmptyBucket(secondBucket);
            Console.WriteLine(bucketLab);
            bucketLab.Transfer(firstBucket, secondBucket);
            Console.WriteLine(bucketLab);
            bucketLab.FillBucket(firstBucket);
            Console.WriteLine(bucketLab);
            bucketLab.Transfer(firstBucket, secondBucket, 1);
            Console.WriteLine(bucketLab);
            bucketLab.EmptyBucket(secondBucket);
            Console.WriteLine(bucketLab);
            Console.ReadLine();
        }
Ejemplo n.º 3
0
        static void Main(string[] args)
        {
            // ManuallySolveForFour();

            // Initialize Problem

            List <List <int[]> > sequences          = new List <List <int[]> >();
            List <List <int[]> > solutionsSequences = new List <List <int[]> >();


            for (int i = 0; i < 50000; i++)
            {
                var          firstBucket           = new Bucket(3);
                var          secondBucket          = new Bucket(5);
                int          desiredSolutionVolume = 4;
                TwoBucketLab twoBucketLab          = new TwoBucketLab(firstBucket, secondBucket, desiredSolutionVolume);

                NaiveMonteCarloSolver naiveMonteCarloSolver = new NaiveMonteCarloSolver();
                naiveMonteCarloSolver.Initialize(twoBucketLab);
                naiveMonteCarloSolver.RunWhileNotSolvedOrLimit(1000); // limit here, just in case


                var cleanSequence = CleanSequence(twoBucketLab);

                WriteSequence(cleanSequence);
                sequences.Add(cleanSequence);
                Console.WriteLine("Done!");
                if (twoBucketLab.IsSolution())
                {
                    solutionsSequences.Add(cleanSequence);
                    Console.WriteLine("Really Done!");
                    //break;
                }
            }

            var uniqueSequences = Comparers.GetUniqueSequences(solutionsSequences);

            var sequencesByLength = uniqueSequences.Where(s => s.First()[0] == 0 && s.First()[1] == 0).OrderBy(m => m.Count()).Where(c => c.Count > 1);



            var firstTen = sequencesByLength.Take(20).ToList();

            foreach (var sequence in firstTen)
            {
                Console.WriteLine(sequence.Count);
                WriteSequence(sequence);
            }

            Console.ReadLine();
        }