北太天元學(xué)習(xí)40-模糊綜合評(píng)價(jià)法選餐廳
在生產(chǎn)實(shí)踐、科學(xué)實(shí)驗(yàn)以及日常生活中,人們經(jīng)常會(huì)遇到模糊概念(或現(xiàn)象)。例如,大與小、輕與重、快與慢、動(dòng)與靜、深與淺、美與丑等都包含著一定的模糊概念。隨著科學(xué)技術(shù)的發(fā)展,各學(xué)科領(lǐng)域?qū)τ谶@些模糊概念有關(guān)的實(shí)際問題往往都需要給出定量的分析,這就需要利用模糊數(shù)學(xué)這一工具來解決。模糊數(shù)學(xué)是一個(gè)較新的現(xiàn)代應(yīng)用數(shù)學(xué)學(xué)科,它是繼經(jīng)典數(shù)學(xué)、統(tǒng)計(jì)數(shù)學(xué)之后發(fā)展起來的一個(gè)新的數(shù)學(xué)學(xué)科。統(tǒng)計(jì)數(shù)學(xué)是將數(shù)學(xué)的應(yīng)用范圍從確定性領(lǐng)域擴(kuò)大到了隨機(jī)領(lǐng)域,即從必然現(xiàn)象到隨機(jī)現(xiàn)象,而模糊數(shù)學(xué)則是把數(shù)學(xué)的應(yīng)用范圍從確定性的領(lǐng)域擴(kuò)大到了模糊領(lǐng)域,即從精確現(xiàn)象到模糊現(xiàn)象。
模糊綜合評(píng)價(jià)法是一種基于模糊數(shù)學(xué)的綜合評(píng)價(jià)方法。該綜合評(píng)價(jià)法根據(jù)模糊數(shù)學(xué)的隸屬度理論把定性評(píng)價(jià)轉(zhuǎn)化為定量評(píng)價(jià),即用模糊數(shù)學(xué)對(duì)受到多種因素制約的事物或?qū)ο笞鞒鲆粋€(gè)總體的評(píng)價(jià)。它具有結(jié)果清晰,系統(tǒng)性強(qiáng)的特點(diǎn),能較好地解決模糊的、難以量化的問題,適合各種非確定性問題的解決。下面舉一個(gè)例子來說明該方法的應(yīng)用。假設(shè)我們對(duì)某家餐廳的餐飲質(zhì)量進(jìn)行評(píng)價(jià),考慮以下五個(gè)因素:菜品口感、食材新鮮度、烹飪技巧、價(jià)格和環(huán)境衛(wèi)生。我們可以采用以下步驟進(jìn)行模糊綜合評(píng)價(jià):
??? 確定各個(gè)因素的權(quán)重。在這個(gè)例子中,我們假設(shè)菜品口感、食材新鮮度、烹飪技巧、價(jià)格和環(huán)境衛(wèi)生的權(quán)重分別為0.3、0.2、0.15、0.1和0.25。
??? 確定每個(gè)因素的評(píng)分標(biāo)準(zhǔn)。在這個(gè)例子中,我們可以用五個(gè)等級(jí)的分?jǐn)?shù)來表示每個(gè)因素的評(píng)分:5分表示非常好,4分表示較好,3分表示一般,2分表示較差,1分表示非常差。
??? 收集專家或顧客的評(píng)價(jià)意見。在這個(gè)例子中,我們假設(shè)有10位專家或顧客對(duì)這家餐廳的餐飲質(zhì)量進(jìn)行了評(píng)價(jià)。
??? 將每個(gè)評(píng)價(jià)意見映射到各個(gè)因素的評(píng)分上,并計(jì)算出每個(gè)因素的平均得分。
??? 根據(jù)每個(gè)因素的權(quán)重和平均得分,計(jì)算出該餐廳的餐飲質(zhì)量綜合得分。
通過以上步驟,我們可以得到該餐廳的餐飲質(zhì)量綜合得分。如果綜合得分高于3分,我們可以認(rèn)為該餐廳的餐飲質(zhì)量較好;如果綜合得分低于3分,則認(rèn)為該餐廳的餐飲質(zhì)量較差。需要注意的是,這個(gè)綜合得分并不是一個(gè)精確的值,而是一個(gè)模糊的概念,因?yàn)樗腔诙鄠€(gè)因素的評(píng)價(jià)得出的。
綜上所述,模糊綜合評(píng)價(jià)方法是一種基于模糊數(shù)學(xué)的綜合評(píng)價(jià)方法,能夠?qū)⒍鄠€(gè)因素的定性評(píng)價(jià)轉(zhuǎn)化為定量評(píng)價(jià),從而對(duì)事物進(jìn)行全面的評(píng)價(jià)。
clc
clear all
% 輸入各因素的權(quán)重 (一般來說要求權(quán)重的和為1, 可用層冊(cè)分析法或熵權(quán)法確定)
w = [0.3, 0.2, 0.15, 0.1, 0.25];
% 輸入評(píng)語集 (優(yōu)秀,良好, 平均, 較差, 很差)
grade = [5, 4, 3, 2, 1];
% 假設(shè)有10個(gè)評(píng)價(jià)意見,每個(gè)評(píng)價(jià)意見包含各個(gè)指標(biāo)的評(píng)分
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]; % 環(huán)境衛(wèi)生
environment_score = scores;
%對(duì)于指標(biāo)u_i來說, 對(duì)各個(gè)評(píng)語的隸屬度為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); % 環(huán)境衛(wèi)生
% 將每個(gè)評(píng)價(jià)意見的各個(gè)因素的評(píng)分轉(zhuǎn)化為綜合得分
scores = [food_grade*w(1), ingredient_grade*w(2), cooking_grade*w(3), environment_grade*w(4)];
sum_scores = sum(scores);
% 將綜合得分轉(zhuǎn)化為等級(jí)并輸出
grade_text = cellstr(strcat('優(yōu)秀', 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
另外,模糊綜合評(píng)價(jià)算法還可以參考張敬信老師的帖子:
【評(píng)價(jià)算法】模糊綜合評(píng)價(jià)Ⅰ-算法理論
【評(píng)價(jià)算法】模糊綜合評(píng)價(jià)Ⅱ—具體案例
那兒提供了一個(gè)例子: 某平原產(chǎn)糧區(qū)進(jìn)行耕作制度改革,制定了甲(三種三收)、乙(兩茬平作)、丙(兩年三熟)3種方案。主要評(píng)價(jià)指標(biāo)選取 5 項(xiàng):糧食畝產(chǎn)量、農(nóng)產(chǎn)品質(zhì)量、每畝用工量、每畝純收入、生態(tài)環(huán)境影響。根據(jù)當(dāng)?shù)貙?shí)際情況,這 5 個(gè)因素的權(quán)重分別為 0.2, 0.1, 0.15, 0.3, 0.25, 然后給出了一個(gè)評(píng)價(jià)登記表,根據(jù)這些信息給三種耕種制度給出評(píng)價(jià)。
上面提供的代碼在北太天元運(yùn)行的時(shí)候,會(huì)報(bào)告缺少一些函數(shù),我把缺少的函數(shù)用m函數(shù)實(shí)現(xiàn)后,可以運(yùn)行,現(xiàn)在把所有的代碼貼在這兒供大家參考
%文件1
% trapmf.m
%北太天元的梯形隸屬度函數(shù) , 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
%北太天元的三角形隸屬度函數(shù), 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
%左端三角形/梯形隸屬度函數(shù)(遞減) , p=[a,b], ?
%張敬信老師為matlab所寫dtrimf.m, 不需要修改即可以在北太天元運(yùn)行
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, 不需要修改即可以在北太天元運(yùn)行
%右端三角形/梯形隸屬度函數(shù)(遞增) , 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
%右端高斯隸屬度函數(shù)(遞增), p=[a,sigma]
%張敬信老師為matlab所寫iguassmf.m, 不需要修改即可以在北太天元運(yùn)行
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, 不需要修改即可以在北太天元運(yùn)行
%左端高斯隸屬度函數(shù)(遞減), 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, 不需要修改即可以在北太天元運(yùn)行
function B=fce(A,R,type)
%實(shí)現(xiàn)模糊合成算子的計(jì)算
%A為因素集各因素的權(quán)重向量,R為評(píng)判矩陣,要求A的列數(shù)等于R的行數(shù)
%type選擇模糊合成算子的類型, 1-5分別對(duì)應(yīng)前文的5種不同算子
%B返回綜合評(píng)判結(jié)果
[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?????? %乘加,加權(quán)平均型
??????????? 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 ?
% 在我們餐館的例子中,要評(píng)價(jià)的餐館的一個(gè)指標(biāo),例如衛(wèi)生環(huán)境是屬于哪一個(gè)級(jí)別,
% 隸屬度是根據(jù) 10 名評(píng)價(jià)者的比例來確定的,而這個(gè)例子中
% 隸屬度是根據(jù) dtrimf , trapmf, 等函數(shù)來確定的.
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? 這是用模糊綜合評(píng)價(jià)法的主程序
%張敬信老師為matlab所寫fuzzyEx1.m, 不需要修改即可以在北太天元運(yùn)行
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'