public async Task <Result <CoverSampleResult> > GetMatrix( FileData fileData, double low, double high, IGroupingMethod groupMethod, double paramInput, double step, ProgressBarModel progressBarModel, Task waitRun) { var both = GetLowsAndHighs(low, high, step).ToArray(); var lows = both.AsParallel().Select(x => x.Item1).ToArray(); var highs = both.AsParallel().Select(x => x.Item2).ToArray(); var matrices = (await ComputeForEvery2(fileData, groupMethod, paramInput, highs, lows, progressBarModel, waitRun)).OrderByDescending(y => y.Grade).ToList(); var max = matrices.First(); var testMatrixRows = _coverMatrixClassificator.Classify(fileData.TestObjects, max.AttributesCovers, max.HighZeroColumns, max.LowZeroColumns); max.TestMatrix = new Core.Common.Items.MatrixFeatures.Matrix(testMatrixRows); var dataMatrix = _matrixToGridMatrix.TransformToDataTable(max.DataMatrix); var testMatrix = _matrixToGridMatrix.TransformToDataTable(max.TestMatrix); var result = new CoverSampleResult(max, matrices, fileData.FileName) { SLOW = low, SHIGH = high, SelecteMethod = groupMethod.MethodName, SelecteMethodParam = paramInput, STEP = step }; max.DataMatrix.DataTable = dataMatrix; max.TestMatrix.DataTable = testMatrix; DataObject.SchemeObject = null; return(new Result <CoverSampleResult>(result)); }
private async Task <IEnumerable <CoverResult> > ComputeForEvery2(FileData fileData, IGroupingMethod groupMethod, double paramInput, double[] highs, double[] lows, ProgressBarModel progressBarModel, Task waitRun) { progressBarModel.Progress = 0; var all = ( from highl in highs from lowl in lows select(highl, lowl) ) .ToArray(); progressBarModel.Progress = 1; var step = 97.00 / all.Length; var list = new ConcurrentBag <Task <CoverResult> >(); //var listr = new ConcurrentBag<CoverResult>(); var listOfGroupsOfDataObjects = groupMethod.GroupElementsBy(fileData.DataObjects, fileData.Attributes, paramInput).ToArray(); CountPositiveDecisions(fileData, listOfGroupsOfDataObjects); //var stopwatch = new Stopwatch(); //stopwatch.Start(); all .AsParallel() .ForAll(pair => { if (waitRun.IsCompleted) { return; } var cover = Compute( fileData, pair.Item1, pair.Item2, listOfGroupsOfDataObjects, progressBarModel, step); list.Add(cover); }); var result = await Task.WhenAll(list); return(result); // stopwatch.Stop(); // Debug.WriteLine(stopwatch.ElapsedTicks); // progressBarModel.Progress = 1; // stopwatch.Restart(); // foreach (var pair in all.AsParallel()) // { // var cover = // Compute( // fileData, // pair.Item1, // pair.Item2, // listOfGroupsOfDataObjects, // progressBarModel, // step); // list.Add(cover); // }; // await Task.WhenAll(list); // stopwatch.Stop(); // Debug.WriteLine(stopwatch.ElapsedTicks); // progressBarModel.Progress = 1; // stopwatch.Restart(); // foreach (var pair in all.AsParallel()) // { // var cover = // Compute( // fileData, // pair.Item1, // pair.Item2, // listOfGroupsOfDataObjects, // progressBarModel, // step); // listr.Add(await cover); // } // stopwatch.Stop(); // Debug.WriteLine(stopwatch.ElapsedTicks); // progressBarModel.Progress = 1; // stopwatch.Restart(); // all.AsParallel().ForAll(async pair => // { // var cover = // Compute( // fileData, // pair.Item1, // pair.Item2, // listOfGroupsOfDataObjects, // progressBarModel, // step); // listr.Add(await cover); // }); // stopwatch.Stop(); // Debug.WriteLine(stopwatch.ElapsedTicks); // progressBarModel.Progress = 1; // stopwatch.Restart(); // await Task.WhenAll(GetCoverTasks(fileData, progressBarModel, all, listOfGroupsOfDataObjects, step)); // stopwatch.Stop(); // Debug.WriteLine(stopwatch.ElapsedTicks); // return listr; }