张三决定从三种车型中选购一种,选择标准主要有:价格、耗油量、舒适程度、外表。经过反复思考,构造它们之间的成对比较判断矩阵如下:

三种车型a、b、c关于价格、耗油量、舒适程度、外表的成对比较判断矩阵如下:

问题:
i. 根据上述矩阵可以看出四项指标在张三心中的比重是不同的,请按由重到轻顺序将它们排列;
ii. 哪辆车型最便宜,哪辆车型最省油,哪辆车型最舒适,哪辆车型最漂亮?
iii. 用层次分析法确定张三对这三种车型的喜欢程度。
根据题意,建立模型结构图如下:

根据成对比较判断矩阵,对矩阵具体数值标度作出说明如下:
| 标度 | 含义 |
| 1 | 表示两个因素相比,具有相同重要性 |
| 3 | 表示两个因素相比,一个因素比另一个因素稍微重要 |
| 5 | 表示两个因素相比,一个因素比另一个因素明显重要 |
| 7 | 表示两个因素相比,一个因素比另一个因素强烈重要 |
| 9 | 表示两个因素相比,一个因素比另一个因素极端重要 |
| 2,4,6,8 | 上述两相邻标度判断的中值 |
| 倒数 | 因素i与j比较的判断aij,则因素j与i比较的判断aji=1/aij |
符号说明如下:
| 符号 | 符号说明 |
| λmax | 最大特征值 |
| n | 成对比矩阵的阶数 |
| w1 | 准则层对目标层的特征向量 |
| wi | 方案层对目标层的特征向量 |
| CI | 一致性指标 |
| RI | 随机一致性指标 |
| CR | 一致性比率 |
| A | 车型选购 |
| B1 | 价格 |
| B2 | 耗油量 |
| B3 | 舒适程度 |
| B4 | 外表 |
数据处理如下:

