AHP(使用于某项目设备重要度评估测试)

用层次法和蒙特卡洛模型计算权重系数,然后建立判断矩阵进行随机一致性检验,最后求出重要度指数。

 1  string calculateStr = "1,2,3,2,1,|1,2,3,2,1,|1,2,3,2,1,|1,2,3,2,1,";
 2             var vals = calculateStr.Split('|');
 3             var Strlen = vals.Length - 1;
 4             double[,] t = new double[Strlen, Strlen];
 5             double RI = 0;
 6             for (int i = 0; i < Strlen; i++)
 7             {
 8                 for (int j = 0; j < Strlen; j++)
 9                 {
10                     t[i, j] = double.Parse(vals[i].Split(',')[j]);
11                 }
12             }
13 
14             double result = 0;
15             int len = t.GetUpperBound(0) + 1;
16             double[,] t1 = new double[len, len];
17             double[] dNums = new double[len];
18             for (int i = 0; i < len; i++)
19             {
20                 double colResut = 0;
21                 for (int j = 0; j < len; j++)
22                 {
23                     colResut += t[j, i];
24                 }
25                 for (int k = 0; k < len; k++)
26                 {
27                     t1[k, i] = Sum(t[k, i], colResut);
28                 }
29             }
30 
31             for (int i = 0; i < len; i++)
32             {
33                 double vector = 0;
34                 double colResult = 0;
35 
36                 for (int j = 0; j < len; j++)
37                 {
38                     colResult += t[j, i];
39                 }
40 
41                 for (int r = 0; r < len; r++)
42                 {
43                     vector += t1[i, r];
44                 }
45                 dNums[i] = vector / len;
46                 result += colResult * vector / len;
47             }
48 
49 
50             if (len > 2)
51             {
52                 switch (len)
53                 {
54                     case 3:
55                         RI = 0.58;
56                         break;
57                     case 4:
58                         RI = 0.9;
59                         break;
60                     case 5:
61                         RI = 1.12;
62                         break;
63                     case 6:
64                         RI = 1.24;
65                         break;
66                     case 7:
67                         RI = 1.32;
68                         break;
69                     case 8:
70                         RI = 1.41;
71                         break;
72                     case 9:
73                         RI = 1.46;
74                         break;
75                 }
76             }
77 
78             var CI = (result - len) / (len - 1);
79             var CR = CI / RI;
80             Console.WriteLine(CR);
控制台代码
好好学习,天天向上。
原文地址:https://www.cnblogs.com/Zhengxue/p/8777839.html