예제 #1
0
        /// <summary>This sample program has 3 options, and will use the the optimizer
        /// to run a test scenario. Two options are picked, and we will simulate user interest in one,
        /// then user sentiment changing to favor the second option.</summary>
        private static void TestOptimizer()
        {
            var optimizer = new Optimizer();

            // define the available options
            Option[] options = new Option[] {
                Option.Named("Orange"),
                Option.Named("Green"),
                Option.Named("White")
            };
            optimizer.Add(options[0]);
            optimizer.Add(options[1]);
            optimizer.Add(options[2]);

            // pick two options, and define when user interest will change
            var firstWinner  = options[2]; // white
            var secondWinner = options[1]; // green
            var switchRatio  = .35f;       // 35% of the way through the test set
            int tries        = 100;        // the test set

            for (int i = 0; i < tries; i++)
            {
                Option selected = optimizer.Choose().Result; // don't care about asyncrony in this particular example
                Console.WriteLine("Choosing: {0}", selected);

                // decide which chosen option 'the users' will prefer
                bool isFirstBatch = (float)tries * switchRatio > i;
                if (isFirstBatch && selected == firstWinner)
                {
                    firstWinner.IncrementSuccesses();
                }
                else if (!isFirstBatch && selected == secondWinner)
                {
                    secondWinner.IncrementSuccesses();
                }
            }

            Console.WriteLine("\nResults! We expect that ({0}) will have the highest success rate, and ({1}) will be in second place", secondWinner, firstWinner);
            Console.WriteLine("\nThis is the final result after {0} tries\n{1}", tries, optimizer);
        }