C#层次分析法(AHP)

//层次分析法(两层)——确定指标权重
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戏精光芒万丈”:

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值