层次分析AHP模型算法的实现
文章目录
前言
本片文章将用Java代码用面向过程和面向对象的变成方式分别实现AHP算法的求解
一、层次分析法(AHP)模型介绍
二、JAVA代码实现
1.Demo02——面向过程的编程思想实现
1.1 Main主程序代码:
public static void main(String[] args) {
int N_mat=5; // 判断矩阵的维度
Double[][] matrix=new Double[N_mat][N_mat];
Double[] RI={
0.0,0.0,0.0,0.58,0.9,
1.12,1.24,1.32,1.41,1.45,1.49};
// 对角线上的数字1
for(int i=0;i<N_mat;i++){
matrix[i][i]=1.0;
}
// 需要手动输入的数字
matrix[0][1]=3.0;
matrix[0][2]=7.0;
matrix[0][3]=3.0;
matrix[0][4]=5.0;
matrix[1][2]=5.0;
matrix[1][3]=3.0;
matrix[1][4]=5.0;
matrix[2][3]=0.2;
matrix[2][4]=1.0/3;
matrix[3][4]=3.0;
System.out.println(matrix.length);
printMatrix(matrix);
//根据输入值自动填写矩阵剩余项
for(int i=N_mat-1;i>=0;i--){
for(int j=N_mat-1;j>=0;j--){
matrix[i][j]=1/matrix[j][i];
}
}
printMatrix(matrix);
Double[][] matrixColumn;
matrixColumn=normalCol(matrix);// 矩阵的列归一化
printMatrix(matrixColumn);
Double[] w;
w=normalLine(matrixColumn); // 矩阵的行归一化
Double[] bw;
bw=mutiMat(matrix,w); //B*W 矩阵相乘
Double sumR=0.0; //最大特征跟R
for(int i=0;i<matrix.length;i++){
sumR=sumR+bw[i]/(matrix.length*w[i]);
}
Double ci=(sumR-matrix.length)/(matrix.length-1); //矩阵一致性指标
Double cr=ci/RI[matrix.length]; //随机一致性比率
System.out.println("======================================");
System.out.