public int ProcessTags(List <UserTagReport> tags, List <User> Users, ExperimentOptions Options, int RealTag, bool isTraining) { int PredictedTag; if (isTraining) { PredictedTag = RealTag; } else { if (Options.maxTrust) { PredictedTag = (from report in tags orderby Users[report.UserID].PredictedTrust descending, report.RandomColumnValue select report.Tag).ToArray()[0]; } else { double sum1 = 0, sum2 = 0; int t; foreach (var report in tags) { t = Users[report.UserID].PredictedTrust; sum1 += t * report.Tag; sum2 += t; } double a1 = (sum1 / sum2 - 1) / (DataSimulation.DefaultGroupSimulationOptions.TagOccupancies.Length - 1 - 1); PredictedTag = policy.ConvertOccupancyValueToTag(a1, DataSimulation.DefaultGroupSimulationOptions.TagOccupancies); } } return(PredictedTag); }
double lamda_user = 0.95; // forgetting for user. 1:remember everything 0:remember nothing public int ProcessTags(List <UserTagReport> tags, List <User> Users, ExperimentOptions Options, int RealTag, bool isTraining, List <double> SectionRValue, List <double> SectionSValue) { int PredictedTag; int CurrentSection = tags[0].Section; double user_tag; int user_id; double user_trust; double rsum = 0; double ssum = 0; double mxt = -1; double sro, sso, r, s, E; double MaxVoteTag = 1; if (isTraining) { PredictedTag = RealTag; } else { sro = SectionRValue[CurrentSection - 1]; sso = SectionSValue[CurrentSection - 1]; for (int i = 0; i < tags.Count; i++) { user_id = tags[i].UserID; user_tag = tags[i].Tag; user_trust = Users[user_id].PredictedTrust; r = user_tag; s = param.maxTagOptions - user_tag + 1; if (!Options.maxTrust) { rsum += r * user_trust; ssum += s * user_trust; } else { if (user_trust > mxt) { mxt = user_trust; rsum = r; ssum = s; } } } rsum += lamda_section * sro; ssum += lamda_section * sso; E = rsum / (rsum + ssum); PredictedTag = policy.ConvertOccupancyValueToTag(E, DataSimulation.DefaultGroupSimulationOptions.TagOccupancies); SectionRValue[CurrentSection - 1] = rsum; SectionSValue[CurrentSection - 1] = ssum; } return(PredictedTag); }