查询随机一致性指标RI:
| 阶数 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| RI | 0 | 0 | 0.52 | 0.89 | 1.12 | 1.26 | 1.36 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 1.41 | 1.46 | 1.49 | 1.52 | 1.54 | 1.56 | 1.58 | 1.59 |
对于正互反矩阵A,阶数n=4,可得RI=0.89
计算一致性比率CR:
CR=CI/RI
按照规定,若CR=0,有完全的一致性;若CR接近0(一般以CR≤0.1为参照),有较好的一致性;若CR>0.1,则偏离一致性。
解得:CR=0.0743<0.1,通过一致性检验。同理,分别检验矩阵B1、B2、B3、B4的一致性。
汇总各指标权重如下:
| B1 | B2 | B3 | B4 | |
| w1 | 0.5755 | 0.2761 | 0.0965 | 0.0518 |
| wi | 0.5390 | 0.1109 | 0.6194 | 0.1932 |
| 0.2973 | 0.7311 | 0.2842 | 0.7235 | |
| 0.1638 | 0.1580 | 0.0964 | 0.0833 | |
| λmax | 3.0092 | 3.1190 | 3.0858 | 3.0649 |
i. 对于问题一,可知准则层对目标层的特征向量w1=[0.5755,0.2761,0.0965,0.0518],因此,四项指标在心中的比重从重到轻顺序为B1>B2>B3>B4,即价格>耗油量>舒适程度>外表。
ii. 对于问题二,方案层对目标层的特征向量
可知各方案在不同指标中的权重
价格由便宜到昂贵:
车型a(0.5390)>车型b(0.2973)>车型c(0.1638)
耗油量由少到多:
车型b(0.7311)>车型c(0.1580)>车型a(0.1109)
舒适程度由舒适到不适:
车型a(0.6194)>车型b(0.2842)>车型c(0.0964)
外表由漂亮到一般:
车型b(0.7235)>车型a(0.1932)>车型c(0.0833)
因此,在价格这一指标中,车型a最便宜;在耗油量这一指标中,车型b最省油;在舒适程度这一指标中,车型a最舒适;在外表这一指标中,车型b最漂亮。
iii. 对于问题三,各方案对目标的组合权重如下:
车型a对目标的组合权重为:
0.5755*0.5390+0.2761*0.1109+0.0965*0.6194+0.0518*0.1932=0.4106
车型b对目标的组合权重为:0.5755*0.2973+0.2761*0.7311+0.0965*0.2842+0.0518*0.7235=0.4379
车型c车型c对目标的组合权重为:
0.5755*0.1638+0.2761*0.1580+0.0965*0.0964+0.0518*0.0833=0.1515
因此,方案层对目标的组合向量为:
(0.4106,0.4379,0.1515)T
转换为百分比,即对车型a的喜欢程度为41.06%,对车型b的喜欢程度为43.79%,对车型c的喜欢程度为15.15%。综合各指标的权重后,对车型的喜欢程度排序为:车型b>车型a>车型c。
此处提供3种matlab程序作为参考:
%第一种matlab程序
function result=AHP(mat)
%% 数据加载(判断矩阵载入)
A=mat;
n=size(A,1);
%% 特征值法求权重
% 第一步:求出矩阵A的最大特征值以及其对应的特征向量
[V,D]=eig(A);%V是特征向量, D是由特征值构成的对角矩阵(除了对角线元素外,其余位置元素全为0)
Max_eig=max(max(D));
D==Max_eig;
[r,c]=find(D == Max_eig,1);%找到D中第一个与最大特征值相等的元素的位置,记录其行和列
%对求出的特征向量进行归一化即可得到权重
V(:,c);
disp('特征值法求权重的结果为:');
disp(V(:,c)./sum(V(:,c)));
%找到的最大特征值的列数c找到对应的特征向量,然后再进行标准化。
result=V(:,c)./sum(V(:,c));
CI=(Max_eig - n) / (n-1);
RI=[0 0 0.52 0.89 1.12 1.26 1.36 1.41 1.46 1.49 1.52 1.54 1.56 1.58 1.59];
CR=CI/RI(n);
disp('一致性指标CI=');disp(CI);
disp('一致性比例CR=');disp(CR);
if CR<0.10
disp('因为CR < 0.10,所以该判断矩阵A的一致性可以接受!');
else
disp('注意:CR >= 0.10,因此该判断矩阵A需要进行修改!');
end
end
%% 在命令窗口输入判断矩阵
clc;clear;
%% 4指标评价
A=[ 1 3 7 8;
1/3 1 5 5;
1/7 1/5 1 3;
1/8 1/5 1/3 1]
AHP_A=AHP(A);
%% 价格
A1=[1 2 3;
1/2 1 2;
1/3 1/2 1]
AHP_A1=AHP(A1);
%% 耗油量
A2=[1 1/5 1/2;
5 1 7 ;
2 1/7 1]
AHP_A2=AHP(A2);
%% 舒适程度
A3=[1 3 5;
1/3 1 4;
1/5 1/4 1]
AHP_A3=AHP(A3);
%% 外表
A4=[1 1/5 3;
5 1 7;
1/3 1/7 1]
AHP_A4=AHP(A4);
%% 计算
s=[AHP_A1 AHP_A2 AHP_A3 AHP_A4] %汇总
s1=[s(:,1)*AHP_A(1) s(:,2)*AHP_A(2) s(:,3)*AHP_A(3) s(:,4)*AHP_A(4)] %乘比例
evaluate=[sum(s1(1,:)) sum(s1(2,:)) sum(s1(3,:))]
%第二种matlab程序
clc,clear
fid=fopen('C:/Users/Administrator/Desktop/txt3.txt','r');
n1=4;n2=3; a=[];
for i=1:n1
tmp=str2num(fgetl(fid));
a=[a;tmp]; %读准则层判断矩阵
end
for i=1:n1
str1=char(['b',int2str(i),'=[];']);
str2=char(['b',int2str(i),'=[b',int2str(i),';tmp];']);
eval(str1);
for j=1:n2
tmp=str2num(fgetl(fid));
eval(str2); %读方案层的判断矩阵
end
end
ri=[0,0,0.58,0.90,1.12,1.24,1.32,1.41,1.45]; %一致性指标
[x,y]=eig(a);
lamda=max(diag(y));
num=find(diag(y)==lamda);
w0=x(:,num)/sum(x(:,num));
cr0=(lamda-n1)/(n1-1)/ri(n1)
for i=1:n1
[x,y]=eig(eval(char(['b',int2str(i)])));
lamda=max(diag(y));
num=find(diag(y)==lamda);
w1(:,i)=x(:,num)/sum(x(:,num));
cr1(i)=(lamda-n2)/(n2-1)/ri(n2);
end
%第三种matlab程序
clear,clc
A=[1 3 7 8;
1/3 1 5 5;
1/7 1/5 1 3;
1/8 1/5 1/3 1];
v=sum(A); %列求和
d=diag(v); %生成以向量v为对角的对角矩阵
norm_a=A*(d^-1); %列归一化矩阵
norm_a=sum(norm_a,2); %行求和
w_a=norm_a./sum(norm_a) %求特征向量
Aw_a=A*w_a %求权重向量
eigenvalue=diag(eig(A)); %求特征值
lambda_a=eigenvalue(1) %求最大特征值
ci_a=(lambda_a-4)/3 %求一致性指标
cr_a=ci_a/0.89 %求一致性比率
B1=[1 2 3;
1/2 1 2;
1/3 1/2 1];
v=sum(B1);
d=diag(v);
norm_b1=B1*(d^-1);
norm_b1=sum(norm_b1,2);
w_b1=norm_b1./sum(norm_b1)
B1w_b1=B1*w_b1
eigenvalue=diag(eig(B1));
lambda_b1=eigenvalue(1)
ci_b1=(lambda_b1-3)/2
cr_b1=ci_b1/0.52
B2=[1 1/5 1/2;
5 1 7;
2 1/7 1];
v=sum(B2);
d=diag(v);
norm_b2=B2*(d^-1);
norm_b2=sum(norm_b2,2);
w_b2=norm_b2./sum(norm_b2)
B2w_b2=B2*w_b2
eigenvalue=diag(eig(B2));
lambda_b2=eigenvalue(1)
ci_b2=(lambda_b2-3)/2
cr_b2=ci_b2/0.52
B3=[1 3 5;
1/3 1 4;
1/5 1/4 1];
v=sum(B3);
d=diag(v);
norm_b3=B3*(d^-1);
norm_b3=sum(norm_b3,2);
w_b3=norm_b3./sum(norm_b3)
B3w_b3=B3*w_b3
eigenvalue=diag(eig(B3));
lambda_b3=eigenvalue(1)
ci_b3=(lambda_b3-3)/2
cr_b3=ci_b3/0.52
B4=[1 1/5 3;
5 1 7;
1/3 1/7 1];
v=sum(B4);
d=diag(v);
norm_b4=B4*(d^-1);
norm_b4=sum(norm_b4,2);
w_b4=norm_b4./sum(norm_b4)
B4w_b4=B4*w_b4
eigenvalue=diag(eig(B4));
lambda_b4=eigenvalue(1)
ci_b4=(lambda_b4-3)/2
cr_b4=ci_b4/0.52
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最
如何检查Ruby文件是否是通过“require”或“load”导入的,而不是简单地从命令行执行的?例如:foo.rb的内容:puts"Hello"bar.rb的内容require'foo'输出:$./foo.rbHello$./bar.rbHello基本上,我想调用bar.rb以不执行puts调用。 最佳答案 将foo.rb改为:if__FILE__==$0puts"Hello"end检查__FILE__-当前ruby文件的名称-与$0-正在运行的脚本的名称。 关于ruby-检查是否
是否可以在应用程序中包含的gem代码中知道应用程序的Rails文件系统根目录?这是gem来源的示例:moduleMyGemdefself.included(base)putsRails.root#returnnilendendActionController::Base.send:include,MyGem谢谢,抱歉我的英语不好 最佳答案 我发现解决类似问题的解决方案是使用railtie初始化程序包含我的模块。所以,在你的/lib/mygem/railtie.rbmoduleMyGemclassRailtie使用此代码,您的模块将在