Example #1
0
        private double[][] BuildUtilityMatrix(ref Dictionary <int, int> userIndexMap, List <int> userList, List <string> activityList)
        {
            Dictionary <string, int> ActivityIndexMap = new Dictionary <string, int>();

            //declare the utility matrix
            double[][] utilityMatrix = new double[userList.Count][];

            int iterator = 0;

            //fill utility matrix from entries in DB
            foreach (var i in activityList)
            {
                ActivityIndexMap.Add(i, iterator);
                iterator++;
            }
            iterator = 0;
            foreach (var i in userList)
            {
                userIndexMap.Add(iterator, i);
                UserActivityList ual = uac.GetUsersActivityList(i);
                utilityMatrix[iterator] = new double[activityList.Count];
                foreach (var activity in ual.Activities)
                {
                    int activityIndex = ActivityIndexMap[activity.Activity];
                    utilityMatrix[iterator][activityIndex] = activity.Rating;
                }
                iterator++;
            }

            return(utilityMatrix);
        }
Example #2
0
        public IHttpActionResult GetRecommendation(int userID, int numRec)
        {
            var prediction_u_i           = new List <Activities>();
            UserActivityList userprofile = new UserActivityList();

            try
            {
                userprofile = uac.GetUsersActivityList(userID);
                predictUserPreference(userID, userprofile, ref prediction_u_i);
            }
            catch (MissingMemberException) {}
            catch (Exception e) { return(BadRequest(e.Message)); }

            userprofile.Activities.ForEach(x => prediction_u_i.Add(new Activities(x.Activity, x.Rating)));
            prediction_u_i.OrderBy(x => x.Rating);

            // Add context filer here;

            //Random Wheel Selection
            var numRecommendations = Math.Min(numRec, prediction_u_i.Count);
            var recommendation     = new List <string>();

            for (var i = 0; i < numRecommendations; i++)
            {
                recommendation.Add(prediction_u_i[routletteSelect(prediction_u_i)].Activity);
            }

            return(Ok(recommendation.Distinct()));
        }
Example #3
0
        /// <summary>
        /// Retrieves list of UserActivity objects from SqlCommand, after database query
        /// number of rows retrieved and returned depends upon the rows field value
        /// </summary>
        /// <param name="cmd">The command object to use for query</param>
        /// <param name="rows">Number of rows to process</param>
        /// <returns>A list of UserActivity objects</returns>
        private UserActivityList GetList(SqlCommand cmd, long rows)
        {
            // Select multiple records
            SqlDataReader reader;
            long          result = SelectRecords(cmd, out reader);

            //UserActivity list
            UserActivityList list = new UserActivityList();

            using ( reader )
            {
                // Read rows until end of result or number of rows specified is reached
                while (reader.Read() && rows-- != 0)
                {
                    UserActivity userActivityObject = new UserActivity();
                    FillObject(userActivityObject, reader);

                    list.Add(userActivityObject);
                }

                // Close the reader in order to receive output parameters
                // Output parameters are not available until reader is closed.
                reader.Close();
            }

            return(list);
        }
Example #4
0
        private void UpdateButton_Click(object sender, EventArgs e)
        {
            foreach (User u in new UsersMapper().Select())
            {
                u.Measurements = new MeasurementsMapper().SelectUserMeas(u.Userid);
                u.DietPlans    = new DietPlanMapper().SelectUserDietPlans(u.Userid);
                u.WorkoutPlans = new WorkoutPlanMapper().SelectUserWorkoutPlans(u.Userid);

                measurementsUsersDataSourceList.Add(u.GetActivityNumber());
            }

            UserActivityList.DataSource = measurementsUsersDataSourceList;
            UserActivityList.Show();
        }
Example #5
0
        public IHttpActionResult PostUserActivity(UserActivityList activities)
        {
            try
            {
                checkUACModelState(activities);
            }
            catch (Exception e)
            {
                return(BadRequest("Activities List is invalid."));
            }

            uac.BulkUpdateUserActivity(activities);
            return(Ok());
        }
Example #6
0
        /// <summary>
        /// Retrieves all UserActivity objects by PageRequest
        /// </summary>
        /// <returns>A list of UserActivity objects</returns>
        public UserActivityList GetPaged(PagedRequest request)
        {
            using (SqlCommand cmd = GetSPCommand(GETPAGEDUSERACTIVITY))
            {
                AddParameter(cmd, pInt32Out("TotalRows"));
                AddParameter(cmd, pInt32("PageIndex", request.PageIndex));
                AddParameter(cmd, pInt32("RowPerPage", request.RowPerPage));
                AddParameter(cmd, pNVarChar("WhereClause", 4000, request.WhereClause));
                AddParameter(cmd, pNVarChar("SortColumn", 128, request.SortColumn));
                AddParameter(cmd, pNVarChar("SortOrder", 4, request.SortOrder));

                UserActivityList _UserActivityList = GetList(cmd, ALL_AVAILABLE_RECORDS);
                request.TotalRows = Convert.ToInt32(GetOutParameter(cmd, "TotalRows"));
                return(_UserActivityList);
            }
        }
