Beispiel #1
0
        private void ButtonBrowseDatasetFile_OnClick(object sender, RoutedEventArgs e)
        {
            var dlg = new Microsoft.Win32.OpenFileDialog
            {
                DefaultExt = ".csv",
                Filter     = "CSV Files (*.csv)|*.csv"
            };
            var result = dlg.ShowDialog();

            if (result == true)
            {
                var fileName = dlg.FileName;
                var input    = new Input();
                datasetVectorsList       = input.ReadfromCsv(fileName);
                textBoxDatasetInput.Text = fileName;
                logger.LogToProgram($"Inputed dataset vector with vector length: {datasetVectorsList.VectorsLength} and count: {datasetVectorsList.VectorsCount}");
                if (textBoxQueryInput.Text == String.Empty)
                {
                    logger.LogToProgram("Select query vector csv.");
                }
                else
                {
                    logger.LogToProgram("Begin calculation.");
                }
                textBlockDatasetVectorLength.Text = $"Length: {datasetVectorsList.VectorsLength}";
                textBlockDatasetVectorCount.Text  = $"Count: {datasetVectorsList.VectorsCount}";
            }
        }
Beispiel #2
0
        public void Calculate(VectorsListModel queryVectorsList, VectorsListModel datasetVectorsList)
        {
            logger = new Logger();
            logger.LogToProgram($"Started {EngineName} engine.");

            //Log to Program.txt
            //Thread for L1
            logger.LogToProgram($"Starting {ImplementationL1} of {EngineName} engine.");
            new Thread(() =>
                       CalculateL1(queryVectorsList, datasetVectorsList)
                       ).Start();

            //Log to Program.txt
            //Thread for L2
            logger.LogToProgram($"Starting {ImplementationL2} of {EngineName} engine.");
            new Thread(() =>
                       CalculateL2(queryVectorsList, datasetVectorsList)
                       ).Start();

            //Log to Program.txt
            //Thread for Hamming
            logger.LogToProgram($"Starting {ImplementationHamming} of {EngineName} engine.");
            new Thread(() =>
                       CalculateHamming(queryVectorsList, datasetVectorsList)
                       ).Start();
        }
        public void StartCalculation(VectorsListModel queryVectorsList, VectorsListModel datasetVectorsList)
        {
            //TODO start calculations with each engine

            var simpleCalcilationEngine = new SimpleCalculationEngine();

            simpleCalcilationEngine.Calculate(queryVectorsList, datasetVectorsList);
        }
        public VectorsListModel GenerateVectorsModel(int vectorLength = 512, int count = 1024)
        {
            var vectorsList = new VectorsListModel();

            vectorsList.Vectors       = GenerateVectorsList(vectorLength, count);
            vectorsList.VectorsCount  = count;
            vectorsList.VectorsLength = vectorLength;
            return(vectorsList);
        }
Beispiel #5
0
        private void CalculateL2(VectorsListModel queryVectorsList, VectorsListModel datasetVectorsList)
        {
            const string implementationName = ImplementationL2;

            logger.ImplementationLogDelete(EngineName, implementationName);
            logger.LogToImplementation($"Started {implementationName} of {EngineName}.", EngineName, implementationName);

            var sumDoubles = new double[queryVectorsList.VectorsCount, datasetVectorsList.VectorsCount];

            var timer = new Timer();

            timer.Start();

            foreach (var queryVector in queryVectorsList.Vectors)
            {
                foreach (var datasetVector in datasetVectorsList.Vectors)
                {
                    var queryVectorIndex   = queryVectorsList.Vectors.IndexOf(queryVector);
                    var datasetVectorIndex = datasetVectorsList.Vectors.IndexOf(datasetVector);

                    var pairTimer = new Timer();
                    pairTimer.Start();

                    var value = sumDoubles[queryVectorIndex, datasetVectorIndex] = CalculateL2(queryVector, datasetVector);

                    var elapsedPair = pairTimer.Stop();
                    logger.LogToImplementation($"Calculated [{implementationName}] distance of rows: " +
                                               $"( {queryVectorIndex}, {datasetVectorIndex} )" +
                                               $" in {elapsedPair}ms: {value}.", EngineName, implementationName);
                }
            }

            var elapsed = timer.Stop();

            logger.LogToImplementation($"Finished calculating {implementationName} of {EngineName} in {elapsed}ms.", EngineName, implementationName);

            var output = new Output();

            output.WriteMatrixToCsv(sumDoubles, $"{implementationName}{EngineName}");
        }
Beispiel #6
0
        private void ButtonStartCalculation_OnClick(object sender, RoutedEventArgs e)
        {
            if (queryVectorsList != null && datasetVectorsList != null)
            {
                StartCalculator();
            }
            else
            {
                var randomizer = new Randomizer();

                if (queryVectorsList == null)
                {
                    if (datasetVectorsList != null)
                    {
                        logger.LogToProgram("No query csv file was inputed, generating random with dataset csv's length and count.");
                        queryVectorsList = randomizer.GenerateVectorsModel(datasetVectorsList.VectorsLength, datasetVectorsList.VectorsCount);
                    }
                    else
                    {
                        logger.LogToProgram("No query csv file was inputed, generating random with default length and count");
                        queryVectorsList = randomizer.GenerateVectorsModel(20, 20);    //temporary small
                    }
                }
                if (datasetVectorsList == null)
                {
                    if (queryVectorsList != null)
                    {
                        logger.LogToProgram("No dataset csv file was inputed, generating random with query csv's length and count.");
                        datasetVectorsList = randomizer.GenerateVectorsModel(queryVectorsList.VectorsLength, queryVectorsList.VectorsCount);
                    }
                    else
                    {
                        logger.LogToProgram("No dataset csv file was inputed, generating random with default length and count");
                        datasetVectorsList = randomizer.GenerateVectorsModel(20, 20);    //temporary small
                    }
                }

                StartCalculator();
            }
        }
Beispiel #7
0
        public VectorsListModel ReadfromCsv(string filePath)
        {
            var vectorsList = new VectorsListModel()
            {
                Vectors = new List <VectorModel>()
            };

            using (TextReader fileReader = File.OpenText(filePath))
            {
                var csv = new CsvReader(fileReader);
                csv.Configuration.HasHeaderRecord = false;

                var records = csv.GetRecords <VectorModel>();   //try to write every row into variable of VactorModel type
                foreach (var record in records)
                {
                    vectorsList.Vectors.Add(record);
                }

                vectorsList.VectorsCount  = vectorsList.Vectors.Count;
                vectorsList.VectorsLength = vectorsList.Vectors.First().Coordinates.Count;
            }

            return(vectorsList);
        }