多属性效用决策法TOPSIS法 C++代码
时间: 2024-05-12 13:14:24 浏览: 92
以下是使用C++实现的TOPSIS法代码示例:
```c++
#include <iostream>
#include <cmath>
using namespace std;
const int MAXN = 1000;
int n, m;
double r[MAXN][MAXN], w[MAXN], v[MAXN], s[MAXN];
void topsis() {
double sum = 0;
for (int i = 0; i < m; i++) {
double maxn = 0;
for (int j = 0; j < n; j++) {
maxn = max(maxn, r[j][i]);
}
for (int j = 0; j < n; j++) {
r[j][i] /= maxn;
}
}
for (int i = 0; i < m; i++) {
double minn = 1e9;
for (int j = 0; j < n; j++) {
minn = min(minn, r[j][i]);
}
w[i] = minn;
sum += w[i];
}
for (int i = 0; i < m; i++) {
w[i] /= sum;
}
for (int i = 0; i < n; i++) {
double sum1 = 0, sum2 = 0;
for (int j = 0; j < m; j++) {
sum1 += w[j] * r[i][j];
sum2 += pow(r[i][j] - w[j], 2);
}
v[i] = sum1;
s[i] = sqrt(sum2);
}
}
int main() {
cin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> r[i][j];
}
}
topsis();
for (int i = 0; i < n; i++) {
cout << i + 1 << " " << v[i] << " " << s[i] << endl;
}
return 0;
}
```
其中,输入数据为一个 $n \times m$ 的矩阵,表示有 $n$ 个待评价的对象和 $m$ 个属性,$r_{ij}$ 表示第 $i$ 个对象在第 $j$ 个属性上的得分。输出每个对象的综合得分 $v_i$ 和与理想解的距离 $s_i$。
该代码实现了 TOPSIS 算法的主要步骤,包括数据归一化、权重计算、综合得分计算以及距离计算。
阅读全文