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); }
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())); }
/// <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); }
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(); }
public IHttpActionResult PostUserActivity(UserActivityList activities) { try { checkUACModelState(activities); } catch (Exception e) { return(BadRequest("Activities List is invalid.")); } uac.BulkUpdateUserActivity(activities); return(Ok()); }
/// <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); } }
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)); } }
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(); }
/// <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); }
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(); } } }
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(); } }
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); }