public AgrAlternativas(int id_proy, int id_exp) { //List<experto> listaExp = dato.expertosPorProyecto(id_proy); List<criterio> listaCri = dato.criteriosPorProyecto(id_proy); List<alternativa> listaAlternativa = dato.alternativasPorProyecto(id_proy); //foreach (experto exp in listaExp) //{ foreach (criterio crit in listaCri) { List<comparacion_alternativa> listaAlt; //List<String> listaExpertos = null; listaAlt = dato.compAlternativaPorExpertoCriterio(id_proy, id_exp, crit.id_criterio); //foreach (comparacion_alternativa comp in listaAlt) //{ // if (comp.valor == 0 && !(listaExpertos.Contains(comp.id_experto.ToString()))) // listaExpertos.Add(comp.id_experto.ToString()); //} 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]); } } NAlternativas miMatriz = new NAlternativas(cantidadFilas); miMatriz.nAlternativas = matrizAlt; listaKNAlternativas.Add(miMatriz); } //listaFinal.Add(listaKNAlternativas); //} }
public List<NAlternativas> AgregarAlternativas(List<AgrAlternativas> listaKNAlternativas) { //buscamos la cantidad de alternativas. //es la longitud de la dimension de la matriz List<NAlternativas> listaAlternativasAgregada = new List<NAlternativas>(); int cantAlter = listaKNAlternativas[1].listaKNAlternativas[1].nAlternativas.GetLength(1); foreach (var listaKnAlternativa in listaKNAlternativas[1].listaKNAlternativas) { NAlternativas alternativa = new NAlternativas(cantAlter); utils.Unar(alternativa.nAlternativas, cantAlter); listaAlternativasAgregada.Add(alternativa); } foreach (var vble in listaKNAlternativas) { int k = 0; foreach (var listaKnAlternativa in vble.listaKNAlternativas) { for (int i = 0; i < cantAlter ; i++) { for (int j = 0; j < cantAlter ; j++) { listaAlternativasAgregada[k].nAlternativas[i, j] *= listaKnAlternativa.nAlternativas[i, j]; } } k += 1; } } return listaAlternativasAgregada; }
private void button5_Click(object sender, EventArgs e) { List<AgrAlternativas> listaDeExpertos = new List<AgrAlternativas>(); AgrAlternativas agrAlternativas1 = new AgrAlternativas(); NAlternativas nAlternativas1 = new NAlternativas(3); double[,] exp1MatrizCriterio1Alternativas = { { 2, 2, 2 }, { 2, 2, 2 }, { 2, 2, 2 } }; nAlternativas1.nAlternativas = exp1MatrizCriterio1Alternativas; NAlternativas nAlternativas2 = new NAlternativas(3); double[,] exp1MatrizCriterio2Alternativas = { { 4, 4, 4 }, { 4, 4, 4 }, { 4, 4, 4 } }; nAlternativas2.nAlternativas = exp1MatrizCriterio2Alternativas; agrAlternativas1.listaKNAlternativas.Add(nAlternativas1); agrAlternativas1.listaKNAlternativas.Add(nAlternativas2); listaDeExpertos.Add(agrAlternativas1); AgrAlternativas agrAlternativas2 = new AgrAlternativas(); NAlternativas nAlternativas3 = new NAlternativas(3); double[,] exp2MatrizCriterio1Alternativas = { { 3, 3, 3 }, { 3, 3, 3 }, { 3, 3, 3 } }; nAlternativas3.nAlternativas = exp2MatrizCriterio1Alternativas; NAlternativas nAlternativas4 = new NAlternativas(3); double[,] exp2MatrizCriterio2Alternativas = { { 5, 5, 5 }, { 5, 5, 5 }, { 5, 5, 5 } }; nAlternativas4.nAlternativas = exp2MatrizCriterio2Alternativas; agrAlternativas2.listaKNAlternativas.Add(nAlternativas3); agrAlternativas2.listaKNAlternativas.Add(nAlternativas4); listaDeExpertos.Add(agrAlternativas2); AgregacionNoPonderada agregacionNoPonderada = new AgregacionNoPonderada(); var resultado = agregacionNoPonderada.AgregarAlternativas(listaDeExpertos); foreach (var vble in resultado) { foreach (var d in vble.nAlternativas) { System.Diagnostics.Debug.WriteLine(d); } } }