Параметры задачи балансировки - число разбиений по каждому направлению
Числом разбиений по направлению называется размер разбитой матрицы в заданном направлении (IMatrix{T}.Size)
Ejemplo n.º 1
0
        /// <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;
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
        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);
        }