Esempio n. 1
0
        private async Task RankWithNoOptions(PersonalizerClient client)
        {
            IList <object> contextFeatures = new List <object>()
            {
                new { Features = new { day = "tuesday", time = "night", weather = "rainy" } },
                new { Features = new { userId = "1234", payingUser = true, favoriteGenre = "documentary", hoursOnSite = 0.12, lastwatchedType = "movie" } }
            };
            IList <PersonalizerRankableAction> actions = new List <PersonalizerRankableAction>();

            actions.Add(
                new PersonalizerRankableAction(
                    id: "Person1",
                    features:
                    new List <object>()
            {
                new { videoType = "documentary", videoLength = 35, director = "CarlSagan" }, new { mostWatchedByAge = "30-35" }
            }
                    ));
            actions.Add(
                new PersonalizerRankableAction(
                    id: "Person2",
                    features:
                    new List <object>()
            {
                new { videoType = "documentary", videoLength = 35, director = "CarlSagan" }, new { mostWatchedByAge = "40-45" }
            }
                    ));
            // Action
            PersonalizerRankResult response = await client.RankAsync(actions, contextFeatures);

            Assert.AreEqual(actions.Count, response.Ranking.Count);
        }
Esempio n. 2
0
        public void GenerateRankResultTest()
        {
            List <PersonalizerRankableAction> originalActions = GetActions();
            List <PersonalizerRankableAction> rankableActions = new List <PersonalizerRankableAction>();
            List <PersonalizerRankableAction> excludedActions = new List <PersonalizerRankableAction>();

            rankableActions.Add(originalActions[1]);
            rankableActions.Add(originalActions[2]);
            rankableActions.Add(originalActions[3]);
            excludedActions.Add(originalActions[0]);

            List <ActionProbabilityWrapper> rankedActions = new List <ActionProbabilityWrapper>
            {
                new ActionProbabilityWrapperForTest(0, 0.7f),
                new ActionProbabilityWrapperForTest(1, 0.2f),
                new ActionProbabilityWrapperForTest(2, 0.1f)
            };

            RankingResponseWrapper responseWrapper = new RankingResponseWrapperForTest(rankedActions);

            string eventId = "testEventId";

            PersonalizerRankResult rankResponse = RlObjectConverter.GenerateRankResult(originalActions, rankableActions, excludedActions, responseWrapper, eventId);

            Assert.AreEqual("action1", rankResponse.RewardActionId);
            Assert.AreEqual(originalActions.Count, rankResponse.Ranking.Count);
            for (int i = 0; i < rankResponse.Ranking.Count; i++)
            {
                Assert.AreEqual(originalActions[i].Id, rankResponse.Ranking[i].Id);
            }
        }
Esempio n. 3
0
        public async Task RankNullParameters()
        {
            PersonalizerClient client = GetPersonalizerClient();
            IList <PersonalizerRankableAction> actions = new List <PersonalizerRankableAction>();

            actions.Add
                (new PersonalizerRankableAction(
                    id: "Person",
                    features:
                    new List <object>()
            {
                new { videoType = "documentary", videoLength = 35, director = "CarlSagan" }, new { mostWatchedByAge = "30-35" }
            }
                    ));
            var request = new PersonalizerRankOptions(actions);
            // Action
            PersonalizerRankResult response = await client.RankAsync(request);

            // Assert
            Assert.AreEqual(actions.Count, response.Ranking.Count);
            for (int i = 0; i < response.Ranking.Count; i++)
            {
                Assert.AreEqual(actions[i].Id, response.Ranking[i].Id);
            }
        }
Esempio n. 4
0
        public async Task RankServerFeatures()
        {
            PersonalizerClient client          = GetPersonalizerClient();
            IList <object>     contextFeatures = new List <object>()
            {
                new { Features = new { day = "tuesday", time = "night", weather = "rainy" } },
                new { Features = new { userId = "1234", payingUser = true, favoriteGenre = "documentary", hoursOnSite = 0.12, lastwatchedType = "movie" } }
            };
            IList <PersonalizerRankableAction> actions = new List <PersonalizerRankableAction>();

            actions.Add(
                new PersonalizerRankableAction(
                    id: "Person1",
                    features:
                    new List <object>()
            {
                new { videoType = "documentary", videoLength = 35, director = "CarlSagan" }, new { mostWatchedByAge = "30-35" }
            }
                    ));
            actions.Add(
                new PersonalizerRankableAction(
                    id: "Person2",
                    features:
                    new List <object>()
            {
                new { videoType = "documentary", videoLength = 35, director = "CarlSagan" }, new { mostWatchedByAge = "40-45" }
            }
                    ));
            IList <string> excludeActions = new List <string> {
                "Person1"
            };
            string eventId = "123456789";
            var    request = new PersonalizerRankOptions(actions, contextFeatures, excludeActions, eventId);
            // Action
            PersonalizerRankResult response = await client.RankAsync(request);

            // Assert
            Assert.AreEqual(eventId, response.EventId);
            Assert.AreEqual(actions.Count, response.Ranking.Count);
            for (int i = 0; i < response.Ranking.Count; i++)
            {
                Assert.AreEqual(actions[i].Id, response.Ranking[i].Id);
            }
        }
Esempio n. 5
0
        // </classVariables>

        // <mainLoop>
        static void Main(string[] args)
        {
            int  iteration = 1;
            bool runLoop   = true;

            IList <PersonalizerRankableAction> actions = GetActions();

            PersonalizerClient client = InitializePersonalizerClient(new Uri(ServiceEndpoint));

            do
            {
                Console.WriteLine("\nIteration: " + iteration++);

                string timeOfDayFeature = GetUsersTimeOfDay();
                string tasteFeature     = GetUsersTastePreference();

                IList <object> currentContext = new List <object>()
                {
                    new { time = timeOfDayFeature },
                    new { taste = tasteFeature }
                };

                IList <string> excludeActions = new List <string> {
                    "juice"
                };

                string eventId = Guid.NewGuid().ToString();

                var rankOptions = new PersonalizerRankOptions(actions, currentContext, excludeActions, eventId);
                PersonalizerRankResult result = client.Rank(rankOptions);

                Console.WriteLine("\nPersonalizer service thinks you would like to have: " + result.RewardActionId + ". Is this correct? (y/n)");

                float  reward = 0.0f;
                string answer = GetKey();

                if (answer == "Y")
                {
                    reward = 1f;
                    Console.WriteLine("\nGreat! Enjoy your food.");
                }
                else if (answer == "N")
                {
                    reward = 0f;
                    Console.WriteLine("\nYou didn't like the recommended food choice.");
                }
                else
                {
                    Console.WriteLine("\nEntered choice is invalid. Service assumes that you didn't like the recommended food choice.");
                }

                Console.WriteLine("\nPersonalizer service ranked the actions with the probabilities as below:");
                foreach (var rankedResponse in result.Ranking)
                {
                    Console.WriteLine(rankedResponse.Id + " " + rankedResponse.Probability);
                }

                client.Reward(result.EventId, reward);

                Console.WriteLine("\nPress q to break, any other key to continue:");
                runLoop = !(GetKey() == "Q");
            } while (runLoop);
        }