当前位置:   article > 正文

C++实现 模糊综合评价法_模糊综合评价归一化

模糊综合评价归一化

现实中,如果我们想评价一个事物,只从单一指标出发评价,会显得很不公正也不科学。

  多数情况下,评价一个事物往往需要涉及多个层次、多个方面的指标,进行综合评价,从而得出更加科学合理的结论。评价者要从诸因素出发,参照有关信息,根据其判断对复杂问题分别作出“大、中、小”;“高、中、低”;“优、良、可、劣”;“好、较好、一般、较差、差”等程度性的模糊评价。

  请看下面这个例子:

再对结果归一化即可

以上图文参自 《信息安全管理与风险评估》毕方明

C++实现 :

输入

第一行输入评价对象的个数n

第二行输入用作评价的指标个数m

第三个输入评级个数b

之后输入n组数据,代表n个对象。

每组第一行输入m个指标权重的向量A

之后输入m行b列的评价矩阵R

输出

输出n行的综合评价结果的总和归一化的数据(保留两位小数),结果以空格相隔,对于结果须四舍五入。

样例输入

  1. 3
  2. 3
  3. 3
  4. 0.2 0.3 0.5
  5. 0.7 0.2 0.1
  6. 0.1 0.2 0.7
  7. 0.3 0.6 0.1
  8. 0.2 0.3 0.5
  9. 0.3 0.6 0.1
  10. 1 0 0
  11. 0.7 0.3 0
  12. 0.2 0.3 0.5
  13. 0.1 0.4 0.5
  14. 1 0 0
  15. 0.1 0.3 0.6

样例输出

  1. 0.27 0.45 0.27
  2. 0.56 0.33 0.11
  3. 0.27 0.27 0.45

 

  1. #include<iostream>
  2. #include<vector>
  3. #include<algorithm>
  4. #include <iomanip>
  5. using namespace std;
  6. int main()
  7. {
  8. int n;//对象个数
  9. int m;//指标个数
  10. int b;//评级个数
  11. cin >> n >> m >> b;
  12. float* p1 = new float[m]; //权重向量A
  13. vector<vector<float>> r(m, vector<float>(b)); //评价矩阵R
  14. float* p2 = new float[b]; //存放归一化结果
  15. while (n--)
  16. {
  17. for (int i = 0; i < m; i++)
  18. {
  19. cin >> p1[i];
  20. }
  21. for (int i = 0; i < m;i++)
  22. for (int j = 0; j < b; j++)
  23. {
  24. cin >> r[i][j];
  25. }
  26. for (int i = 0; i < b; i++)
  27. {
  28. float max=0;
  29. for (int j = 0; j < m; j++)
  30. {
  31. if (min(p1[j], r[j][i])>max)
  32. max = min(p1[j], r[j][i]);
  33. }
  34. p2[i] = max;
  35. }
  36. float sum = 0;
  37. for (int i = 0; i < b; i++)
  38. {
  39. sum += p2[i];
  40. }
  41. for (int i = 0; i < b; i++)
  42. {
  43. p2[i] /= sum;
  44. }
  45. for (int i = 0; i < b; i++)
  46. cout << fixed << showpoint << setprecision(2) <<p2[i]<<" ";
  47. cout << endl;
  48. }
  49. }

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/887479
推荐阅读
相关标签
  

闽ICP备14008679号