public List <Caso> calculaSimilaridadeLocal(Caso casoBase) { DaoCaso dao_caso = new DaoCaso(); List <Caso> allCasos = dao_caso.getAll(); //Hashtable sl = new Hashtable(); PropertyInfo[] valCaso = casoBase.GetType().GetProperties(); DaoAtributo at = new DaoAtributo(); Atributo atb2 = new Atributo(); Hashtable pesos = getPesos(); List <Atributo> atbs = at.getAll(); List <Caso> casoSimilar = new List <Caso>(); double similaridadeLocal = 0; double similaridadeGlobal = 0; double div = 0; for (int j = 0; j < allCasos.Count; j++) { Hashtable similaridades = new Hashtable(); PropertyInfo[] valTab = allCasos[j].GetType().GetProperties(); similaridadeLocal = 0; div = 0; for (int i = 3; i <= 37; i++) { //atb.atributo = valTab[i].Name; //Atributo atb2 = at.searchOther(atb); atb2 = atbs.Find(a => a.atributo.Equals(valTab[i].Name.Replace('_', '-'))); if (valCaso[i].GetValue(casoBase).Equals("Desconhecido") || valTab[i].GetValue(allCasos[j]).Equals("Desconhecido")) { similaridadeLocal += 0; //similaridades.Add(valCaso[i].Name, similaridadeLocal); } else if (valCaso[i].GetValue(casoBase).Equals("Desconhecido") && valTab[i].GetValue(allCasos[j]).Equals("Desconhecido")) { similaridadeLocal += (1 * Convert.ToDouble(pesos[valTab[i].Name.Replace('_', '-')].ToString())); div += Convert.ToDouble(pesos[valTab[i].Name.Replace('_', '-')].ToString()); //similaridades.Add(valCaso[i].Name, similaridadeLocal); } else if (atb2.similaridade.Equals("Não")) { if (valCaso[i].Name.Equals(valTab[i].Name)) { similaridadeLocal += (1 * Convert.ToDouble(pesos[valTab[i].Name.Replace('_', '-')].ToString())); div += Convert.ToDouble(pesos[valTab[i].Name.Replace('_', '-')].ToString()); } similaridadeLocal += 0; //similaridades.Add(valCaso[i].Name, similaridadeLocal); } else { var atbVal = valCaso[i].GetValue(casoBase); var atbTabela = valTab[i].GetValue(allCasos[j]); double valorCaso = valAtributo(valCaso[i].Name, (String)atbVal); double valorTab = valAtributo(valTab[i].Name, (String)atbTabela); double[] maxMin = maxMinCol(valCaso[i].Name); /*maxMin[0] = 1; * maxMin[1] = 3;*/ if (maxMin[0] != maxMin[1]) { similaridadeLocal += (1 - ((Math.Abs(valorCaso - valorTab))) / (maxMin[1] - maxMin[0]) * Convert.ToDouble(pesos[valTab[i].Name.Replace('_', '-')].ToString())); div += Convert.ToDouble(pesos[valTab[i].Name.Replace('_', '-')].ToString()); } else { similaridadeLocal += (1 - (Math.Abs(valorCaso - valorTab)) * Convert.ToDouble(pesos[valTab[i].Name.Replace('_', '-')].ToString())); div += Convert.ToDouble(pesos[valTab[i].Name.Replace('_', '-')].ToString()); } //similaridades.Add(valCaso[i].Name, similaridadeLocal); } } //sl.Add(allCasos[j].caso, similaridades); similaridadeGlobal = similaridadeLocal / div; Caso c = allCasos[j]; c.SimilaridadeGlobal = similaridadeGlobal; casoSimilar.Add(c); } return(casoSimilar); }