/// <summary> /// Средняя нагрузка при заданных параметрах разбиения матрицы /// </summary> /// <param name="matrix">Матрица</param> /// <param name="partitioning">Параметры разбиения матрицы</param> /// <returns>Сумма элементов</returns> public static double W(IMatrix<int> matrix, PartitioningParameters partitioning) { int N = 1; for (int i = 0; i < partitioning.Dimensions; i++) N *= partitioning[i]; return Sum(matrix) / (double)N; }
/// <summary> /// Средняя нагрузка при заданных параметрах разбиения матрицы /// </summary> /// <param name="matrix">Матрица</param> /// <param name="partitioning">Параметры разбиения матрицы</param> /// <returns>Сумма элементов</returns> public static double W(IMatrix <int> matrix, PartitioningParameters partitioning) { int N = 1; for (int i = 0; i < partitioning.Dimensions; i++) { N *= partitioning[i]; } return(Sum(matrix) / (double)N); }
public Test_result(IMatrixReadStorage<int, EmptyData> storage, IMatrixReadStorage<int, SolutionData> datastorage, IAlgorithm<int> algorithm, PartitioningParameters parameters) { results = new AllResults(); InitializeComponent(); foreach (var matrixData in storage.ReadMatrixes()) { string name = matrixData.Name; IMatrix<int> matrix = matrixData.Matrix; int n = matrixData.Matrix.Size(0); int m = matrixData.Matrix.Size(1); int M1 = parameters[0]; int M2 = parameters[1]; Int64 start = Stopwatch.GetTimestamp(); ISolution solution = algorithm.Run(matrix); double time = (Stopwatch.GetTimestamp() - start) / (double)Stopwatch.Frequency; double crit = MinMaxCriterium.Calculate(matrix, solution); double w = Utilities.W(matrix, parameters); double diff = crit - w; results.AddElem(new Note(name, n, m, M1, M2, crit, diff, 0, time, false)); } foreach (var matrixData in datastorage.ReadMatrixes()) { string name = matrixData.Name; IMatrix<int> matrix = matrixData.Matrix; int n = matrixData.Matrix.Size(0); int m = matrixData.Matrix.Size(1); PartitioningParameters dataParameters = matrixData.Data.Item1; int M1 = dataParameters[0]; int M2 = dataParameters[1]; double goodCrit = matrixData.Data.Item3; Int64 start = Stopwatch.GetTimestamp(); ISolution solution = algorithm.Run(matrix); double time = (Stopwatch.GetTimestamp() - start) / (double)Stopwatch.Frequency; double crit = CoreUtilities.Utilities.Max(new SplittedMatrix(matrix, solution)); double w = Utilities.W(matrix, dataParameters); double diff = crit - w; double goodDiff = crit - goodCrit; results.AddElem(new Note(name, n, m, M1, M2, crit, diff, goodDiff, time, true)); } results.GetGroups(GroupedResults); }