当前位置: 首页>编程语言>正文

Python中多属性群决策论库 多属性决策matlab代码


多属性决策模型-matlab实现

  • 属性集合
  • 决策矩阵
  • 评价指标类型的一致化处理
  • 决策矩阵标准化
  • 属性权重
  • 信息熵法
  • 动态加权函数的设定
  • 1.分段变幂函数
  • 2.偏大型正态分布函数
  • 3.S型分布函数
  • 综合方法
  • 简单加权和法(首选)
  • 加权积法
  • 接近理想解的偏好排序法
  • 方案选取
  • 代码实现
  • 归一化函数
  • 综合方法函数
  • 求信息熵
  • 完整代码


适用于评价决策问题,例如:决策目标,备选方案

属性集合

  1. 影响力较强
  2. 性间独立属
  3. 容易辨别优劣
  4. 可量化
  5. 数量过多时(>7)分层

决策矩阵

表示方案对属性的偏好程

方案为行,属性为列,对每一方案每一属性取值

评价指标类型的一致化处理

一般来说,在评价指标x1,x2,…,xm(m>1)中可能包括“极大型”指标、“极小型”指标、“中间型”指标 和 “区间型”指标。

  • 极大型指标:总是期望指标的取值越大越好; 效益型指标,如:收益、利润;
  • 极小型指标:总是期望指标的取值越小越好; 费用型指标,如:成本、能耗;
  • 中间型指标:总是期望指标的取值既不要太大,也不要太小,即取适当的中间值最好;如:环境温度、湿度、人的身高、体重、BMI;
  • 区间型指标:总是期望指标的取值最好是落在某一个确定的区间内最好。如:水质量评估中PH值。

极大型指标和极小型指标又被称为效益型指标和费用型指标。

进行综合评价的过程中,将指标一致化(一样的指标类型),要么极小(综合评价值越小越好),要么极大(…)。评价指标预处理的过程中,首先将指标一致化处理。根据决策目标、实际问题来决定目标是极小还是极大!预处理数据最好不要产生大的变动。

Python中多属性群决策论库 多属性决策matlab代码,Python中多属性群决策论库 多属性决策matlab代码_归一化,第1张

Python中多属性群决策论库 多属性决策matlab代码,Python中多属性群决策论库 多属性决策matlab代码_python_02,第2张

决策矩阵标准化

  1. 区分费用型属性和效益性属性,对费用型属性值取倒数变换,将全部属性转为效益型

属性权重

对目标影响力的权重分配

信息熵法

熵:衡量不确定的指标,熵越大,不确定越大

Python中多属性群决策论库 多属性决策matlab代码,Python中多属性群决策论库 多属性决策matlab代码_归一化_03,第3张

动态加权函数的设定

考虑到评价指标的“质差”与“量差”的关系,选择动态权重函数时 既要能体现不同类型指标之间质的差异,也要能体现同类型指标量的差异。

具体取什么样的动态加权函数,主要是从实际问题出发分析确定。

对于不同的指标可以取相同的权函数,也可以取不同的权函数。

1.分段变幂函数
2.偏大型正态分布函数
3.S型分布函数

综合方法

将决策矩阵与属性权重加以综合,得到最终巨册的数学方法

Python中多属性群决策论库 多属性决策matlab代码,Python中多属性群决策论库 多属性决策matlab代码_归一化_04,第4张

简单加权和法(首选)

Python中多属性群决策论库 多属性决策matlab代码,Python中多属性群决策论库 多属性决策matlab代码_python_05,第5张

加权积法

Python中多属性群决策论库 多属性决策matlab代码,Python中多属性群决策论库 多属性决策matlab代码_归一化_06,第6张

接近理想解的偏好排序法

Python中多属性群决策论库 多属性决策matlab代码,Python中多属性群决策论库 多属性决策matlab代码_matlab_07,第7张

