赞
踩
现实中,如果我们想评价一个事物,只从单一指标出发评价,会显得很不公正也不科学。
多数情况下,评价一个事物往往需要涉及多个层次、多个方面的指标,进行综合评价,从而得出更加科学合理的结论。评价者要从诸因素出发,参照有关信息,根据其判断对复杂问题分别作出“大、中、小”;“高、中、低”;“优、良、可、劣”;“好、较好、一般、较差、差”等程度性的模糊评价。
请看下面这个例子:
再对结果归一化即可
以上图文参自 《信息安全管理与风险评估》毕方明
C++实现 :
第一行输入评价对象的个数n
第二行输入用作评价的指标个数m
第三个输入评级个数b
之后输入n组数据,代表n个对象。
每组第一行输入m个指标权重的向量A
之后输入m行b列的评价矩阵R
输出n行的综合评价结果的总和归一化的数据(保留两位小数),结果以空格相隔,对于结果须四舍五入。
- 3
- 3
- 3
- 0.2 0.3 0.5
- 0.7 0.2 0.1
- 0.1 0.2 0.7
- 0.3 0.6 0.1
- 0.2 0.3 0.5
- 0.3 0.6 0.1
- 1 0 0
- 0.7 0.3 0
- 0.2 0.3 0.5
- 0.1 0.4 0.5
- 1 0 0
- 0.1 0.3 0.6
- 0.27 0.45 0.27
- 0.56 0.33 0.11
- 0.27 0.27 0.45
- #include<iostream>
- #include<vector>
- #include<algorithm>
- #include <iomanip>
-
- using namespace std;
- int main()
- {
- int n;//对象个数
- int m;//指标个数
- int b;//评级个数
- cin >> n >> m >> b;
- float* p1 = new float[m]; //权重向量A
- vector<vector<float>> r(m, vector<float>(b)); //评价矩阵R
- float* p2 = new float[b]; //存放归一化结果
-
-
-
- while (n--)
- {
- for (int i = 0; i < m; i++)
- {
- cin >> p1[i];
- }
-
- for (int i = 0; i < m;i++)
- for (int j = 0; j < b; j++)
- {
- cin >> r[i][j];
- }
-
- for (int i = 0; i < b; i++)
- {
- float max=0;
- for (int j = 0; j < m; j++)
- {
- if (min(p1[j], r[j][i])>max)
- max = min(p1[j], r[j][i]);
- }
- p2[i] = max;
- }
-
- float sum = 0;
- for (int i = 0; i < b; i++)
- {
- sum += p2[i];
- }
-
- for (int i = 0; i < b; i++)
- {
- p2[i] /= sum;
- }
-
- for (int i = 0; i < b; i++)
- cout << fixed << showpoint << setprecision(2) <<p2[i]<<" ";
- cout << endl;
- }
-
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。