当前位置:   article > 正文

数学建模---评价类模型总结_数学建模 评价方法选择

数学建模 评价方法选择

目录

一、层次分析法(AHP)

二、topsis

三、熵值法

四、模糊综合评价法


一、层次分析法(AHP)

  • 优点
    • 结构清晰:通过建立层次结构,能清楚地展示决策要素之间的关系。
    • 易于理解和应用:操作直观,易于收集和处理数据。
  • 缺点
    • 主观性较强:决策者的主观判断对结果影响较大。
    • 一致性检验可能复杂:需要进行一致性检验,处理起来可能比较复杂。
  • 适用场景:适用于需要进行多标准决策的场合,如方案选择、风险评估等。

  • 步骤:
  • 建立层次结构模型:将决策问题分解为目标、准则、方案等层次。
  • 构建成对比较矩阵:在准则层(和方案层)中,对每一层的元素进行两两比较,根据相对重要性赋予1-9的标度值,构建成对比较矩阵。
  • 计算权重向量和一致性检验:计算成对比较矩阵的最大特征值及对应的特征向量,特征向量归一化后作为权重向量。同时进行一致性检验,计算一致性比率(CR),若CR小于0.1,则认为一致性可以接受。
  • 计算组合权重并做出最终决策:将各层权重进行合成,得到方案层相对于目标层的总权重,根据总权重做出最终决策

  • 代码实现: 
  1. function [weights, CR] = AHP(matrix)
  2. % AHP - 层次分析法
  3. % 输入:成对比较矩阵 matrix
  4. % 输出:权重向量 weights 和一致性比率 CR
  5. % 计算权重向量(特征向量)
  6. [V, D] = eig(matrix);
  7. [max_eig, max_ind] = max(diag(D));
  8. weights = V(:, max_ind) / sum(V(:, max_ind));
  9. % 计算一致性指标(CI)和一致性比率(CR)
  10. n = size(matrix, 1);
  11. CI = (max_eig - n) / (n - 1);
  12. RI = [0, 0, 0.58, 0.90, 1.12, 1.24, 1.32, 1.41, 1.45]; % 随机一致性指数
  13. CR = CI / RI(n);
  14. % 输出一致性比率
  15. if CR < 0.1
  16. fprintf('一致性可接受(CR = %f)\n', CR);
  17. else
  18. fprintf('一致性不可接受(CR = %f)!请重新检查成对比较矩阵。\n', CR);
  19. end
  20. end
  21. % 使用示例
  22. % 定义成对比较矩阵
  23. matrix = [1, 1/2, 4; 2, 1, 7; 1/4, 1/7, 1];
  24. % 调用 AHP 函数
  25. [weights, CR] = AHP(matrix);
  26. % 显示结果
  27. fprintf('权重向量:\n');
  28. disp(weights);

二、topsis

  • 优点
    • 直观且合理:能够同时考虑理想解和负理想解,综合评价各方案。
    • 操作简单:计算过程简单明了。
  • 缺点
    • 数据标准化依赖:对数据的标准化处理方式敏感。
    • 无法处理非定量数据:难以直接处理定性数据。
  • 适用场景:适用于存在明确评价指标且需要从多个备选方案中选择最优方案的问题,如产品评估、选址问题等。

  • 步骤
  1. 构建决策矩阵:将每个方案在不同准则下的评价值汇总,构成决策矩阵。
  2. 标准化处理:对决策矩阵进行标准化处理,使各指标具有可比性。
  3. 确定正理想解和负理想解:正理想解是各指标最优值的集合,负理想解是各指标最劣值的集合。
  4. 计算方案与理想解的距离:计算每个方案与正理想解、负理想解的欧氏距离。
  5. 计算相对接近度:利用方案与正理想解和负理想解的距离,计算每个方案的相对接近度。
  6. 做出决策:根据相对接近度的大小,进行排名,选择最优方案

        代码实现:

  1. % 步骤1:输入数据
  2. % 决策矩阵(每行代表一个方案,每列代表一个属性)
  3. D = [your_decision_matrix];
  4. % 权重向量(每个属性的权重,权重和应该等于1)
  5. W = [your_weight_vector];
  6. % 步骤2:标准化决策矩阵
  7. [m, n] = size(D);
  8. for j = 1:n
  9. D(:, j) = D(:, j) / norm(D(:, j), 2);
  10. end
  11. % 步骤3:计算正理想解(Positive Ideal Solution)和负理想解(Negative Ideal Solution)
  12. PIS = max(D);
  13. NIS = min(D);
  14. % 步骤4:计算每个方案到正理想解和负理想解的距离
  15. for i = 1:m
  16. S_plus(i) = norm(D(i, :) - PIS, 2);
  17. S_minus(i) = norm(D(i, :) - NIS, 2);
  18. end
  19. % 步骤5:计算综合评分
  20. for i = 1:m
  21. TOPSIS_score(i) = S_minus(i) / (S_plus(i) + S_minus(i));
  22. end
  23. % 步骤6:根据综合评分排序
  24. [sorted_score, ranking] = sort(TOPSIS_score, 'descend');
  25. % 输出排序结果
  26. disp('TOPSIS分析结果:');
  27. disp('方案 综合评分 排名');
  28. for i = 1:m
  29. fprintf('%d %.4f %d\n', ranking(i), TOPSIS_score(ranking(i)), i);
  30. end

