欢迎光临散文网 会员登陆 & 注册

北太天元学习40-模糊综合评价法选餐厅

2023-08-27 17:23 作者:卢朓  | 我要投稿

在生产实践、科学实验以及日常生活中,人们经常会遇到模糊概念(或现象)。例如,大与小、轻与重、快与慢、动与静、深与浅、美与丑等都包含着一定的模糊概念。随着科学技术的发展,各学科领域对于这些模糊概念有关的实际问题往往都需要给出定量的分析,这就需要利用模糊数学这一工具来解决。模糊数学是一个较新的现代应用数学学科,它是继经典数学、统计数学之后发展起来的一个新的数学学科。统计数学是将数学的应用范围从确定性领域扩大到了随机领域,即从必然现象到随机现象,而模糊数学则是把数学的应用范围从确定性的领域扩大到了模糊领域,即从精确现象到模糊现象。

模糊综合评价法是一种基于模糊数学的综合评价方法。该综合评价法根据模糊数学的隶属度理论把定性评价转化为定量评价,即用模糊数学对受到多种因素制约的事物或对象作出一个总体的评价。它具有结果清晰,系统性强的特点,能较好地解决模糊的、难以量化的问题,适合各种非确定性问题的解决。下面举一个例子来说明该方法的应用。假设我们对某家餐厅的餐饮质量进行评价,考虑以下五个因素:菜品口感、食材新鲜度、烹饪技巧、价格和环境卫生。我们可以采用以下步骤进行模糊综合评价:

    确定各个因素的权重。在这个例子中,我们假设菜品口感、食材新鲜度、烹饪技巧、价格和环境卫生的权重分别为0.3、0.2、0.15、0.1和0.25。

    确定每个因素的评分标准。在这个例子中,我们可以用五个等级的分数来表示每个因素的评分:5分表示非常好,4分表示较好,3分表示一般,2分表示较差,1分表示非常差。

    收集专家或顾客的评价意见。在这个例子中,我们假设有10位专家或顾客对这家餐厅的餐饮质量进行了评价。

    将每个评价意见映射到各个因素的评分上,并计算出每个因素的平均得分。

    根据每个因素的权重和平均得分,计算出该餐厅的餐饮质量综合得分。

通过以上步骤,我们可以得到该餐厅的餐饮质量综合得分。如果综合得分高于3分,我们可以认为该餐厅的餐饮质量较好;如果综合得分低于3分,则认为该餐厅的餐饮质量较差。需要注意的是,这个综合得分并不是一个精确的值,而是一个模糊的概念,因为它是基于多个因素的评价得出的。

综上所述,模糊综合评价方法是一种基于模糊数学的综合评价方法,能够将多个因素的定性评价转化为定量评价,从而对事物进行全面的评价。

clc
clear all
% 输入各因素的权重 (一般来说要求权重的和为1, 可用层册分析法或熵权法确定)
w = [0.3, 0.2, 0.15, 0.1, 0.25];

% 输入评语集 (优秀,良好, 平均, 较差, 很差)
grade = [5, 4, 3, 2, 1];

% 假设有10个评价意见,每个评价意见包含各个指标的评分
scores = [4, 3, 5, 4, 3, 5, 4, 3, 5, 4]; % 菜品口感
food_score = scores;

scores = [5, 4, 3, 2, 5, 4, 3, 5, 4, 3]; % 食材新鲜度
ingredient_score = scores;

scores = [4, 5, 4, 3, 5, 4, 3, 5, 4, 3]; % 烹饪技巧
cooking_score = scores;

scores = [3, 4, 3, 2, 3, 4, 3, 2, 3, 4]; % 环境卫生
environment_score = scores;

%对于指标u_i来说, 对各个评语的隶属度为V上的模糊子集。
food_grade = ratio_score( food_score, grade); % 菜品口感
ingredient_grade = ratio_score(ingredient_score, grade); % 食材新鲜度
cooking_grade = ratio_score(cooking_score,  grade); % 烹饪技巧
environment_grade = ratio_score(environment_score, grade); % 环境卫生

% 将每个评价意见的各个因素的评分转化为综合得分
scores = [food_grade*w(1), ingredient_grade*w(2), cooking_grade*w(3), environment_grade*w(4)];
sum_scores = sum(scores);

% 将综合得分转化为等级并输出
grade_text = cellstr(strcat('优秀', num2str((sum_scores-1)/2+1)));
disp(['该餐厅的综合得分为:', grade_text]);

function  r =  ratio_score( list_scores,   grade)
    r = zeros(size(grade));
    for  i = 1:length(grade)
        r(i) =  sum( list_scores == grade(i) ) / length(list_scores) ;
    end
end


另外,模糊综合评价算法还可以参考张敬信老师的帖子:
【评价算法】模糊综合评价Ⅰ-算法理论
【评价算法】模糊综合评价Ⅱ—具体案例
那儿提供了一个例子: 某平原产粮区进行耕作制度改革,制定了甲(三种三收)、乙(两茬平作)、丙(两年三熟)3种方案。主要评价指标选取 5 项:粮食亩产量、农产品质量、每亩用工量、每亩纯收入、生态环境影响。根据当地实际情况,这 5 个因素的权重分别为 0.2, 0.1, 0.15, 0.3, 0.25, 然后给出了一个评价登记表,根据这些信息给三种耕种制度给出评价。
上面提供的代码在北太天元运行的时候,会报告缺少一些函数,我把缺少的函数用m函数实现后,可以运行,现在把所有的代码贴在这儿供大家参考

