Пример #1
0
        // Functia principala de calcul a Recomandarilor.
        public static List<Preparat> Recomandari(int id_user, Comanda comanda_actuala, int k)
        {
            IstoricComenzi istoric = DatabaseFunctions.getIstoric(id_user);
            List<Comanda> istoric_comenzi = istoric.ListaComenzi;
            List<Preparat> recomandari=null;

            if (istoric_comenzi.Count > 0)
            {
                recomandari = Gaseste_recomandari_ContentBased(id_user, k/2, istoric_comenzi);
                List<Preparat> recomandari_collective = Gaseste_recomandari_Collective(id_user, comanda_actuala, k);
                foreach (var preparat in recomandari_collective)
                {
                    if (recomandari.Count == k)
                    {
                        break;
                    }
                    if (!recomandari.Contains(preparat))
                    {
                        recomandari.Add(preparat);
                    }
                }
            }
            else
            {
                List<String> lista_specifice = DatabaseFunctions.getSpecificsForUser(id_user);
                if (lista_specifice == null)
                    recomandari = DatabaseFunctions.topKPreparate(k);
                else
                    recomandari = DatabaseFunctions.topKPreparateSpecific(lista_specifice, k);
            }
            return recomandari;
        }
Пример #2
0
 // Recomandari calculate prin Collective Filtering.
 private static List<Preparat> Gaseste_recomandari_Collective(int id_user, Comanda comanda, int k)
 {
     // Gasim cei mai similari k vecini pentru userul cu id-ul user_id.
     int[] lista_vecini ;
     if (DatabaseFunctions.numarUtilizatori() < 1000)
     {
         lista_vecini = Calculeaza_vecini(3, id_user);
     }
     else
     {
         lista_vecini = Calculeaza_vecini_LSH(3, id_user);
     }
     List<IstoricComenzi> lista_istorice = DatabaseFunctions.istoricUtilizatori(lista_vecini);
     IstoricComenzi istoric_user = DatabaseFunctions.getIstoric(id_user);
     // Eliminare preparate comandate.
     // Eliminare cele a caror ora nu apartine intervalului curent.
     comanda = (comanda == null)? new Comanda(): comanda;
     List<Preparat> preparate = eliminaComandate(lista_istorice, istoric_user, comanda);
     List<Preparat> recomandari = preparate.GetRange(0,k) as List<Preparat>;
     return recomandari;
 }
Пример #3
0
 private static List<Preparat> eliminaComandate(List<IstoricComenzi> istorice, IstoricComenzi istoric_user, Comanda comanda)
 {
     HashSet<Preparat> preparate = new HashSet<Preparat>();
     int avg = DatabaseFunctions.numarMediuComandariPreparat(istoric_user.IdUser);
     foreach (var istoric in istorice)
     {
         foreach (var com in istoric.ListaComenzi)
         {
             foreach (DictionaryEntry item in com.ListaItem)
             {
                 ItemComanda item_comanda = item.Value as ItemComanda;
                 int nr = DatabaseFunctions.numarComandariPreparat(istoric_user.IdUser, item_comanda.Preparat.Id);
                 if (!comanda.ListaItem.ContainsKey(item_comanda.Preparat.Id) && avg >= nr)
                 {
                     preparate.Add(item_comanda.Preparat);
                 }
             }
         }
     }
     return preparate.ToList();
 }