求解方法:

  1. 正理想解: 每列最大值
  2. 负理想解: 每列最小值
  3. 求每列与正负理想解距离
  4. 求接近度

Python中多属性群决策论库 多属性决策matlab代码,Python中多属性群决策论库 多属性决策matlab代码_matlab_08,第8张

方案选取

  • 分配模式
  • 简单加权和法+归一化
  • 适用于资源分配问题
  • 理想模式
  • 简单加权和法+最大化
  • 适用于挑选最优者

代码实现

归一化函数

function D_std = gui1(D,k)
% 对数据进行归一化处理
% D为数据 k为归一化选项
D_std=[];
switch k
    %归一化
    case 1
        D_std=D./(ones(size(D,1),1)*sum(D,1));  %D列为1矩阵*D列和
    %最大化
    case 2
        D_std=D./(ones(size(D,1),1)*max(D,[],1));  %D列为1矩阵*D列最大值
    %模一化
    case 3
        mo_D=sqrt(sum(D.^2,1));
        D_std=D./(ones(size(D,1),1)*mo_D);  %D列为1矩阵*D列模
    %区间尺度变换/极值差
    case 4
        D_max=(ones(size(D,1),1)*max(D,[],1));
        D_min=(ones(size(D,1),1)*min(D,[],1));
        D_std=(D-D_min)./(D_max-D_min);
end

综合方法函数

function V_score = allway(D_std,W,k)
%综合方法
%D_std数据值,W属性权重,k方案选择
V_score=[];
switch k
    %简单求加权和
    case 1
        V_score=D_std*W;  
        V_score=V_score/sum(V_score);   %归一化处理
    %加权积法
    case 2
        V_mid=D_std.^(ones(size(D_std,1),1)*W');  %D列为1矩阵*W
        V_score=prod(V_mid,2);  %dij乘积
        V_score=V_score/sum(V_score);   %归一化处理
    %接近理想解的偏好排序法
    case 3
        V_mid=D_std.*(ones(size(D_std,1),1)*W');  %D列为1矩阵*W
        V_plus=ones(size(D_std,1),1)*max(V_mid,[],1);   %正理想解(列最大值向量)
        V_dim=ones(size(D_std,1),1)*min(V_mid,[],1);    %负理想解(行最大值向量)
        S_plus=sum((V_mid-V_plus).^2,2).^(0.5); %与正理想解距离
        S_dim=sum((V_mid-V_dim).^2,2).^(0.5);   %与负理想解距离
        C_plus=S_dim./(S_plus+S_dim);   %接近度
        V_score = C_plus/sum(C_plus);   %归一化
end
end

求信息熵

D=[ 1/25,9,7;
    1/18,7,7;
    1/12,5,5];
%% 归一化处理
D_std=gui1(D,1);
disp(D_std);


%%求信息熵
m=size(D,1);
E=-1/log(m)*sum(D_std.*log(D_std),1);    %求熵E
F=1-E;  %求区分度F
W=F/sum(F); %求x权重W
W=W';   %行向量转列向量
disp(W);

完整代码

D=[ 1/25,9,7;
    1/18,7,7;
    1/12,5,5];

%% 归一化处理
D_std=gui1(D,1);
disp(D_std);

%% 求信息熵
m=size(D,1);
E=-1/log(m)*sum(D_std.*log(D_std),1);    %求熵E
F=1-E;  %求区分度F
W=F/sum(F); %求x权重W
W=W';   %行向量转列向量
disp(W);

%% 综合方法
res = allway(D_std,W,1);    %加权和方法
disp(res);
res = allway(D,W,2);    %加权积方法
disp(res);
D_std=gui1(D,3);
res = allway(D_std,W,3);    %理想解方法
disp(res);

Python中多属性群决策论库 多属性决策matlab代码,Python中多属性群决策论库 多属性决策matlab代码_归一化_09,第9张



https://www.xamrdz.com/lan/57c1934575.html

相关文章: