- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于Matlab GUI层次分析法实现和应用
基于Matlab GUI层次分析法实现和应用
【摘要】本文详细阐述了层次分析法及其步骤,利用Matlab和GUI技术整合来实现层次分析法,并用实例加以验证。使得层次分析法界面化简洁化,操作更便捷。
【关键词】层次分析法;Matlab;GUI;权重
1.层次分析法基本原理
层次分析法(Analytic Hierarchy Process简称AHP)是将与决策总是有关的元素分解成目标、准则、方案等层次,在此基础之上进行定性和定量分析的决策方法。
层次分析法的主要流程分为四步:一是建立层次分析结构模型,二是构造成对比矩阵并计算权向量,三是做一致性检验,四是计算组合权向量(作组合一致性检验)。
层次分析法的基本思想是把复杂问题分解为若干层次,在最底层次通过两两对比得出各因素权重,通过由低到高的层层分析计算,最后计算出各方案对总目标的权数,权数最大的方案即为最优方案。
决策的实质是进行比较,通过比较做出选择,但是对于缺乏公度性的多目标决策问题来说,由于无法用统一尺度去衡量比较各个不同目标,因此,唯一可行的办法是进行两两比较。通过将两两比较后的结果填入判断矩阵的特征和特征向量,然后确定各目标重要性的加权值。
层次分析方法的基本假设是层次之间存在递进结构,即从高到低或从低到高递进。当复杂系统中某一层次既可直接地影响其他层次,同时又直接及间接受其他层次影响时,就不属于层次分析范围,需要用网络模型来描述。
层次分析的基本方法是建立层次结构模型。建立层次模型,首先要对所解决问题有明确的认识,弄清它涉及哪些因素,如目标、分目标、部门、约束、可能情况和方案等,以及因素相互之间的关系。其次,将决策问题层次化。将决策问题划分为若干个层次,第一层是总目标层,即要想达到的目标;中间层常称为分目标层、标准层、部门层、约束层、准则层等;最底层一般是解决问题的方案或者与问题有关的可能情况,常称为方案层或者措施层。
建立层次模型之后,可以在各层元素中进行两两比较,构造出判断矩阵。判断矩阵是定性过渡到定量的重要环节,再通过求解判断矩阵的特征向量,并对判断矩阵的一致性进行检验,检查决策者在构造判断矩阵时判断思维是否具有一致性。
通过一致性检验后,便可按归一化处理已经处理过的特征向量作为某一层次的加权值,然后从高层次到低层次逐层计算排序加权值,得出层次总排序。
最后是对总排序的一致性检验,通过检验,则其结果可以用于决策;否则,就需要重新调整判别矩阵。
2.Matlab GUI层次分析法软件包实现
虽然利用Matlab的程序语句命令也能实现层次分析法,但是不够简洁直观。结合Matlab GUI设计。编写应用程序,并设计相应的用户界面来实现层次分析法,可以使使用者更加方便快捷的应用层次分析法。
2.1 软件算法流程
软件算法流程:开始→输入层数N→输入判别矩阵→一致性检验→(通过)输入准则层与方案层的关联→计算组合权向量→根据组合权向量决策→结束
注:若一致性检验不通过,则直接结束。
2.2 关键编程要点
2.2.1 写入txt文件
由于层次分析法需要处理很多矩阵,如果一个个输入会相对比较麻烦,我们采取单独的txt文件形式进行保存。将所有结果保存为txt文件。
关键代码如下:
string=get(handles.edit11,string);
[name,path]=uiputfile({‘*.txt’},’保存’);
str=[path name];
[nrows,~]=size(string);
fid=fopen(char(str),wt);
for row=1:nrows
fprintf(fid,%s\t\r\n,string {row,:});
end
fclose(fid);
2.2.2 写入数据
写入所有操作的数据,以便层次分析法操作。
关键代码如下:
function writejuzhen(juzhen, filename)
fid=fopen(filename,a);
leng=size(juzhen);
fprintf(fid,%c,[);
for i=1:leng(1)
for j=1:leng(2)
fprintf(fid,%d,juzhen(i,j));
if j~=leng(2)
fprintf(fid,%c,,);
end
end
if i~=leng(1)
fprintf(fid,%c,;);
end
end
fprintf(fid,%c\n,]);
原创力文档


文档评论(0)