Example #7
0
        private void predictUserPreference(int userID, UserActivityList userprofile, ref List <Activities> prediction_u_i)
        {
            UserNeighbourhood neighbours = unc.GetUserNeighbourhood(userID);

            var similarity = neighbours.similiarity.Split(';').Select(double.Parse).ToList();
            var neighbour  = neighbours.neighbours.Split(';').Select(int.Parse).ToList();

            List <string> allActivities = uac.GetAllActivities();

            double averageUserProfile = userprofile.Activities.Sum(x => x.Rating) / userprofile.Activities.Count;

            userprofile.Activities.ForEach(x => allActivities.Remove(x.Activity));

            foreach (var activity in allActivities)
            {
                double top    = 0;
                double bottom = 0;
                double rating = 0.0;

                for (var i = 0; i < neighbour.Count; i++)
                {
                    if (neighbour[i] != userID)
                    {
                        var    neighbourProfile    = uac.GetUsersActivityList(neighbour[i]);
                        double avgNProfile         = neighbourProfile.Activities.Sum(x => x.Rating) / neighbourProfile.Activities.Count;
                        double ratingItemNeighbour = 0.0;
                        if (neighbourProfile.Activities.Exists(x => x.Activity == activity))
                        {
                            ratingItemNeighbour = neighbourProfile.Activities.First(x => x.Activity == activity).Rating;
                        }

                        top    = top + (similarity[i] * (ratingItemNeighbour - avgNProfile));
                        bottom = bottom + Math.Abs(similarity[i]);
                    }
                }
                if (bottom == 0)
                {
                    rating = averageUserProfile;
                }
                else
                {
                    rating = averageUserProfile + (top / bottom);
                }

                prediction_u_i.Add(new Activities(activity, rating));
            }
        }
Example #8
0
        static void Main(string[] args)
        {
            //////////////////////////////////////////////////////////////

            Console.Write("Starting New User Profile Example \r\n");

            UserActivityList ual = new UserActivityList(23);

            ual.Activities.Add(new Activities("football", 1.0));
            ual.Activities.Add(new Activities("reading", 1.0));

            var client = new RestClient("http://localhost:63498/");

            var request = new RestRequest("generateNewUserProfile", Method.POST);

            request.AddJsonBody(ual);
            request.AddHeader("Content-Type", "application/json");

            IRestResponse response = client.Execute(request);
            var           content  = response.Content;


            Console.Write(content);

            Console.Write("Ending New User Profile Example\r\n");

            //////////////////////////////////////////////////////////////

            Console.Write("Start Current User Performs Activity\r\n");

            UserActivity ua = new UserActivity(123, "football", 2);

            request = new RestRequest("UserPerformActivity", Method.POST);
            request.AddJsonBody(ua);
            request.AddHeader("Content-Type", "application/json");

            response = client.Execute(request);
            content  = response.Content;

            Console.Write(content);

            Console.Write("End Current User Performs Activity\r\n");

            //////////////////////////////////////////////////////////////
            Console.ReadKey();
        }
Example #9
0
        /// <summary>
        /// Retrieve list of UserActivity.
        /// </summary>
        /// <param name="fillChild"></param>
        /// <returns>List of UserActivity</returns>
        public UserActivityList GetAll(bool fillChild)
        {
            UserActivityList userActivityList = new UserActivityList();

            using (UserActivityDataAccess data = new UserActivityDataAccess(ClientContext))
            {
                userActivityList = data.GetAll();
            }
            if (fillChild)
            {
                foreach (UserActivity userActivityObject in userActivityList)
                {
                    FillUserActivityWithChilds(userActivityObject, fillChild);
                }
            }
            return(userActivityList);
        }
Example #10
0
        private void checkUACModelState(UserActivityList activities)
        {
            if (activities.UserId == null)
            {
                throw new Exception();
            }

            if (activities.Activities == null)
            {
                throw new Exception();
            }

            foreach (var i in activities.Activities)
            {
                if (i.Activity == "" || i.Activity == null || i.Rating == 0 || i.Rating == null)
                {
                    throw new Exception();
                }
            }
        }
Example #11
0
        public void BulkUpdateUserActivity(UserActivityList userlist)
        {
            foreach (var i in userlist.Activities)
            {
                UserActivity row = db.UserActivities.Find(userlist.UserId, i.Activity);

                if (row == null)
                {
                    db.UserActivities.Add(new UserActivity {
                        UserId = userlist.UserId, Activity = i.Activity, Rating = i.Rating
                    });
                }
                else
                {
                    row.Rating = (i.Rating + row.Rating) / 2;
                }

                db.SaveChanges();
            }
        }
Example #12
0
        public UserActivityList GetUsersActivityList(int userId)
        {
            UserActivityList user = new UserActivityList(userId);

            var UserInfo = from UserActivity in db.UserActivities
                           where UserActivity.UserId == userId
                           select UserActivity;

            foreach (var x in UserInfo)
            {
                Activities entry = new Activities(x.Activity, x.Rating);
                user.Activities.Add(entry);
            }

            if (!user.Activities.Any())
            {
                throw new Exception("User Id not found");
            }

            return(user);
        }