%文件1
% trapmf.m
%北太天元的梯形隶属度函数 , p=[a,b,c,d]
%         ------
%        /      \
%       /        \
% ------          -----------
%      a b      c d
function y = trapmf(x,p)
y = zeros(size(x));
y(x<=p(1)) = 0;
y(x>=p(4)) = 0;
y( x>= p(2) & x <= p(3) ) = 1;
I = x>p(1) & x<p(2);
y(I) = (x(I)-p(1))/(p(2)-p(1));
J = x>p(3) & x<p(4);
y(J) = (p(4)-x(J))/(p(4)-p(3));

%文件2
%北太天元的三角形隶属度函数, p=[a,b,c]
%
%          /\
%         /   \
%        /      \
%       /         \
% ------            -----------
%      a    b      c
function y = trimf(x,p)
y = zeros(size(x));
y(x<=p(1)) = 0;
y(x>=p(3)) = 0;
I = x>p(1) & x<p(2);
y(I) = (x(I)-p(1))/(p(2)-p(1));
J = x>p(2) & x<p(3);
y(I) = (p(3)-x(J))/(p(3)-p(2));


%文件3
%左端三角形/梯形隶属度函数(递减) , p=[a,b],  
%张敬信老师为matlab所写dtrimf.m, 不需要修改即可以在北太天元运行
function y = dtrimf(x,p)
y = zeros(size(x));
y(x<=p(1)) = 1;
I = x>p(1) & x<p(2);
y(I) = (p(2)-x(I))/(p(2)-p(1));

%文件4
%张敬信老师为matlab所写itrmf.m, 不需要修改即可以在北太天元运行
%右端三角形/梯形隶属度函数(递增) , p=[a,b]
function y = itrimf(x,p)
y = zeros(size(x));
y(x>=p(2)) = 1;
I = x>p(1) & x<p(2);
y(I) = (x(I)-p(1))/(p(2)-p(1));

%文件5
%右端高斯隶属度函数(递增), p=[a,sigma]
%张敬信老师为matlab所写iguassmf.m, 不需要修改即可以在北太天元运行
function y = igaussmf(x,p)
y = ones(size(x));
I = x < p(1);
y(I) = exp(-((x(I)-p(1))/p(2)).^2);

%文件6
%张敬信老师为matlab所写dguassmf.m, 不需要修改即可以在北太天元运行
%左端高斯隶属度函数(递减), p=[a,sigma]
function y = dgaussmf(x,p)
y = ones(size(x));
I = x > p(1);
y(I) = exp(-((x(I)-p(1))/p(2)).^2);


%文件7
%张敬信老师为matlab所写fce.m, 不需要修改即可以在北太天元运行
function B=fce(A,R,type)
%实现模糊合成算子的计算
%A为因素集各因素的权重向量,R为评判矩阵,要求A的列数等于R的行数
%type选择模糊合成算子的类型, 1-5分别对应前文的5种不同算子
%B返回综合评判结果
[n,m]=size(R);  
B=zeros(1,m);
for j=1:m
    switch type
        case 1       %取小取大,主因素决定型
            B(j)=max(min([A;R(:,j)']));               
        case 2       %乘积最大,主因素突出型
            B(j)=max([A.*R(:,j)']);  
        case 3       %乘加,加权平均型
            B(j)=sum(A.*R(:,j)');    
        case 4        %取小上界和型
            B(j)=min(1,sum(min([A;R(:,j)'])));
        case 5        %均衡平均型
            r0=sum(R(:,j));
            B(j)=sum(min([A;R(:,j)'./r0]));
    end         
end
B=B./sum(B);  %归一化
end

%文件8  
% 在我们餐馆的例子中,要评价的餐馆的一个指标,例如卫生环境是属于哪一个级别,
% 隶属度是根据 10 名评价者的比例来确定的,而这个例子中
% 隶属度是根据 dtrimf , trapmf, 等函数来确定的.
function R = EvalMatrix(x)
r1 = [dtrimf(x(1),[350 450]), trapmf(x(1), [250 350 450 550]), ...
        trapmf(x(1), [350 450 550 650]), itrimf(x(1), [450 550])];
r2 = [itrimf(x(2), [3.5 4]), trimf(x(2), [2.5 3 3.5]), ...
          trimf(x(2), [1.5 2 2.5]), dtrimf(x(2), [1 1.5])];
r3 = [itrimf(x(3),[40,60]), trapmf(x(3),[20:20:80]), ...
        trapmf(x(3), [0:20:60]), dtrimf(x(3),[20,40])];
r4 = [dtrimf(x(4), [50 90]), trapmf(x(4), [0 50 90 130]), ...
       trapmf(x(4), 50:40:170), itrimf(x(4), [90 130])];
r5 = [itrimf(x(5), [3.5 4]), trimf(x(5), [2.5 3 3.5]), ...
        trimf(x(5), [1.5 2 2.5]), dtrimf(x(5), [1 1.5])];
R = [r1; r2; r3; r4; r5];


%文件9  这是用模糊综合评价法的主程序
%张敬信老师为matlab所写fuzzyEx1.m, 不需要修改即可以在北太天元运行
clc;clear;

x1 = [592.5 3 55  72 4];
x2 = [529   2 38 105 3];
x3 = [412   1 32  85 2];
R1 = EvalMatrix(x1);
R2 = EvalMatrix(x2);
R3 = EvalMatrix(x3);
A = [0.2 0.1 0.15 0.3 0.25];
type = 3;  %选择第3类模糊合成算子M(.,+)
B1 = fce(A,R1,type)
B2 = fce(A,R2,type)
B3 = fce(A,R3,type)
w = 0:3;
s1 = B1*w'
s2 = B2*w'
s3 = B3*w'




北太天元学习40-模糊综合评价法选餐厅的评论 (共 条)

分享到微博请遵守国家法律