📄 layer.cpp
字号:
// Layer.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<stdio.h>
void main(int argc, char* argv[])
{
float A[5][5]=
{ 1 , 1.0/2 , 4 , 3 , 3,
2 , 1 , 7 , 5 , 5,
1.0/4, 1.0/7, 1, 1.0/2,1.0/3,
1.0/3, 1.0/5, 2, 1, 1,
1.0/3, 1.0/5, 3, 1, 1
};
float B[5][3][3]=
{
{ 1 , 2 , 5,
1.0/2 , 1 , 2,
1.0/5 , 1.0/2, 1
},{
1 ,1.0/3 ,1.0/8,
3 ,1 ,1.0/3,
8 ,3 ,1
}, {
1 ,1 ,3,
1 ,1 ,3,
1.0/3 ,1.0/3 ,1
},{
1,3,4,1.0/3,1,1,1.0/4,1,1
},{
1,1,1.0/4,1,1,1.0/4,4,4,1
}
};
int i,j,k,m=5,n=5,m1=3,n1=3;
float sum=0;
float w[5],W2[3][5],W[3];
float A_change[5][5];
float B_change[5][3][3];
//对判断矩阵做列向量归一化处理
for(j=0;j<n;j++)
{
sum=0;
for(i=0;i<m;i++)
{
sum=sum+ A[i][j];
}
for(i=0;i<m;i++)
{
A_change[i][j]=A[i][j]/sum;
}
}
//求判断矩阵的特征向量w
sum=0;
for(i=0;i<m;i++)
{
w[i]=0;
for(j=0;j<n;j++)
{
w[i]=w[i]+A_change[i][j];
}
sum=sum+w[i];
}
for(i=0;i<m;i++)
w[i]=w[i]/sum;
//求下层的特征向量构成的矩阵W2
//同上,先归一化,再求特征向量
for(k=0;k<n;k++)
{
for(j=0;j<n1;j++)
{
sum=0;
for(i=0;i<m1;i++)
{
sum=sum+B[k][i][j];
}
for(i=0;i<m1;i++)
{
B_change[k][i][j]=B[k][i][j]/sum;
}
}
}
for(k=0;k<n;k++)
{
sum=0;
for(i=0;i<m1;i++)
{
W2[i][k]=0;
for(j=0;j<n1;j++)
{
W2[i][k]=W2[i][k]+B_change[k][i][j];
}
sum=sum+W2[i][k];
}
for(i=0;i<m1;i++)
W2[i][k]=W2[i][k]/sum;
}
//评估各方案的优劣,用向量W表示
sum=0;
for(i=0;i<m1;i++)
{
W[i]=0;
for(j=0;j<n;j++)
{
W[i]=W[i]+W2[i][j]*w[j];
}
sum=sum+W[i];
}
for(i=0;i<m1;i++)
{
W[i]=W[i]/sum;
printf(" Evaluation of plan %d : %f \n",i+1,W[i]);
}
printf("\n");
getchar();
//对各矩阵的一致性进行评价
//先求判断矩阵的特征值
float lamdaA=0,lamdaB[5];
float Aw[5],Bw[3];
for(i=0;i<m;i++)
{
Aw[i]=0;
for(j=0;j<n;j++)
{
Aw[i]=Aw[i]+A[i][j]*w[j];
}
lamdaA=lamdaA+Aw[i]/w[i]/m;
}
printf("lamdaA=%1.3f \n",lamdaA);
for(k=0;k<m;k++)
{
sum=0;
lamdaB[k]=0;
for(i=0;i<m1;i++)
{
Bw[i]=0;
for(j=0;j<n1;j++)
{
Bw[i]=Bw[i]+B[k][i][j]*W2[j][k];
}
lamdaB[k]=lamdaB[k]+Bw[i]/W2[i][k]/m1;
}
printf("lamdaB[%d]=%1.3f \n",k,lamdaB[k]);
}
printf("\n");
//再求一致性指标CI和一致性比率CR; RI为随机一致性指标
float RI[12]={0,0,0.58,0.90,1.12,1.24,1.32,1.41,1.45,1.49,1.51};
float CIA,CRA,CIB[5],CRB[5],CR1,CR2=0,CR;
CIA=(lamdaA-m)/(m-1);
CRA=CIA/RI[m-1];
CR1=CRA;
for(k=0;k<5;k++)
{
CIB[k]=(lamdaB[k]-m1)/(m1-1);
CRB[k]=CIB[k]/RI[m1-1];
CR2=CRB[k]*w[k]+CR2;
}
CR=CR1+CR2;
printf("the value of CR is :%1.3f \n",CR);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -