AHP算法之matlab代码
AHP算法介绍,不再赘述,请各位自行百度,这里贴出一段编写的AHP代码,可以在matlab环境下运行的,这样修改数据和调试都很方便,出图也很容易,要写论文的同鞋快来收藏。具体哪些数据可以更改,请参考注释部分,结合自己的具体数据。
function AHPTest() clc ; % 清屏 % %%%%%%%%%%%%%%%%%%%%%%%%%%% % B1=[2.2579 0.4035 0.3609]; % B2=[1.9456 0.7901 0.1397]; % B3=[1.3790 1.2526 0.3794]; % B4=[0.5111 1.1698 1.3397]; % % A1=[55 61 66 69 74 85; 51 58 68 75 74 81; 51 62 72 75 79 82]; % A2=[47 62 72 72 79 84; 51 59 69 72 80 81; 48 63 65 73 77 76]; % A3=[47 63 71 74 74 79; 51 59 69 69 72 83; 49 58 68 70 80 76]; % A4=[50 62 67 69 80 78; 53 63 67 76 77 82; 48 58 69 75 75 78]; % % %%%%%%%%%%%% % % NN = B1*A1 /3 ; % NN = NN + B2*A2 /3; % NN = NN + B3*A3 /3; % NN = NN + B4*A4 /3; % NN = NN /4 %%%%%%%%%%%=========== 生成矩阵随机 打分 left_range= 40; % 产生随机数的左边界值 right_range= 100; % 产生随机数的右边界值 col_dim = 6 ; % 产生6列数据 %%% 产生随机打分 B11 ~ B43 ; fix 是取整 B11 = fix(left_range + (right_range-left_range).*rand(1, col_dim)); B12 = fix(left_range + (right_range-left_range).*rand(1, col_dim)); B13 = fix(left_range + (right_range-left_range).*rand(1, col_dim)); B21 = fix(left_range + (right_range-left_range).*rand(1, col_dim)); B22 = fix(left_range + (right_range-left_range).*rand(1, col_dim)); B23 = fix(left_range + (right_range-left_range).*rand(1, col_dim)); B31 = fix(left_range + (right_range-left_range).*rand(1, col_dim)); B32 = fix(left_range + (right_range-left_range).*rand(1, col_dim)); B33 = fix(left_range + (right_range-left_range).*rand(1, col_dim)); B41 = fix(left_range + (right_range-left_range).*rand(1, col_dim)); B42 = fix(left_range + (right_range-left_range).*rand(1, col_dim)); B43 = fix(left_range + (right_range-left_range).*rand(1, col_dim)); BBB = [B11;B12;B13;B21;B22;B23;B31;B32;B33;B41;B42;B43] % 混合矩阵, 供查看输出用 %%%%%%%%%%%%%%%%%%% 临时调整插入矩阵 B11= [50 55 65 75 80 85]; B12= [55 65 70 75 70 80]; B13=[50 62 71 78 76 83 ]; B21=[48 60 68 75 80 82 ]; B22=[50 58 65 70 82 84]; B23 =[45 50 58 65 77 79]; B31=[51 60 67 72 79 76]; B32=[48 55 63 69 71 75]; B33=[50 62 66 73 81 80]; B41=[40 56 62 69 73 78]; B42=[54 62 68 71 76 80]; B43=[60 65 72 80 83 85]; % 打分矩阵 A->B, (打分只能在 1-9之间选择) %%%%%%%%%%%%%%=============可以改动的部分======>>>>>> AB = [1 1/3 1/4 1/7; 3 1 1/2 1/4 4 2 1 1 7 4 1 1 ]; %%%%%%%%%%%%%==============可以改动的部分======>>>>>> B1BX= [1 1/2 1/4; 2 1 1/2; 4 2 1 ]; %%%%%%%%%%%%%=============可以改动的部分======>>>>>> B2BX= [ 1 1/3 1/4; 3 1 1; 4 1 1 ]; %%%%%%%%%%%%%=============可以改动的部分======>>>>>> B3BX= [1 1/3 1/4; 3 1 2; 4 1/2 1 ]; %%%%%%%%%%%%%=============可以改动的部分======>>>>>> B4BX= [1 1 3; 1 1 6; 1/3 1/6 1 ]; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 权重计算 W_AB = prod(AB,2).^(1/size(AB,2)); W_B1BX = prod(B1BX,2).^(1/size(B1BX,2)); W_B2BX = prod(B2BX,2).^(1/size(B2BX,2)) ; W_B3BX = prod(B3BX,2).^(1/size(B3BX,2)) ; W_B4BX = prod(B4BX,2).^(1/size(B4BX,2)) ; W_AB = W_AB / sum(W_AB) ; % 求出 A_B阵的 归一化权重 W_B1BX= W_B1BX / sum(W_B1BX) ; % 求出 B1_BX 阵的 归一化权重 W_B2BX= W_B2BX / sum(W_B2BX) ; % 求出 B1_BX 阵的 归一化权重 W_B3BX= W_B3BX / sum(W_B3BX) ; % 求出 B1_BX 阵的 归一化权重 W_B4BX= W_B4BX / sum(W_B4BX) ; % 求出 B1_BX 阵的 归一化权重 W_B1_4BX = [W_AB;W_B1BX;W_B2BX;W_B3BX;W_B4BX] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% BBW_AB = AB * W_AB ; % 求出 A_B阵的 加权 权重 表6-9的 WBij, BBW_B1BX= B1BX * W_B1BX ; % 求出 B1_BX 阵的 加权 权重 BBW_B2BX= B2BX * W_B2BX ; % 求出 B1_BX 阵的 加权 权重 BBW_B3BX= B3BX * W_B3BX ; % 求出 B1_BX 阵的 加权 权重 BBW_B4BX= B4BX * W_B4BX ; % 求出 B1_BX 阵的 加权 权重 %%%%%%%%%%%%%%%% BBW_MIX = [BBW_AB; BBW_B1BX;BBW_B2BX;BBW_B3BX;BBW_B4BX] %%%%% 对应 表 6-10中的数据! %%%%%%%%%%%%%%%%%% lambda_AB = max(eig(AB)) % 最大特征值 lambda_B1BX = max(eig(B1BX)) % 最大特征值 lambda_B2BX = max(eig(B2BX)) % 最大特征值 lambda_B3BX = max(eig(B3BX)) % 最大特征值 lambda_B4BX = max(eig(B4BX)) % 最大特征值 CI_AB = (lambda_AB - size(AB,1))/(size(AB,1)-1) % CI值 CI_B1BX = (lambda_B1BX - size(B1BX,1))/(size(B1BX,1)-1) % CI值 CI_B2BX = (lambda_B2BX - size(B2BX,1))/(size(B2BX,1)-1) % CI值 CI_B3BX = (lambda_B3BX - size(B3BX,1))/(size(B3BX,1)-1) % CI值 CI_B4BX = (lambda_B4BX - size(B4BX,1))/(size(B4BX,1)-1) % CI值 RI =[0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51]; % 来自表6-4的值 CR_AB = CI_AB / RI(size(AB,1)) % CR 值 CR_B1BX = CI_B1BX / RI(size(B1BX,1)) CR_B2BX = CI_B2BX / RI(size(B2BX,1)) CR_B3BX = CI_B3BX / RI(size(B3BX,1)) CR_B4BX = CI_B4BX / RI(size(B4BX,1)) %%% 以下模糊计算部分!对应公式 6-11 到 公式6-15 B1 = BBW_B1BX' * [B11;B12;B13] B2 = BBW_B2BX' * [B21;B22;B23] B3 = BBW_B3BX' * [B31;B32;B33] B4 = BBW_B4BX' * [B41;B42;B43] %%%%%%%%%%%%%%% S = B1 /3 ; S = S + B2/3; S = S + B3/3; S = S + B4/3; S = fix(S/4) % 最终的S值(四舍五入取整),用于结果评判, % 如果发现 S的区分度不太好,可以重新运行一下, % 原因是B11-B43的打分矩阵生成的随机种子数不合理