Example #1
0
        private void button1_Click(object sender, EventArgs e)
        {
            label9.Text = "";
               // Queue<criterio> colaCri = dato.colaCriterios(id_proyecto);
            List<comparacion_alternativa> listaAlt;

                listaAlt = dato.compAlternativaPorExpertoCriterio(id_proyecto, id_experto, id_criterio);

                int cantidadFilas = 1;

                foreach (comparacion_alternativa comp in listaAlt)
                {
                    if (comp.pos_fila == 0)
                        cantidadFilas++;
                }

                double[,] matrizAlt = new double[cantidadFilas, cantidadFilas];

                foreach (comparacion_alternativa comp in listaAlt)
                {
                    matrizAlt[comp.pos_fila, comp.pos_columna] = (double)comp.valor;
                }

                int tope = cantidadFilas;
                for (int i = 0; i < tope; i++)
                {
                    for (int j = 0; j < tope; j++)
                    {
                        if (i == j)
                            matrizAlt[i, j] = 1;
                        else if (i > j)
                            matrizAlt[i, j] = (double)1 / (matrizAlt[j, i]);
                    }
                }

            ConsistenciaMatriz consistencia = new ConsistenciaMatriz();

            if (consistencia.calcularConsistencia(matrizAlt))
            {
                dato.actualizarMatrizAlternativa(id_proyecto, id_experto, id_criterio, true);
                button1.Visible = true;
                //this.button3.Enabled = true;
                //this.button3.Visible = true;
                MessageBox.Show("Matriz consistente.");
            }
            else
            {
                string NombreAlternativaA;
                string NombreAlternativaB;
                mejorada = consistencia.buscarMejoresConsistencia(matrizAlt);
                double[] posicionRecomendada = MaxValueIJ(mejorada);

                Int32 fila = (Int32)posicionRecomendada[0];
                Int32 columna = (Int32)posicionRecomendada[1];

                List<alternativa> listaAlternativas = dato.alternativasPorProyecto(id_proyecto);

                NombreAlternativaA = listaAlternativas[fila].nombre;
                NombreAlternativaB = listaAlternativas[columna].nombre;

                Int32 M = (Int32)posicionRecomendada[2];

                double mejorValor = mejorada[M, 2];

                if (mejorada[0, 0] < mejorada[0, 1])
                {
                    label9.Text = NombreAlternativaA + " " +
                                      "deberia ser " +
                                      dato.obtenerDescripcion(mejorValor) + " " +
                                      NombreAlternativaB;
                }
                else
                {
                    label9.Text = NombreAlternativaB + " " +
                                     "deberia ser " +
                                     dato.obtenerDescripcion((double)1 / mejorValor) + " " +
                                     NombreAlternativaA;
                }
            }
        }
Example #2
0
        private void button1_Click(object sender, EventArgs e)
        {
            label9.Text = "";
            List<comparacion_criterio> listaComparacion = dato.comparacionCriterioPorExperto(id_proyecto, id_experto);
            int cantFilas = 1;

            foreach (comparacion_criterio comp in listaComparacion)
            {
                if (comp.pos_fila == 0)
                    cantFilas++;
            }

            double[,] matriz = new double[cantFilas,cantFilas];

            foreach(comparacion_criterio comp in listaComparacion)
            {
                matriz[comp.pos_fila, comp.pos_columna] = (double)comp.valor;
            }

            int limite = cantFilas;
            for (int i = 0; i < limite; i++)
            {
                for (int j = 0; j < limite; j++)
                {
                    if (i == j)
                        matriz[i, j] = 1;
                    else if (i > j)
                        matriz[i, j] = (double)1 / (matriz[j, i]);
                }

            }

            ConsistenciaMatriz consistencia = new ConsistenciaMatriz();

            if (consistencia.calcularConsistencia(matriz))
            {
                dato.actualizarMatrizCriterio(id_proyecto, id_experto, true);
                MessageBox.Show("Matriz consistente.");
            }
            else
            {

                string NombreCriterioA;
                string NombreCriterioB;
                mejorada = consistencia.buscarMejoresConsistencia(matriz);
                double[] posicionRecomendada = MaxValueIJ(mejorada);

                Int32 fila = (Int32)posicionRecomendada[0];
                Int32 columna = (Int32)posicionRecomendada[1];

                List<criterio> listaCriterios = dato.criteriosPorProyecto(id_proyecto);

                NombreCriterioA = listaCriterios[fila].nombre;
                NombreCriterioB = listaCriterios[columna].nombre;

                Int32 M = (Int32)posicionRecomendada[2];

                double mejorValor = mejorada[M, 2];

                if (mejorada[0, 0] < mejorada[0, 1])
                {
                    label9.Text = NombreCriterioA + " " +
                                      "deberia ser " +
                                      dato.obtenerDescripcion(mejorValor) + " " +
                                      NombreCriterioB;
                }
                else
                {
                    label9.Text = NombreCriterioB + " " +
                                     "deberia ser " +
                                     dato.obtenerDescripcion((double)1 / mejorValor) + " " +
                                     NombreCriterioA;
                }

            }
        }