コード例 #1
0
        private MatrixVal[,] PerkalianMatrix(MatrixVal[,] value, int c, int r)
        {
            MatrixVal[,] MatrixPerkalian = new MatrixVal[c, r];

            for (var x = 0; x < c; x++)
            {
                for (var y = 0; y < r; y++)
                {
                    decimal result = 0;
                    for (var k = 0; k < r; k++)
                    {
                        result = result + Math.Round((value[x, k].Nilai * value[k, y].Nilai) + 0.0000m, 4, MidpointRounding.ToEven);
                    }
                    var cell = new MatrixVal();
                    cell.Kode1            = value[x, y].Kode1;
                    cell.Kode2            = value[x, y].Kode2;
                    cell.Nilai            = Math.Round(result + 0.0000m, 4, MidpointRounding.ToEven);
                    MatrixPerkalian[x, y] = cell;
                }
            }

            return(MatrixPerkalian);
        }
コード例 #2
0
        public Matrix Create(List <SpPerbandinganKriteria_Result> model)
        {
            var matrix = new Matrix();

            matrix.Kriterias = base.ctx.Set <Kriteria>().OrderBy(x => x.Kode).ToList();
            List <MatrixVal> arr = new List <MatrixVal>();
            int idxR, idxC, r, c = matrix.Kriterias.Count();

            r    = c;
            idxC = 0;

            MatrixVal[,] MatrixValue = new MatrixVal[c, r];

            foreach (var kriteria in matrix.Kriterias)
            {
                idxR = 0;
                foreach (var item in model.Where(x => x.Kode1.Equals(kriteria.Kode)))
                {
                    var matrixVal = new MatrixVal();
                    matrixVal.Kode1         = item.Kode1;
                    matrixVal.Kode2         = item.Kode2;
                    matrixVal.Nilai         = Math.Round(((decimal)item.Nilai1 / (decimal)item.nilai2) + 0.0000m, 4, MidpointRounding.ToEven);
                    MatrixValue[idxC, idxR] = matrixVal;
                    arr.Add(matrixVal);
                    idxR++;
                }
                idxC++;
            }
            matrix.PerbandinganKriteria = arr;
            matrix.MatrixPerbandingan   = MatrixValue;
            var matrixPerkalian = PerkalianMatrix(MatrixValue, c, r);

            matrix.MatrixPerkalian = matrixPerkalian;
            matrix.EigenVector     = CalEigenVector(matrixPerkalian, c, r);



            foreach (var item in model)
            {
                var perbandinganKriteria = base.ctx.Set <PerbandinganKriteria>().SingleOrDefault(
                    x => x.Kode == item.Kode1 && x.Kode2 == item.Kode2);
                if (perbandinganKriteria == null)
                {
                    perbandinganKriteria        = new PerbandinganKriteria();
                    perbandinganKriteria.Kode   = (int)item.Kode1;
                    perbandinganKriteria.Kode2  = (int)item.Kode2;
                    perbandinganKriteria.Nilai  = item.Nilai1;
                    perbandinganKriteria.Nilai2 = item.nilai2;
                    base.ctx.Set <PerbandinganKriteria>().Add(perbandinganKriteria);
                }

                perbandinganKriteria.Kode   = (int)item.Kode1;
                perbandinganKriteria.Kode2  = (int)item.Kode2;
                perbandinganKriteria.Nilai  = item.Nilai1;
                perbandinganKriteria.Nilai2 = item.nilai2;
            }

            foreach (var krit in matrix.Kriterias)
            {
                var e = matrix.EigenVector.SingleOrDefault(u => u.Kode == krit.Kode);
                if (e != null)
                {
                    krit.EigenvectorScore = (double)e.Nilai;
                }
            }


            var rest = base.ctx.SaveChanges() > 0;

            return(matrix);
        }