三、熵值法

  • 优点
    • 客观性强:通过数据的离散程度来确定权重,减少了人为因素的影响。
    • 数据驱动:适合处理大量数据。
  • 缺点
    • 数据质量依赖性:对数据的质量和完整性要求较高。
    • 忽略了指标之间的相互关系:只考虑单个指标的影响。
  • 适用场景:适用于需要对指标进行权重分配的情况,特别是在数据量大且要求客观性较高的场景,如指标体系构建、绩效评价等。

  • 步骤:
  1. 构建原始数据矩阵:收集各方案在不同准则下的评价值。
  2. 数据标准化处理:对原始数据矩阵进行标准化处理。
  3. 计算指标的熵值:利用标准化后的数据计算每个指标的熵值。
  4. 计算指标的权重:根据熵值计算每个指标的权重。
  5. 综合评价:利用加权平均法,根据指标权重计算每个方案的综合评价值。

代码实现

  1. % 步骤1:输入数据
  2. % 决策矩阵(每行代表一个方案,每列代表一个属性)
  3. D = [your_decision_matrix];
  4. % 步骤2:标准化决策矩阵
  5. [m, n] = size(D);
  6. for j = 1:n
  7. D(:, j) = D(:, j) / sum(D(:, j));
  8. end
  9. % 步骤3:计算熵值
  10. E = -sum(D .* log(D), 2);
  11. % 步骤4:计算权重
  12. W = (1 - E) / sum(1 - E);
  13. % 输出权重
  14. disp('熵值法权重:');
  15. disp(W);

四、模糊综合评价法

  • 优点
    • 处理模糊信息能力强:适合处理定性和不确定性较高的信息。
    • 灵活性:可以结合定量和定性分析。
  • 缺点
    • 主观性:评价过程中的模糊矩阵和权重设定可能带来主观性。
    • 计算复杂度较高:特别是在涉及多个因素和层级时。
  • 适用场景:适用于评价标准不完全定量或存在模糊性的情况,如消费者满意度调查、项目评估等。

  • 步骤:
  1. 确定评价指标和评价集:确定评价的指标体系和每个指标的评价集。
  2. 构建模糊关系矩阵:根据专家打分或实际数据,构建各指标的模糊关系矩阵。
  3. 确定权重分配:确定各评价指标的权重。
  4. 进行模糊综合评价:利用模糊综合评价公式,结合模糊关系矩阵和权重,进行综合评价。
  5. 做出决策:根据综合评价的结果,选择最优或进行排序

代码实现:

  1. % 步骤1:输入数据
  2. % 决策矩阵(每行代表一个方案,每列代表一个属性)
  3. D = [your_decision_matrix];
  4. % 步骤2:设置隶属度函数
  5. % 这里以三角形隶属度函数为例,你可以根据实际情况选择不同的隶属度函数
  6. mu = @(x, a, b, c) max(0, min((x - a) / (b - a), (c - x) / (c - b)));
  7. % 步骤3:计算隶属度矩阵
  8. [m, n] = size(D);
  9. R = zeros(m, n);
  10. % 根据具体的隶属度函数计算隶属度矩阵
  11. for i = 1:m
  12. for j = 1:n
  13. R(i, j) = mu(D(i, j), a, b, c); % 替换 a, b, c 为隶属度函数参数
  14. end
  15. end
  16. % 步骤4:计算综合评价值
  17. % 这里以加权平均为例,你可以根据需要选择不同的聚合运算方法
  18. weights = [your_weights_vector]; % 替换为属性权重向量
  19. F = sum(R .* weights, 2);
  20. % 输出综合评价值
  21. disp('模糊分析评价综合评价值:');
  22. disp(F);

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/623518
推荐阅读
相关标签
  

闽ICP备14008679号