コード例 #1
0
        // Command line argument: C:\Users\M-PEC\Desktop\TwitterDB RWR_MAP_Domain1_1.txt 1 5 15
        public static void Main(string[] args)
        {
            Console.WriteLine("RWR-based Recommendation (" + DateTime.Now.ToString() + ")\n");
            Stopwatch programStopwatch = Stopwatch.StartNew(); // Stopwatch: C# Standard Library Class

            // Program arguments
            dirData = @args[0] + Path.DirectorySeparatorChar;           // Path of directory that containes SQLite DB files
            string outFilePath = args[0] + "\\" + args[1];
            Console.WriteLine(outFilePath);
            string[] methodologyList = args[2].Split(',');              // The list of experimental codes (csv format; for example: 0,1,8,9,10,11,12 )
            int nFolds = int.Parse(args[3]);                            // Number of folds
            int nIterations = int.Parse(args[4]);                       // Number of iterations for RWR

            // Load existing experimental results: SKIP already performed experiments
            if (File.Exists(outFilePath))
            {
                StreamReader reader = new StreamReader(outFilePath);
                string line;
                //reader.ReadLine(); // Discard First Line(Headline)
                while ((line = reader.ReadLine()) != null)
                {
                    string[] tokens = line.Split('\t');
                    long egouser = long.Parse(tokens[0]);
                    int experiment = int.Parse(tokens[1]);
                    if (!existingResults.ContainsKey(egouser))
                        existingResults.Add(egouser, new List<int>());
                    existingResults[egouser].Add(experiment);
                }
                reader.Close();
            }

            // Run experiments using multi-threading
            string[] sqliteDBs = Directory.GetFiles(dirData, "*.sqlite");

            // Methodology list
            methodologies = new List<Methodology>();
            foreach (string methodology in methodologyList) // 'methodologyList' == args[1]
                methodologies.Add((Methodology)int.Parse(methodology));

            // Result File Format
            Program.logger = new StreamWriter(outFilePath, true);
            //Program.logger.WriteLine("{0}\t\t{1}\t{2}\t{3}\t{4}\t\t\t{5}\t\t\t{6}\t{7}\t{8}", "EGO", "Method", "Kfold", "Iter", "MAP", "RECALL", "LIKE", "HIT", "FRIEND");

            // #Core Part: One .sqlite to One thread
            bool alreadyExperimented;
            int cntSemaphore = 1;
            semaphore = new Semaphore(cntSemaphore, cntSemaphore);
            Stopwatch dbStopwatch = null; // Stopwatch: C# Standard Library Class
            foreach (string dbFile in sqliteDBs)
            {
                Console.WriteLine("Start Ego: " + Path.GetFileNameWithoutExtension(dbFile));
                dbStopwatch = Stopwatch.StartNew();
                Experiment experiment = new Experiment(dbFile);
                alreadyExperimented = experiment.startPersonalizedPageRank(nFolds, nIterations);
                dbStopwatch.Stop();
                if (alreadyExperimented == true)
                {
                    Program.logger.WriteLine("\t" + Tools.getExecutionTime(dbStopwatch));
                    Program.logger.Flush();
                }
            }

            // Close Output file
            Program.logger.Close();

            // Execution Time
            programStopwatch.Stop();
            Console.WriteLine("Execution Time: " + Tools.getExecutionTime(programStopwatch));
            Console.WriteLine("Finished!");

        }
コード例 #2
0
        // Command line argument: C:\Users\dilet\Desktop\TwitterDB 0 10 15 0.1 1 1
        public static void Main(string[] args) 
        {
            Console.WriteLine("RWR-based Recommendation (" + DateTime.Now.ToString() + ")\n");
            Stopwatch programStopwatch = Stopwatch.StartNew();

            // Program arguments
            string dirPath = args[0] + Path.DirectorySeparatorChar;     // Path of directory that containes SQLite DB files
            string[] methodologyList = args[1].Split(',');              // The list of experimental codes (csv format; for example: 0,1,8,9,10,11,12 )
            int kFolds = int.Parse(args[2]);                            // Number of folds
            int nIterations = int.Parse(args[3]);                       // Number of iterations for RWR
            egoLikeThresholdRatioInTestSet = double.Parse(args[4]);
            isOnlyFriendInEgoNetwork = (int.Parse(args[5]) == 1) ? true : false;
            isGenericFriendship = (int.Parse(args[6]) == 1) ? true : false;

            // <Ego, dbPath(.sqlite)> Sorted by Ego ID(Ascending Order)
            string[] dbCollection = Directory.GetFiles(dirPath, "*.sqlite");
            SortedDictionary<long, string> egoList = new SortedDictionary<long, string>();
            foreach (string dbPath in dbCollection)
            {
                long egoID = long.Parse(Path.GetFileNameWithoutExtension(dbPath));
                egoList.Add(egoID, dbPath);
            }          

            // Methodology list(Experiment Codes)
            List<Methodology> methodologies = new List<Methodology>();
            foreach (string methodology in methodologyList)
                methodologies.Add((Methodology) int.Parse(methodology));

            // #Core Part: One .sqlite to One thread
            int cntSemaphore = 1;
            Program.dbSemaphore = new Semaphore(cntSemaphore, cntSemaphore);
            foreach (Methodology methodology in methodologies)
            {
                // Outfile Setting
                string outFilePath = args[0] + Path.DirectorySeparatorChar + "RWR_MAP_10Split_Friend_Domain1_" + (int)methodology + "_Friendship0.txt";
                
                // Load existing experimental results: SKIP already performed experiments
                HashSet<long> alreadyPerformedEgoList = new HashSet<long>(); // (<ego ID>, <{Experiments Codes}>)
                if (File.Exists(outFilePath))
                {
                    using (StreamReader reader = new StreamReader(outFilePath))
                    {
                        string line;
                        while ((line = reader.ReadLine()) != null)
                        {
                            string[] tokens = line.Split('\t');
                            long egoUser = long.Parse(tokens[0]);
                            alreadyPerformedEgoList.Add(egoUser);
                        }
                    }
                }
                Program.logger = new StreamWriter(outFilePath, true);

                // Personalized PageRank: Multi-threading
                Experiment experiment;
                personalizedPageRankThreadParamters pagaRankParameters;
                List<Thread> threadList = new List<Thread>();
                foreach (KeyValuePair<long, string> egoDBpair in egoList)
                {
                    long egoID = egoDBpair.Key;
                    string dbPath = egoDBpair.Value;
                    if (alreadyPerformedEgoList.Contains(egoID) == true)
                    {
                        Console.WriteLine("Ego {0} Already Performend", egoID);
                        continue;
                    }                     
                    try
                    {
                        // one Thread to one DB
                        Program.dbSemaphore.WaitOne();
                        Console.WriteLine("Ego {0} Start", egoID);
                        experiment = new Experiment(dbPath);
                        Thread thread = new Thread(experiment.startPersonalizedPageRank);
                        pagaRankParameters = new personalizedPageRankThreadParamters(kFolds, nIterations, methodology);
                        thread.Start(pagaRankParameters);
                        threadList.Add(thread);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                    }
                }
                foreach (Thread thread in threadList)
                    thread.Join();
                // Close Output file
                Program.logger.Close();
            }
            // Execution Time
            programStopwatch.Stop();
            Console.WriteLine("Execution Time: " + Tools.getExecutionTime(programStopwatch));
            Console.WriteLine("Finished!");
        }