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的打分矩阵生成的随机种子数不合理
点击数: 32   打印  添加到收藏   发布时间: 2021-03-20




上一篇:LVDS需要注意的几个点
下一篇:二次曲面参数及flashlight效果





» 相关内容
  LVDS需要注意的几个点
  阴阳与男女之区别
  四象限光电探测器的位置公式
  外触发获取数据实现原理
  自定义USB设备供电不足最终解..
  USB设备连接异常现象
  MCU程序中变量过多引发内存不..
  NFC及其爆破思路
  铁电存储器
  MBR引导记录清除方法
  Sqlite关联版本选择
  Macpro更换NVME硬盘特征
  VBNET跨进程调试VCDLL方法
  单路逻辑电平3.3V和5V转化最简..
  泡脚的好处