//层次分析法(两层)——确定指标权重
public double[] AHP(double[] expertscoreTab0)//expertscoreTab0是专家打分表
{
double[] expertscoreTab = expertscoreTab0;
//计算判断矩阵judgeArray
double[,] judgeArray = new double[expertscoreTab.Length, expertscoreTab.Length];
for (int i = 0; i < expertscoreTab.Length; i++)
{
for (int j = 0; j <expertscoreTab.Length; j++)
{
if (expertscoreTab[i]!=0)
{
judgeArray[i, j] = expertscoreTab[j] / expertscoreTab[i];
}
}
}
//层次单排序
//(1)将比较矩阵每一列正规化
double[] judgearraycolSum = new double[judgeArray.GetLength(1)];//比较矩阵judgeArray每一列的和
for (int j = 0; j < judgeArray.GetLength(1); j++)//给judgearraycolSum每一个元素设初始值为0
{
judgearraycolSum[j]=0;
}
double[,] judgearrayNormal = new double[judgeArray.GetLength(0), judgeArray.GetLength(1)];//比较矩阵judgeArray正规化后的新矩阵
for (int j = 0; j < judgeArray.GetLength(1); j++)
{
for (int i = 0; i < judgeArray.GetLength(0); i++)
{
judgearraycolSum[j] += judgeArray[i, j];
}
}
for (int i = 0; i < judgeArray.GetLength(0); i++)
{
for (int j = 0; j < judgeArray.GetLength(1); j++)
{
judgearrayNormal[i, j] = judgeArray[i, j] / judgearraycolSum[j];
}
}
//(2)正规化后的比较矩阵judgearrayNormal按行相加,结果存为judgearrayrowSum
double[] judgearrayrowSum = new double[judgeArray.GetLength(0)];//按行相加的矩阵
for (int i = 0; i < judgeArray.GetLength(0); i++)//给judgearrayNormal每一个元素设初始值为0
{
judgearrayrowSum[i]=0;
}
for (int i = 0; i < judgeArray.GetLength(0); i++)
{
for (int j = 0; j < judgeArray.GetLength(1); j++)
{
judgearrayrowSum[i] += judgearrayNormal[i, j];
}
}
//(3)对judgearrayrowSum正规化,结果存为judgearrayrowsumNormal(即各个元素的权重值)
double[] judgearrayrowsumNormal = new double[judgearrayrowSum.Length];//judgearrayrowSum正规化的结果
double judgearrayrowsumSum=0;//judgearrayrowSum各项的和
for (int i = 0; i < judgearrayrowSum.Length; i++)
{
judgearrayrowsumSum += judgearrayrowSum[i];
}
if (judgearrayrowsumSum!=0)
{
for (int i = 0; i < judgearrayrowSum.Length; i++)
{
judgearrayrowsumNormal[i] = judgearrayrowSum[i] / judgearrayrowsumSum;//judgearrayrowsumNormal为各个元素的权重值
}
}
}
想了解更多,请关注微信公众号“GAO戏精光芒万丈”: