当前位置:文档之家› 层次分析法C#代码

层次分析法C#代码

层次分析法C#代码
层次分析法C#代码

层次分析法Analitic Hierachy Process (AHP)

一、需求分析

问题举例

1. 在海尔、新飞、容声和雪花四个牌号的电冰箱中选购一种。要考虑品牌的信誉、冰箱的功能、价格和耗电量。

2. 在泰山、杭州和承德三处选择一个旅游点。要考虑景点的景色、居住的环境、饮食的特色、交通便利和旅游的费用。

3. 在基础研究、应用研究和数学教育中选择一个领域申报科研课题。要考虑成果的贡献(实用价值、科学意义),可行性(难度、周期和经费)和人才培养。

模型和方法

1. 层次结构模型的构造

步骤一:确定层次结构,将决策的目标、考虑的因素(决策准则)和决策对象按它们之间的相互关系分为最高层、中间层和最低层,绘出层次结构图。

最高层:决策的目的、要解决的问题。

最低层:决策时的备选方案。

中间层:考虑的因素、决策的准则。

对于相邻的两层,称高层为目标层,低层为因素层。

步骤二:通过相互比较,确定下一层各因素对上一层目标的影响的权重,将定性的判断定量化,即构造因素判断矩阵。

步骤三:由矩阵的特征值确定判别的一致性;由相应的特征向量表示各因素的影响权重,计算权向量。

步骤四:通过综合计算给出最底层(各方案)对最高层(总目标)影响的权重,权重最大的方案即为实现目标的最由选择。

2. 因素判断矩阵

比较n个因素y=(y1,y2,…,yn)对目标 z 的影响.

采用两两成对比较,用aij表示因素 yi与因素yj对目标z的影响程度之比。通常用数字 1~ 9及其倒数作为程度比较的标度,即九级标度法

xi/xj 相当较重要重要很重要绝对重要

aij 1 3 5 7 9

2, 4, 6, 8 居于上述两个相邻判断之间。

当aij > 1时,对目标 Z来说 xi 比 xj重要, 其数值大小表示重要的程度。同时必有 aji = 1/ aij 1,对目标 Z来说 xj比 xi 不重要,其数值大小表示不重要的程度。

称矩阵 A = ( aij )为因素判断矩阵。

因为 aij >0 且 aji =1/ aij 故称A = (aij )为正互反矩阵。

例. 选择旅游景点 Z:目标,选择景点 y:因素,决策准则

y1 费用,y2 景色,y3 居住,y4 饮食,y5 交通

3. 一致性与权向量

如果 aij ajk =aik i, j, k=1,2,…,n,则称正互反矩阵A具有一致性. 这表明对各个因素所作的两两比较是可传递的。

一致性互正反矩阵A=( aij )具有性质:

A的每一行(列)均为任意指定行(列)的正数倍数,因此 rank(A)=1.

A有特征值=n, 其余特征值均为零.

记A的对应特征值=n的特征向量为w=(w1 w2 ,…, wn)则 aij =wi wj-1

如果在目标z中n个因素y=(y1,y2,…,yn)所占比重分别为w=(w1 w2 ,…, wn),则 iwi =1, 且因素判断矩阵为 A=(wi wj-1) 。

因此,称一致性正互反矩阵A相应于特征值n的归一化特征向量为因素

y=(y1,y2,…,yn)对目标z的权向量

4. 一致性检验与因素排序

定理1: n阶正互反矩阵A是一致性的当且仅当其最大特征值为 n.

定理2: 正互反矩阵具有模最大的正实数特征值1, 其重数为1, 且相应特征向量为正向量.

为刻画n阶正互反矩阵A=( aij )与一致性接近的程度, 定义一致性指标(Consensus index) :

CI=(1-n)/(n-1)

CI = 0, A 有完全的一致性。CI 接近于 0, A 有满意的一致性。

Saaty又引入平均随机一致性指标RT

n 1 2 3 4 5 6 7 8 9

RI 0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 当CR = CI / RI < 0.1 时, 认为A 有满意的一致性。

此时取A 的相应于1 的归一化特征向量w=(w1 w2 ,…, wn)为因素

y=(y1,y2,…,yn)对目标z的权向量。由w=( w2 ,…, wn)分量wi的大小可以对因素的重要性排序。

择校排名

二、使用的知识要点

1.动态生成控件

三、主程序界面

四、主要程序段

动态生本控件,并加上相应所需要的方法:

//初始化文本框

private void Initextbox(int len,string[] str)

{

this.groupBox1.Controls.Clear();//清空不用的控件

TextBox mytextbox;//定义文本框

int x=this.groupBox1.Location.X+10;

int y=this.groupBox1.Location.Y+40;

for(int i = 0; i

{

Label mylabel = new Label();

mylabel.Text = str[i].ToString();

mylabel.Location = new Point(x+i*60,y-40);

mylabel.AutoSize = true;

this.groupBox1.Controls.Add(mylabel);

}

for(int i=0;i

{

for(int j=0;j

{

mytextbox = new TextBox();

mytextbox.Size = new System.Drawing.Size(60,20);

mytextbox.BackColor = Color.LightGoldenrodYellow;

https://www.doczj.com/doc/6818593968.html, = "mytextbox"+i+j;

mytextbox.Leave += new

System.EventHandler(this.textBox_mouseover); mytextbox.Location = new Point(x,y);

if(i==j)

{

mytextbox.BackColor = Color.Wheat;

mytextbox.Text = "1";

mytextbox.Enabled = false;

}

if(i

{

mytextbox.BackColor = SystemColors.ActiveBorder;

mytextbox.Enabled = false;

}

this.groupBox1.Controls.Add(mytextbox);

x+=60;

}

x=this.groupBox1.Location.X+10;

y+=20;

}

}

相应的方法:

//控制文本框

private void textBox_mouseover(object sender,System.EventArgs e)

{

TextBox temptextbox = (TextBox) sender;

string tempstr = https://www.doczj.com/doc/6818593968.html,.ToString();

if(temptextbox.Text.Trim() == "")

{

// MessageBox.Show("没有输入数字");

// temptextbox.Focus();

}

else

{

string i = tempstr.Substring(tempstr.Length-2,1);

string j = tempstr.Substring(tempstr.Length-1,1);

foreach(Control tempC in this.groupBox1.Controls)

{

if(tempC is TextBox)

{

if(https://www.doczj.com/doc/6818593968.html,.ToString() == "mytextbox"+j+i)

{

if(temptextbox.Text.ToString().Trim().IndexOf("/")> 0)

tempC.Text =

temptextbox.Text.ToString().Substring(temptextbox.Text.ToString().Trim().Len gth-1,1);

else if(temptextbox.Text.ToString().Trim()=="1")

tempC.Text = "1";

else

tempC.Text = "1/"+temptextbox.Text;

}

}

}

}

}//textBox_mouseover

获取第个文本框的值:

private void getdata(double[,] matrix)

{

foreach(Control tempC in this.groupBox1.Controls)

{

try

{

if(tempC is TextBox)

{

string tempstr = tempC.Text.ToString().Trim();

if(tempstr == "")

{

MessageBox.Show("有文本框没有填数据!");

return;

}

int i =

Convert.ToInt32(https://www.doczj.com/doc/6818593968.html,.ToString().Substring(https://www.doczj.com/doc/6818593968.html,.ToString().Length -2,1));

int j =

Convert.ToInt32(https://www.doczj.com/doc/6818593968.html,.ToString().Substring(https://www.doczj.com/doc/6818593968.html,.ToString().Length -1,1));

if(tempstr.IndexOf("/")>0)

{

matrix[i,j] =

Convert.ToDouble(tempstr.Substring(0,1))/Convert.ToDouble(tempstr.Substring( tempstr.Length-1,1));

}

else

matrix[i,j]=Convert.ToDouble(tempstr);

}

}

catch(Exception err)

{

MessageBox.Show(err.ToString());

}

}

}

五、所有程序代码

using System;

using System.Drawing;

using System.Collections;

using https://www.doczj.com/doc/6818593968.html,ponentModel;

using System.Windows.Forms;

namespace 经济管理模型

{

///

/// ccfx2 的摘要说明。

///

public class ccfx2 : System.Windows.Forms.Form

{

private static double[] RI = {0,0,0,0.58,0.90,1.12,1.24,1.32,1.41,1.45}; private Int32 LenA;//准则数

private System.Int32 LenB;//方案数

private double[,] zhuzematrix;//准则数方阵

private double[][,] fanganmatrix;//方案阵

private string[] zhuze;//准则字符串

private string[] fangan;//方案字符串

private int Stepcount=0;//录入矩阵的步骤

private double[] W;//单序w

private double[,] TW;//总序w

private double[] Torder;//总的方案排名

private double lamda;//单序最大lamda

private double[] Tlamda;//总序lamda

private System.Windows.Forms.GroupBox groupBox1;

private https://www.doczj.com/doc/6818593968.html,bel label5;

private System.Windows.Forms.Button button1;

private https://www.doczj.com/doc/6818593968.html,bel label1;

private https://www.doczj.com/doc/6818593968.html,bel label2;

private System.Windows.Forms.TextBox textBox1;

private System.Windows.Forms.TextBox textBox2;

private System.Windows.Forms.Button button2;

///

/// 必需的设计器变量。

///

private https://www.doczj.com/doc/6818593968.html,ponentModel.Container components = null;

public ccfx2()

{

//

// Windows 窗体设计器支持所必需的

//

InitializeComponent();

//

// TODO: 在 InitializeComponent 调用后添加任何构造函数代码

//

}

///

/// 清理所有正在使用的资源。

///

protected override void Dispose( bool disposing )

{

if( disposing )

{

if(components != null)

{

components.Dispose();

}

}

base.Dispose( disposing );

}

#region Windows 窗体设计器生成的代码

///

/// 设计器支持所需的方法 - 不要使用代码编辑器修改

/// 此方法的内容。

///

private void InitializeComponent()

{

this.groupBox1 = new System.Windows.Forms.GroupBox();

this.textBox2 = new System.Windows.Forms.TextBox();

this.textBox1 = new System.Windows.Forms.TextBox();

https://www.doczj.com/doc/6818593968.html,bel2 = new https://www.doczj.com/doc/6818593968.html,bel();

https://www.doczj.com/doc/6818593968.html,bel1 = new https://www.doczj.com/doc/6818593968.html,bel();

https://www.doczj.com/doc/6818593968.html,bel5 = new https://www.doczj.com/doc/6818593968.html,bel();

this.button1 = new System.Windows.Forms.Button();

this.button2 = new System.Windows.Forms.Button();

this.groupBox1.SuspendLayout();

this.SuspendLayout();

//

// groupBox1

//

this.groupBox1.Anchor =

((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.To p | System.Windows.Forms.AnchorStyles.Bottom)

| System.Windows.Forms.AnchorStyles.Left)

| System.Windows.Forms.AnchorStyles.Right)));

this.groupBox1.Controls.Add(this.textBox2);

this.groupBox1.Controls.Add(this.textBox1);

this.groupBox1.Controls.Add(https://www.doczj.com/doc/6818593968.html,bel2);

this.groupBox1.Controls.Add(https://www.doczj.com/doc/6818593968.html,bel1);

this.groupBox1.Location = new System.Drawing.Point(0, 8);

https://www.doczj.com/doc/6818593968.html, = "groupBox1";

this.groupBox1.Size = new System.Drawing.Size(616, 360);

this.groupBox1.TabIndex = 15;

this.groupBox1.TabStop = false;

//

// textBox2

//

this.textBox2.Anchor =

((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)

| System.Windows.Forms.AnchorStyles.Right)));

this.textBox2.BackColor = System.Drawing.Color.Ivory;

this.textBox2.Location = new System.Drawing.Point(128, 80);

https://www.doczj.com/doc/6818593968.html, = "textBox2";

this.textBox2.Size = new System.Drawing.Size(472, 20);

this.textBox2.TabIndex = 3;

this.textBox2.Text = "";

//

// textBox1

//

this.textBox1.Anchor =

((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)

| System.Windows.Forms.AnchorStyles.Right)));

this.textBox1.BackColor = System.Drawing.Color.Ivory;

this.textBox1.Location = new System.Drawing.Point(128, 48);

https://www.doczj.com/doc/6818593968.html, = "textBox1";

this.textBox1.Size = new System.Drawing.Size(472, 20);

this.textBox1.TabIndex = 2;

this.textBox1.Text = "";

this.textBox1.TextChanged += new

System.EventHandler(this.textBox1_TextChanged);

//

// label2

//

https://www.doczj.com/doc/6818593968.html,bel2.Location = new System.Drawing.Point(24, 80);

https://www.doczj.com/doc/6818593968.html, = "label2";

https://www.doczj.com/doc/6818593968.html,bel2.TabIndex = 1;

https://www.doczj.com/doc/6818593968.html,bel2.Text = "方案:";

//

// label1

//

https://www.doczj.com/doc/6818593968.html,bel1.Location = new System.Drawing.Point(24, 48);

https://www.doczj.com/doc/6818593968.html, = "label1";

https://www.doczj.com/doc/6818593968.html,bel1.TabIndex = 0;

https://www.doczj.com/doc/6818593968.html,bel1.Text = "准则:";

//

// label5

//

https://www.doczj.com/doc/6818593968.html,bel5.Anchor =

((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bot tom | System.Windows.Forms.AnchorStyles.Left)

| System.Windows.Forms.AnchorStyles.Right)));

https://www.doczj.com/doc/6818593968.html,bel5.AutoSize = true;

https://www.doczj.com/doc/6818593968.html,bel5.ForeColor = System.Drawing.Color.Red;

https://www.doczj.com/doc/6818593968.html,bel5.Location = new System.Drawing.Point(16, 384);

https://www.doczj.com/doc/6818593968.html, = "label5";

https://www.doczj.com/doc/6818593968.html,bel5.Size = new System.Drawing.Size(0, 16);

https://www.doczj.com/doc/6818593968.html,bel5.TabIndex = 16;

//

// button1

//

this.button1.Anchor =

((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bott om | System.Windows.Forms.AnchorStyles.Right)));

this.button1.Location = new System.Drawing.Point(456, 384);

https://www.doczj.com/doc/6818593968.html, = "button1";

this.button1.TabIndex = 17;

this.button1.Text = "下一步";

this.button1.Click += new System.EventHandler(this.button1_Click); //

// button2

//

this.button2.Anchor =

((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bott om | System.Windows.Forms.AnchorStyles.Right)));

this.button2.Location = new System.Drawing.Point(536, 384);

https://www.doczj.com/doc/6818593968.html, = "button2";

this.button2.TabIndex = 21;

this.button2.Text = "从例子获取";

this.button2.Click += new System.EventHandler(this.button2_Click); //

// ccfx2

//

this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);

this.ClientSize = new System.Drawing.Size(616, 421);

this.Controls.Add(this.button2);

this.Controls.Add(this.button1);

this.Controls.Add(https://www.doczj.com/doc/6818593968.html,bel5);

this.Controls.Add(this.groupBox1);

https://www.doczj.com/doc/6818593968.html, = "ccfx2";

this.Text = "层次分析法";

this.Load += new System.EventHandler(https://www.doczj.com/doc/6818593968.html,fx2_Load);

this.groupBox1.ResumeLayout(false);

this.ResumeLayout(false);

}

#endregion

private void ccfx2_Load(object sender, System.EventArgs e)

{

}

//初始化变量

private void InitValue()//

{

//录入准则字符串

this.zhuze = this.textBox1.Text.ToString().Trim().Split(',');

this.fangan = this.textBox2.Text.ToString().Trim().Split(','); this.LenA = zhuze.Length;

this.LenB = fangan.Length;

if(this.LenA !=5 || this.LenB != 3) this.button2.Visible = false; //==实例化各变量

this.zhuzematrix = new double[this.LenA,this.LenA];

this.fanganmatrix = new double[this.LenA][,];

for(int i = 0;i

this.fanganmatrix[i] = new double[LenB,LenB];

this.W = new double[LenA];

this.TW = new double[LenA,LenB];

this.Torder = new double[LenB];

this.Tlamda = new double[LenA];

//==

this.groupBox1.Controls.Clear();

https://www.doczj.com/doc/6818593968.html,bel5.Text="请输入准则层相对目标的判别矩阵";

}

//初始化文本框

private void Initextbox(int len,string[] str)

{

this.groupBox1.Controls.Clear();//清空不用的控件

TextBox mytextbox;//定义文本框

int x=this.groupBox1.Location.X+10;

int y=this.groupBox1.Location.Y+40;

for(int i = 0; i

{

Label mylabel = new Label();

mylabel.Text = str[i].ToString();

mylabel.Location = new Point(x+i*60,y-40);

mylabel.AutoSize = true;

this.groupBox1.Controls.Add(mylabel);

}

for(int i=0;i

{

for(int j=0;j

{

mytextbox = new TextBox();

mytextbox.Size = new System.Drawing.Size(60,20);

mytextbox.BackColor = Color.LightGoldenrodYellow;

https://www.doczj.com/doc/6818593968.html, = "mytextbox"+i+j;

mytextbox.Leave += new

System.EventHandler(this.textBox_mouseover);

mytextbox.Location = new Point(x,y);

if(i==j)

{

mytextbox.BackColor = Color.Wheat;

mytextbox.Text = "1";

mytextbox.Enabled = false;

}

if(i

{

mytextbox.BackColor = SystemColors.ActiveBorder; mytextbox.Enabled = false;

}

this.groupBox1.Controls.Add(mytextbox);

x+=60;

}

x=this.groupBox1.Location.X+10;

y+=20;

}

}

//控制文本框

private void textBox_mouseover(object sender,System.EventArgs e) {

TextBox temptextbox = (TextBox) sender;

string tempstr = https://www.doczj.com/doc/6818593968.html,.ToString();

if(temptextbox.Text.Trim() == "")

{

// MessageBox.Show("没有输入数字");

// temptextbox.Focus();

}

else

{

string i = tempstr.Substring(tempstr.Length-2,1);

string j = tempstr.Substring(tempstr.Length-1,1);

foreach(Control tempC in this.groupBox1.Controls)

{

if(tempC is TextBox)

{

if(https://www.doczj.com/doc/6818593968.html,.ToString() == "mytextbox"+j+i)

{

if(temptextbox.Text.ToString().Trim().IndexOf("/")> 0)

tempC.Text =

temptextbox.Text.ToString().Substring(temptextbox.Text.ToString().Trim().Len gth-1,1);

else if(temptextbox.Text.ToString().Trim()=="1")

tempC.Text = "1";

else

tempC.Text = "1/"+temptextbox.Text;

}

}

}

}

}//textBox_mouseover

//

private void mytextboxclear()

{

foreach(Control tempC in this.groupBox1.Controls)

{

if(tempC is TextBox)

{

string tempstr = tempC.Text.ToString().Trim();

int i =

Convert.ToInt32(https://www.doczj.com/doc/6818593968.html,.ToString().Substring(https://www.doczj.com/doc/6818593968.html,.ToString().Length -2,1));

int j =

Convert.ToInt32(https://www.doczj.com/doc/6818593968.html,.ToString().Substring(https://www.doczj.com/doc/6818593968.html,.ToString().Length -1,1));

if(i==j) tempC.Text = "1";

else tempC.Text = "";

}

}

}

private void vieworder()

{

int i,j;

int[] temp = new int[this.LenA];

for(i = 0;i < this.LenA;i++)

temp[i] = i;

for(i=0;i

for(j=i+1;j

if(this.W[temp[i]] < this.W[temp[j]])

{int t=temp[i];temp[i] = temp[j];temp[j]=t;}

string str="";

for(i=0;i

//str+=this.zhuze[temp[i]].ToString()+":

"+this.W[temp[i]].ToString();

{

Label templabel = new Label();

templabel.Text = this.zhuze[temp[i]].ToString()+":

"+this.W[temp[i]].ToString();

templabel.Location = new

Point(this.groupBox1.Location.X+10,this.groupBox1.Location.Y+i*20+40); templabel.AutoSize = true;

this.groupBox1.Controls.Add(templabel);//END 处理单序排序 }

//Label templabel = new Label();

//templabel.Text = str;

//templabel.Location = new

Point(this.groupBox1.Location.X+10,this.groupBox1.Location.Y+40);

//templabel.AutoSize = true;

//templabel.Width = 20*LenA;

//this.groupBox1.Controls.Add(templabel);//END 处理单序排序

for(j=0;j

for(i=0;i

Torder[j] +=W[i]*TW[i,j];

int[] Ttemp = new int[this.LenB];

for(i = 0;i < this.LenB;i++)

Ttemp[i] = i;

for(i=0;i

for(j=i+1;j

if(this.Torder[Ttemp[i]] < this.Torder[Ttemp[j]])

{int t=Ttemp[i];Ttemp[i] = Ttemp[j];Ttemp[j]=t;}

str="";

for(i=0;i

str+=this.fangan[Ttemp[i]].ToString()+":

"+this.Torder[Ttemp[i]].ToString()+"\t";

Label templabel2 = new Label();

templabel2.Text = str;

templabel2.Location = new

Point(this.groupBox1.Location.X+10,this.groupBox1.Location.Y+20*LenA+80);

templabel2.AutoSize = true;

this.groupBox1.Controls.Add(templabel2);//END 处理总序排序

}

private void getdata(double[,] matrix)

{

foreach(Control tempC in this.groupBox1.Controls)

{

try

{

if(tempC is TextBox)

{

string tempstr = tempC.Text.ToString().Trim();

if(tempstr == "")

{

MessageBox.Show("有文本框没有填数据!");

return;

}

int i =

Convert.ToInt32(https://www.doczj.com/doc/6818593968.html,.ToString().Substring(https://www.doczj.com/doc/6818593968.html,.ToString().Length -2,1));

int j =

Convert.ToInt32(https://www.doczj.com/doc/6818593968.html,.ToString().Substring(https://www.doczj.com/doc/6818593968.html,.ToString().Length -1,1));

if(tempstr.IndexOf("/")>0)

{

matrix[i,j] =

Convert.ToDouble(tempstr.Substring(0,1))/Convert.ToDouble(tempstr.Substring( tempstr.Length-1,1));

}

else

matrix[i,j]=Convert.ToDouble(tempstr);

}

}

catch(Exception err)

{

MessageBox.Show(err.ToString());

}

}

}

//例子数据

private void button2_Click(object sender, System.EventArgs e)

{

switch(this.Stepcount)

{

case 0:

this.textBox1.Text = "费用,名气,导师,课题,个人兴趣";

this.textBox2.Text = "清华,北大,北航";

break;

case 1:

string[,] temparr =

{{"1","2","7","5","5"},{"1/2","1","4","3","3"},{"1/7","1/4","1","1/2","1/3"} ,{"1/5","1/3","2","1","1"},{"1/5","1/3","3","1","1"}};

foreach(Control tempC in this.groupBox1.Controls)

{

try

{

if(tempC is TextBox)

{

string tempstr = tempC.Text.ToString().Trim(); int i =

Convert.ToInt32(https://www.doczj.com/doc/6818593968.html,.ToString().Substring(https://www.doczj.com/doc/6818593968.html,.ToString().Length -2,1));

int j =

Convert.ToInt32(https://www.doczj.com/doc/6818593968.html,.ToString().Substring(https://www.doczj.com/doc/6818593968.html,.ToString().Length -1,1));

tempC.Text = temparr[i,j];

}

}

catch(Exception err)

{

MessageBox.Show(err.ToString());

}

}

break;

case 2:

string[,] temparr1 =

{{"1","1/5","1/8"},{"5","1","1/3"},{"8","3","1"}};

foreach(Control tempC in this.groupBox1.Controls)

{

try

{

if(tempC is TextBox)

{

string tempstr = tempC.Text.ToString().Trim(); int i =

Convert.ToInt32(https://www.doczj.com/doc/6818593968.html,.ToString().Substring(https://www.doczj.com/doc/6818593968.html,.ToStri ng().Length -2,1));

int j =

Convert.ToInt32(https://www.doczj.com/doc/6818593968.html,.ToString().Substring(https://www.doczj.com/doc/6818593968.html,.ToString().Length -1,1));

tempC.Text = temparr1[i,j];

}

}

catch(Exception err)

{

MessageBox.Show(err.ToString());

}

}

break;

case 3:

string[,] temparr2 =

{{"1","2","5"},{"1/2","1","2"},{"1/5","1/2","1"}};

foreach(Control tempC in this.groupBox1.Controls)

{

try

{

if(tempC is TextBox)

{

string tempstr = tempC.Text.ToString().Trim(); int i =

Convert.ToInt32(https://www.doczj.com/doc/6818593968.html,.ToString().Substring(https://www.doczj.com/doc/6818593968.html,.ToString().Length -2,1));

int j =

Convert.ToInt32(https://www.doczj.com/doc/6818593968.html,.ToString().Substring(https://www.doczj.com/doc/6818593968.html,.ToString().Length -1,1));

tempC.Text = temparr2[i,j];

}

}

catch(Exception err)

{

MessageBox.Show(err.ToString());

}

}

break;

case 4:

string[,] temparr3 =

{{"1","1","3"},{"1","1","3"},{"1/3","1/3","1"}};

foreach(Control tempC in this.groupBox1.Controls)

{

try

{

if(tempC is TextBox)

{

string tempstr = tempC.Text.ToString().Trim(); int i =

Convert.ToInt32(https://www.doczj.com/doc/6818593968.html,.ToString().Substring(https://www.doczj.com/doc/6818593968.html,.ToString().Length -2,1));

int j =

Convert.ToInt32(https://www.doczj.com/doc/6818593968.html,.ToString().Substring(https://www.doczj.com/doc/6818593968.html,.ToString().Length -1,1));

tempC.Text = temparr3[i,j];

}

}

catch(Exception err)

{

MessageBox.Show(err.ToString());

}

}

break;

case 5:

string[,] temparr4 =

{{"1","3","4"},{"1/3","1","1"},{"1/4","1","1"}};

foreach(Control tempC in this.groupBox1.Controls)

{

try

{

if(tempC is TextBox)

{

string tempstr = tempC.Text.ToString().Trim(); int i =

Convert.ToInt32(https://www.doczj.com/doc/6818593968.html,.ToString().Substring(https://www.doczj.com/doc/6818593968.html,.ToString().Length -2,1));

int j =

Convert.ToInt32(https://www.doczj.com/doc/6818593968.html,.ToString().Substring(https://www.doczj.com/doc/6818593968.html,.ToString().Length -1,1));

tempC.Text = temparr4[i,j];

}

}

catch(Exception err)

{

MessageBox.Show(err.ToString());

}

}

break;

case 6:

string[,] temparr5 =

{{"1","1","1/4"},{"1","1","1/4"},{"4","4","1"}};

foreach(Control tempC in this.groupBox1.Controls)

{

try

{

if(tempC is TextBox)

{

string tempstr = tempC.Text.ToString().Trim(); int i =

Convert.ToInt32(https://www.doczj.com/doc/6818593968.html,.ToString().Substring(https://www.doczj.com/doc/6818593968.html,.ToString().Length -2,1));

int j =

Convert.ToInt32(https://www.doczj.com/doc/6818593968.html,.ToString().Substring(https://www.doczj.com/doc/6818593968.html,.ToString().Length -1,1));

tempC.Text = temparr5[i,j];

}

}

catch(Exception err)

{

MessageBox.Show(err.ToString());

}

}

break;

default:

break;

}

}

private void button1_Click(object sender, System.EventArgs e)

{

if(this.button1.Text=="计算结果")

{

this.vieworder();

return;

}

if(this.Stepcount == 0)

{

this.InitValue();

this.Initextbox(this.LenA,this.zhuze);

this.Stepcount++;

return;

}

if(this.Stepcount == 1)

{

foreach(Control tempC in this.groupBox1.Controls)//录入数据

{

try

{

if(tempC is TextBox)

{

string tempstr = tempC.Text.ToString().Trim();

if(tempstr == "")

{

MessageBox.Show("有文本框没有填数据!");

return;

}

int i =

Convert.ToInt32(https://www.doczj.com/doc/6818593968.html,.ToString().Substring(https://www.doczj.com/doc/6818593968.html,.ToString().Length -2,1));

int j =

Convert.ToInt32(https://www.doczj.com/doc/6818593968.html,.ToString().Substring(https://www.doczj.com/doc/6818593968.html,.ToString().Length -1,1));

if(tempstr.IndexOf("/")>0)

{

this.zhuzematrix[i,j] =

Convert.ToDouble(tempstr.Substring(0,1))/Convert.ToDouble(tempstr.Substring( tempstr.Length-1,1));

}

else

this.zhuzematrix[i,j]=Convert.ToDouble(tempstr); }

}

catch(Exception err)

{

MessageBox.Show(err.ToString());

}

}//foreach

//计算W

for(int i=0;i

this.W[i]=1;

for(int j=0;j

{

for(int i=0;i

this.W[j]*=this.zhuzematrix[j,i];

//

//W[j]=Math.Pow(W[j],1/LenA);

W[j]=Math.Exp(Math.Log(W[j])/LenA);

}

double Tt = 0;

for(int i=0;i

Tt+=W[i];

for(int i=0;i

W[i]=W[i]/Tt;

https://www.doczj.com/doc/6818593968.html,mda = 0;

for(int j=0;j

{

for(int i=0;i

https://www.doczj.com/doc/6818593968.html,mda += this.zhuzematrix[j,i]*W[i]/W[j]; }

https://www.doczj.com/doc/6818593968.html,mda /=LenA;

//MessageBox.Show(https://www.doczj.com/doc/6818593968.html,mda.ToString());

if(((https://www.doczj.com/doc/6818593968.html,mda-LenA)/(LenA-1)) > RI[LenA]*0.1)

{

MessageBox.Show("不符合一致性!");

return;

}

this.Initextbox(this.LenB,this.fangan);

//this.mytextboxclear();

https://www.doczj.com/doc/6818593968.html,bel5.Text = "请输入方案层相对准则层

"+this.zhuze[Stepcount-1]+" 的判别矩阵";

this.Stepcount++;

if(this.Stepcount==this.LenA+2)

{

this.button1.Enabled = false;

this.button2.Visible = false;

}

return;

}//结束对第一步1的特殊处理

foreach(Control tempC in this.groupBox1.Controls)//录入数据 {

try

层次分析法及matlab程序

层次分析法建模 层次分析法(AHP-Analytic Hierachy process)---- 多目标决策方法 70 年代由美国运筹学家T·L·Satty提出的,是一种定性与定量分析相结合的多目标决策分析方法论。吸收利用行为科学的特点,是将决策者的经验判断给予量化,对目标(因素)结构复杂而且缺乏必要的数据情况下,採用此方法较为实用,是一种系统科学中,常用的一种系统分析方法,因而成为系统分析的数学工具之一。 传统的常用的研究自然科学和社会科学的方法有: 机理分析方法:利用经典的数学工具分析观察的因果关系; 统计分析方法:利用大量观测数据寻求统计规律,用随机数学方法描述(自然现象、 社会现象)现象的规律。 基本内容:(1)多目标决策问题举例AHP建模方法 (2)AHP建模方法基本步骤 (3)AHP建模方法基本算法 (3)AHP建模方法理论算法应用的若干问题。 参考书: 1、姜启源,数学模型(第二版,第9章;第三版,第8章),高等教育出版社 2、程理民等,运筹学模型与方法教程,(第10章),清华大学出版社 3、《运筹学》编写组,运筹学(修订版),第11章,第7节,清华大学出版社 一、问题举例: A.大学毕业生就业选择问题 获得大学毕业学位的毕业生,“双向选择”时,用人单位与毕业生都有各自的选择标准和要求。就毕业生来说选择单位的标准和要求是多方面的,例如: ①能发挥自己的才干为国家作出较好贡献(即工作岗位适合发挥专长); ②工作收入较好(待遇好); ③生活环境好(大城市、气候等工作条件等); ④单位名声好(声誉-Reputation); ⑤工作环境好(人际关系和谐等) ⑥发展晋升(promote, promotion)机会多(如新单位或单位发展有后劲)等。 问题:现在有多个用人单位可供他选择,因此,他面临多种选择和决策,问题是他将如何作出决策和选择?——或者说他将用什么方法将可供选择的工作单位排序?

层次分析法实现代码(MATLAB)

%% AHP weight calculation %%data input clc clear all A =[1 3 5 7 9 5;1/3 1 3 9 3 3;1/5 1/3 1 3 3 1/3;1/7 1/9 1/3 1 5 1/3;1/9 1/3 1/3 1/5 1 1/3;1/5 1/3 1 3 3 1]; %%Consistency calculation and weight vector calculation [n,n] = size(A); [v,d] = eig(A); r = d(1,1); CI = (r-n)/(n-1); RI = [0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.52 1.54 1.56 1.58 1.59]; CR = CI/RI(n); if CR<0.10 CR_Result = 'pass'; else CR_Result = 'no pass'; end % % Weight vector calculation w = v(:,1)/sum(v(:,1));

w = w'; % % output disp('The judgment matrix weight vector calculation report:'); disp('coincidence indicator:');disp(num2str(CI)); disp('Consistency ratio:');disp(num2str(CR)); disp(' Consistency test results:');disp(CR_Result); disp('eigenvalue:');disp(num2str(r)); disp('weight vector:');disp(num2str(w));

层次分析法matlab程序

disp('请输入判断矩阵A(n阶)'); A=input('A='); [n,n]=size(A); x=ones(n,100); y=ones(n,100); m=zeros(1,100); m(1)=max(x(:,1)); y(:,1)=x(:,1); x(:,2)=A*y(:,1); m(2)=max(x(:,2)); y(:,2)=x(:,2)/m(2); p=0.0001;i=2;k=abs(m(2)-m(1)); while k>p i=i+1; x(:,i)=A*y(:,i-1); m(i)=max(x(:,i)); y(:,i)=x(:,i)/m(i); k=abs(m(i)-m(i-1)); end a=sum(y(:,i)); w=y(:,i)/a; t=m(i); disp(w);disp(t); %以下是一致性检验 CI=(t-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); if CR<0.10 disp('此矩阵的一致性可以接受!'); disp('CI=');disp(CI); disp('CR=');disp(CR); end function AHPInit1(x,y) %层次分析的初始化 %默认只有两层x为准则数,y为方案数 %CToT为准则对目标生成的比较阵 %EigOfCri为准则层的特征向量 %EigOfOpt为选项层的特征向量 EigOfCri=zeros(x,1);%准则层的特征向量 EigOfOpt=zeros(y,x); dim=x;%维度 RI=[0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51];%RI标准%生成成对比较阵 for i=1:dim CToT(i,:)=input('请输入数据:'); end CToT %输出 pause, tempmatrix=zeros(x+1);

基于Matlab的层次分析法及其运用浅析

基于Matlab的层次分析法及其运用浅析 本文通过使用Matlab软件进行编程,在满足同一层次中各指标对所有的下级指标均产生影响的假定条件下,实现了层次分析法的分析运算。本程序允许用户自由设定指标层次结构内的层次数以及各层次内的指标数,通过程序的循环,用户只需输入判断矩阵的部分数据,程序可依据层次分析法的计算流程进行计算并作出判断。本程序可以方便地处理层次分析法下较大的运算量,解决层次分析法的效率问题,提高计算机辅助决策的时效性。 标签:Matlab层次分析法判断矩阵决策 在当前信息化、全球化的大背景下,传统的手工计算已不能满足人们高效率、高准确度的决策需求。因此计算机辅助决策当仁不让地成为了管理决策的新工具、新方法。基于此,本文在充分发挥计算机强大运算功能的基础上,选用美国MathWorks公司的集成数学建模環境Matlab R2009a作为开发平台,使用M语言进行编程,对计算机辅助决策在层次分析法中的运用进行讨论。试图通过程序实现层次分析法在计算机系统上的运用,为管理决策探索出新的道路。 1 层次分析法的计算流程 根据层次分析法的相关理论,层次分析法的基本思想是将复杂的决策问题进行分解,得到若干个下层指标,再对下层指标进行分解,得到若干个再下层指标,如此建立层次结构模型,然后根据结构模型构造判断矩阵,进行单排序,最后,求出各指标对应的权重系数,进行层次总排序。 1.1 构造层次结构模型在进行层次分析法的分析时,最主要的步骤是建立指标的层次结构模型,根据结构模型构造判断矩阵,只有判断矩阵通过了一致性检验后,方可进行分析和计算。其中,结构模型可以设计成三个层次,最高层为目标层,是决策的目的和要解决的问题,中间层为决策需考虑的因素,是决策的准则,最低层则是决策时的备选方案。一般来讲,准则层中各个指标的下级指标数没有限制,但在本文中设计的程序尚且只能在各指标具有相同数量的下级指标的假定下,完成层次分析法的分析,故本文后文选取的案例也满足这一假定。 1.2 建立判断矩阵判断矩阵是表示本层所有因素针对上一层某一个因素的相对重要性的比较给判断矩阵的要素赋值时,常采用九级标度法(即用数字1到9及其倒数表示指标间的相对重要程度),具体标度方法如表1所示。 1.3 检验判断矩阵的一致性由于多阶判断的复杂性,往往使得判断矩阵中某些数值具有前后矛盾的可能性,即各判断矩阵并不能保证完全协调一致。当判断矩阵不能保证具有完全一致性时,相应判断矩阵的特征根也将发生变化,于是就可以用判断矩阵特征根的变化来检验判断的一致性程度。在层次分析法中,令判断矩阵最大的特征值为λmax,阶数为n,则判断矩阵的一致性检验的指标记为:

Matlab求解层次分析法程序代码【求解步骤+代码】

层次分析法 1)建立层次结构模型: (2)构造判断矩阵 判断矩阵() ij A a =应为正互反矩阵,而且ij a 的判断如下(1~9尺度法): (3)单层排序及一致性检验 1、单层排序 求解判断矩阵A 的最大特征值max λ,再由最大特征值求出对应的特征向量

ω()max A ωλω=,并将ω标准化,即为同一层相对于上一层某一因素的权重,根据此 权重的大小,便可确定该层因素的排序。

2、一致性检验 取一致性指标max 1 n CI n λ-= -,(n 为A 的阶数) 令CR RI = ,若0.1CR <,则认为A 具有一致性。 否则,需要对A 进行调整,直到具有满意的一致性为止。 (4)层次总排序及一致性检验 假定准则层12,,,n C C C 排序完成,其权重分别为12,, ,n a a a ,方案层P 包含m 个方 案:12,, ,m P P P 。其相对于上一层的()1,2, ,j C j n =对方案层P 中的m 个方案进行单层排序,其排序权重记为12,,,j j mj b b b ()1,2, ,j n =,则方案层P 中第i 个方案Pi 的总 排序权重为 1 n j ij j a b =∑,见下表: 从而确定层的排序。 例: 纯文本文件txt3.txt 中的数据格式如下: 1 1 1 4 1 1/ 2 1 1 2 4 1 1/2 1 1/2 1 5 3 1/2 1/ 4 1/4 1/ 5 1 1/3 1/3 1 1 1/3 3 1 1 2 2 2 3 3 1 1 1/4 1/2

4 1 3 2 1/ 3 1 1 1/4 1/5 4 1 1/2 5 2 1 1 3 1/3 1/3 1 1/7 3 7 1 1 1/3 5 3 1 7 1/5 1/7 1 1 1 7 1 1 7 1/7 1/7 1 1 7 9 1/7 1 1 1/9 1 1 matlab程序: >> fid=fopen('txt3.txt','r'); n1=6;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);

层次分析法具体应用及实例

层次分析法步骤与实例 1 层次分析法的思想:将所有要分析的问题层次化;根据问题的性质和所要到达的总目标,将问题分为不同的组成因素,并按照这些因素间的关联影响即其隶属关系,将因素按不同层次聚集组合,形成一个多层次分析结构模型;最后,对问题进行优劣比较排序. 2 次分析法的步骤:

3 以一个具体案例进行说明: 【案例分析】市政工程项目建设决策:层次分析法问题提出 市政部门管理人员需要对修建一项市政工程项目进行决策,可选择的方案是修建通往旅游区的高速路(简称建高速路)或修建城区地铁(简称建地铁)。除了考虑经济效益外,还要考虑社会效益、环境效益等因素,即是多准则决策问题,考虑运用层次分析法解决。 【案例分析】市政工程项目进行决策:建立递阶层次结构 在市政工程项目决策问题中,市政管理人员希望通过选择不同的市政工程项目,使综合效益最高,即决策目标是“合理建设市政工程,使综合效益最高”。 为了实现这一目标,需要考虑的主要准则有三个,即经济效益、社会效益和环境效益。但问题绝不这么简单。通过深入思考,决策人员认为还必须考虑直接经济效益、间接经济效益、方便日常出行、方便假日出行、减少环境污染、改善城市面貌等因素(准则),从相互关系上分析,这些因素隶属于主要准则,因此放在下一层次考虑,并且分属于不同准则。 假设本问题只考虑这些准则,接下来需要明确为了实现决策目标、在上述准则下可以有哪些方案。根据题中所述,本问题有两个解决方案,即建高速路或建地铁,这两个因素作为措施层元素放在递阶层次结构的最下层。很明显,这两个方案于所有准则都相关。 将各个层次的因素按其上下关系摆放好位置,并将它们之间的关系用连线连接起来。同时,为了方便后面的定量表示,一般从上到下用A 、B 、C 、D 。。。代表不同层次,同一层次从左到右用1、2、3、4。。。代表不同因素。这样构成的递阶层次结构如下图。 目标层A 准则层B 准则层C 措施层D 图1 递阶层次结构示意图

AHP层次分析法详细讲解

AHP层次分析法详细讲解 。它是一种定性和定量相结合的、系统化、层次化的分析方法。由于它在处理复杂的决策问题上的实用性和有效性很快在世界范围得到重视。它的应用已遍及经济计划和管理、能源政策和分配、行为科学、军事指挥、运输、农业、教育、人才、医疗和环境等领域。 层次分析法的基本思路与人对一个复杂的决策问题的思维、判断过程大体上是一样的。不妨用假期旅游为例假如有3个旅游胜地A、B、C供你选择你会根据诸如景色、费用和居住、饮食、旅途等一些准则去反复比较这3个候选地点首先你会确定这些准则在你的心目中各占多大比重如果你经济宽绰、醉心旅游自然分别看重景色而平素俭朴或手头拮据的人则会优先考虑费用中老年旅游者还会对居住、饮食等寄以较大关注。其次你会就每一个准则将3个地点进行对比譬如A 景色最好B次之B费用最低C次之C居住等较好等等。最后你要将这两个层次的比较判断进行综合在A、B、C中确定哪个作为最佳地点。 层次分析法的基本步骤 1、建立层次结构模型。在深入分析实际问题的基础上将有关的各个因素按照不同属性自上而下 2 / 8 AHP指南-层次分析法详解地分解成若干层次同一层的诸因素从属于上一层的因素或对上层因素有影响同时又支配下一层的因素或受到下层因素的作用。最上层为目标层通常只有1个因素最下层通常为方案或对象层中间可以有一个或几个层次通常为准则或指标层。当准则过多时譬如多于9个应进一步分解出子准则层。 2、构造成对比较阵。从层次结构模型的第2层开始对于从属于或影响上一层每个因素的同一层诸因素用成对比较法和1—9比较尺度构追成对比较阵直到最下层。 3、计算权向量并做一致性检验。对于每一个成对比较阵计算最大特征根及对应特征向量利用一致性指标、随机一致性指标和一致性比率做一致性检验。若检验通过特征向量归一化后即为权向量若不通过需重新构追成对比较阵。 4、计算组合权向量并做组合一致性检验。计算最下层对目标的组合权向量并根据公式做组合一致性检验若检验通过则可按照组合权向量表示的结果进行决策否则需要重新考虑模型或重新构造那些一致性比率较大的成对比较阵。 层次分析法的优点运用层次分析法有很多优点其中最重要的一点就是简单明了。层次分析法不仅适用于存在不确定性和主观信息的情况还允许以合乎逻辑的方式运用经验、洞察力和直觉。也许层次分析法最大的优点是提出了层次本身它使得买方能够认真地考虑和衡量指标的相对重要性。 建立层次结构模型将问题包含的因素分层最高层解决问题的目的中间层实现总目标而采取的各种措施、必须考虑的准则等。也可称策略层、约束层、准则层等最低层用于解决问题的各种措施、方案等。把各种所要考虑的因素放在适当的层次内。用层次结构图清晰地表达这些因素的关系。 〔例1〕购物模型某一个顾客选购电视机时对市场正在出售的四种电视机考虑了八项准则作为评估依据建立层次分析模型如下 3 / 8 AHP指南-层次分析法详解〔例2〕选拔干部模型对三个干部候选人y1、y2 、y3按选拔干部的五个标准品德、才能、资历、年龄和群众关系构成如下层次分析模型假设有三个干部候选人y1、y2 、y3按选拔干部的五个标准品德才能资历年龄和群众关系构成如下层次分析模型构造成对比较矩阵比较第 i 个元素与第 j 个元素相对上一层某个因素的重要性时使用数量化的相对权重aij来描述。设共有 n 个元素参与比较则称为成对比较矩阵。

层次分析法matlab程序举例

层次分析法程序举例: A=[1 1/7 1/5 2 4 1/3;7 1 3 5 5 3;5 1/3 1 5 5 3;1/2 1/3 1/5 1 2 1/3;1/4 1/5 1/5 1/2 1 1/5;3 1/3 1/3 3 5 1]; [v,d]=eig(A); eigenvalue=diag(d); lamda=max(eigenvalue); cil=(lamda-6)/5; crl=cil/1.26; w1=v(:,1)/sum(v(:,1)) 挑选合适的工作。经双方恳谈,已有三个单位表示愿意录用某毕业生。该生根据已有信息建立了一个层次结构模型,如下图所示。 程序: A=[1 1/7 1/5 2 4 1/3;7 1 3 5 5 3;5 1/3 1 5 5 3;1/2 1/3 1/5 1 2 1/3;1/4 1/5 1/5 1/2 1 1/5;3 1/3 1/3 3 5 1]; [v,d]=eig(A); eigenvalue=diag(d); lamda=max(eigenvalue); ci=(lamda-6)/5

cr=ci/1.26 w1=v(:,1)/sum(v(:,1)) B1=[1 1/4 1/2;4 1 3;2 1/3 1]; [v,d]=eig(B1); eigenvalue=diag(d); lamda=max(eigenvalue); cil1=(lamda-3)/2 cr1=cil1/0.52 b1w=v(:,1)/sum(v(:,1)) B2=[1 1/4 1/5;4 1 1/2;5 2 1]; [v,d]=eig(B2); eigenvalue=diag(d); lamda=max(eigenvalue); cil2=(lamda-3)/2 cr2=cil2/0.52 b2w=v(:,1)/sum(v(:,1)) B3=[1 1/2 2; 2 1 3;1/2 1/3 1]; [v,d]=eig(B3); eigenvalue=diag(d);

层次分析法的应用实例汇总

第二节 层次分析法的应用实例 设某港务局要改善一条河道的过河运输条件,要确定是否建立桥梁或隧道以代替现在的轮渡。 此问题可得到两个层次结构:过河效益层次结构和过河代价层次结构;由图5-3(a)和(b)分别表示。 例 过河的代价与效益分析。 (a) 过河效益层次结构 (b) 过河代价层次结构 图5-3 过河的效益与代价层次结构图 过河的效益 A 过河的效益 2B 经济效益 1B 过河的效益 3B 隧 道 2D 桥 梁 1D 渡 船 3D 美化 11 C 进出方便 10 C 舒适 9 C 自豪感 8 C 交往沟通 7C 安全可靠 6 C 建筑就业 5 C 当地商业4C 岸间商业3C 收入2C 节省时间1 C 过河的代价 A 社会代价 2B 经济代价 1B 环境代价 3B 隧 道 2D 桥 梁 1D 渡 船 3D 对生态的污染 9 C 对水的污染 8 C 汽车的排放物 7 C 居民搬迁 6 C 交往拥挤 5C 安全可靠 4 C 冲击渡船业 3 C 操作维护 2 C 投入资金 1 C

关于效益的各个判断矩阵如表5-9—表5-23所示。 表5-9 表5-10 表5-11 表5-12 表5-13 表5-14 表5-15 表5-16

表5-17 表5-18 表 5-19 表 5-20 表5-21 表5-22 表 5-23 这样我们得到方案关于效益的合成顺序为 T )07.0 ,36.0 ,57.0()4(=益ω 效益层次模型的整体一致性比例C.R.(4)<0.1(最后一个矩阵的一致性较差,但因

层次分析法计算权重在matlab中的实现

信息系统分析与设计作业 层次分析法确定绩效评价权重在matlab中的实现 小组成员:孙高茹、王靖、李春梅、郭荣1 程序简要概述 编写程序一步实现评价指标特征值lam、特征向量w以及一致性比率CR的求解。 具体的操作步骤是:首先构造评价指标,用专家评定法对指标两两打分,构建比较矩阵,继而运用编写程序实现层次分析法在MATLAB中的应用。 通过编写MATLAB程序一步实现问题求解,可以简化权重计算方法与步骤,减少工作量,从而提高人力资源管理中绩效考核的科学化电算化。 2 程序在matlab中实现的具体步骤 function [w,lam,CR] = ccfx(A) %A为成对比较矩阵,返回值w为近似特征向量 % lam为近似最大特征值λmax,CR为一致性比率 n=length(A(:,1)); a=sum(A); B=A %用B代替A做计算 for j=1:n %将A的列向量归一化 B(:,j)=B(:,j)./a(j); end s=B(:,1); for j=2:n s=s+B(:,j); end c=sum(s);%计算近似最大特征值λmax w=s./c; d=A*w lam=1/n*sum((d./w)); CI=(lam-n)/(n-1);%一致性指标 RI=[0,0,0.58,0.90,1.12,1.24,1.32,1.41,1.45,1.49,1.51];%RI为随机一致

性指标 CR=CI/RI(n);%求一致性比率 if CR>0.1 disp('没有通过一致性检验'); else disp('通过一致性检验'); end end 3 案例应用 我们拟构建公司员工绩效评价分析权重,完整操作步骤如下: 3.1构建的评价指标体系 我们将影响员工绩效评定的指标因素分为:打卡、业绩、创新、态度与品德。 3.2专家打分,构建两两比较矩阵 A = 1.0000 0.5000 3.0000 4.0000 2.0000 1.0000 5.0000 3.0000 0.3333 0.2000 1.0000 2.0000 0.2500 0.3333 0.5000 1.0000 3.3在MATLAB中运用编写好的程序实现 直接在MATLAB命令窗口中输入 [w,lam,CR]=ccfx(A) 继而直接得出 d = 1.3035 2.0000 0.5145 0.3926 w = 0.3102 0.4691 0.1242 0.0966 lam =4.1687

层次分析法的MATLAB实现(20210228092712)

MATLAB教程网 第八章层次分析法 层次分析法(Analytic Hierarchy Process,简称AHP )是对一些较为复杂、较为模糊的问题作出决策的简易方法,它特别适用于那些难于完全定量分析的问题。它是美国运筹学家T. L. Saaty 教授于70年代初期提出的一种简便、灵活而又实用的多准则决策方法。 MATLAB教程网 § 1层次分析法的基本原理与步骤 人们在进行社会的、经济的以及科学管理领域问题的系统分析中,面临的常常是一个由相互关联、相互制约的众多因素构成的复杂而往往缺少定量数据的系统。层次分析法为这类问题的决策和排序提供了一种新的、简洁而实用的建模方法。 运用层次分析法建模,大体上可按下面四个步骤进行: (i)建立递阶层次结构模型; (ii)构造出各层次中的所有判断矩阵; (iii)层次单排序及一致性检验; (iv)层次总排序及一致性检验。 下面分别说明这四个步骤的实现过程。 1.1递阶层次结构的建立与特点 应用AHP分析决策问题时,首先要把问题条理化、层次化,构造出一个有层次的结构模型。在这个模型下,复杂问题被分解为元素的组成部分。这些元素又按其属性及关系形成若干层次。上一层次的元素作为准则对下一层次有关元素起支配作用。这些层次可以分为三类: (i)最高层:这一层次中只有一个元素,一般它是分析问题的预定目标或理想结果,因此也称为目标层。 (ii )中间层:这一层次中包含了为实现目标所涉及的中间环节,它可以由若干个层次组成,包括所需考虑的准则、子准则,因此也称为准则层。 (iii )最底层:这一层次包括了为实现目标可供选择的各种措施、决策方案等,因此也称为措施层或方案层。 递阶层次结构中的层次数与问题的复杂程度及需要分析的详尽程度有关,一般地层次数不受限制。每一层次中各元素所支配的元素一般不要超过9个。这是因为支配 的元素过多会给两两比较判断带来困难。 下面结合一个实例来说明递阶层次结构的建立。 例1假期旅游有R、F2、F3 3个旅游胜地供你选择,试确定一个最佳地点。在此问题中,你会根据诸如景色、费用、居住、饮食和旅途条件等一些准则去反复比较3个侯选地点。可以建立如下的层次结构模型。 目标层0 选择旅游地

模糊层次分析法的Matlab实现

一、引言 层析分析法是将定量与定性相结合的多目标决策法,是一种使用频率很高的方法,在经济管理、城市规划等许多领域得到了广泛应用。由于其结果受主观思维的影响较大,许多科研工作者对其进行了深入的研究,将模糊理论与层次分析法相结合,提出了模糊层次分析法。为克服层次分析法中判断矩阵的一致性与人类思维的一致性存在的显著差异,文献[1-2]引入了模糊一致矩阵。为解决解的精度及收敛问题,文献[3-4]引入幂法来求排序向量。运用模糊层次分析法研究实际问题时,常采用迭代法来得到精度更高的排序向量,这就要求选择合适的初始值并通过大量的计算,为此,文中利用三种方法计算了初始排序向量,并给出了算法的Matlab程序,最后通过实例说明。 二、模糊层次分析法 为解决AHP种所存在的问题,模糊层次分析法引入模糊一致矩阵,无需再进行一致性检验,同时使用幂法来计算排序向量,可以减少迭代齿数,提高收敛速度,满足计算精度的要求.具体步骤: 1.构造优先关系矩阵 采用0.1~0.9标度[2],建立优先判断矩阵 2.将优先关系矩阵转化为模糊一致矩阵 3.计算排序向量 (1)和行归一法: (2)方根法: (3)利用排序法: (4)利用幂法[5-6]求精度更高的排序向量: 否则,继续迭代。 三、模糊层次分析法的程序实现 给出模糊层次分析法的Matlab程序。 clear; clc; E=input('输入计算精度e:') Max=input('输入最大迭代次数Max:')

F=input('输入优先关系矩阵F:'); %计算模糊一致矩阵 N=size(F); r=sum(F'); for i=1:N(1) for j=1:N(2) R(i,j)=(r(i)-r(j))/(2*N(1))+0.5; end end E=R./R'; % 计算初始向量---------- % W=sum(R')./sum(sum(R)); % 和行归一法 %--------------------------------------------------------- for i=1:N(1) S(i)=R(i,1); for j=2:N(2) S(i)=S(i)*R(i,j); end end S=S^(1/N(1)); W = S./sum(S);%方根法%-------------------------------------------------------- % a=input('参数a=?'); %W=sum(R')/(N(1)*a)-1/(2*a)+1/N(1); %排序法 % 利用幂法计算排序向量----V(:,1)=W'/max(abs(W)); %归一化 for i=1:Max V(:,i+1)=E*V(:,i); V(:,i+1)=V(:,i+1)/max(abs(V(:,i+1))); if max(abs(V(:,i+1)-V(:,i)))k=i; A=V(:,i+1)./sum(V(:,i+1)); break Else End End 四、计算实例

MatLab层次分析法代码

>> A= [1 2 5 6 4 7 2 4;1/2 1 2 4 2 7 1 2; 1/5 1/2 1 5 1 5 1/2 2 ; 1/6 1/4 1/5 1 1/3 3 1/2 1/4 ;1/4 1/2 1 3 1 5 1 2;1/7 1/7 1/5 1/3 1/5 1 1/7 1/5;1/2 1 2 2 1 7 1 2;1/4 1/2 1/2 4 1/2 5 1/2 1]; >> d=eig(A) %求全部特征值所组成的向量 >> [V,D]=eig(A) %求特征值及特征向量所组成的矩阵 >> A= [1 2 5 6 4 7 2 4;1/2 1 2 4 2 7 1 2; 1/5 1/2 1 5 1 5 1/2 2 ;1/6 1/4 1/5 1 1/3 3 1/2 1/4 ;1/4 1/2 1 3 1 5 1 2;1/7 1/7 1/5 1/3 1/5 1 1/7 1/5;1/2 1 2 2 1 7 1 2;1/4 1/2 1/2 4 1/2 5 1/2 1]; d=eig(A) %求全部特征值所组成的向量 [V,D]=eig(A) %求特征值及特征向量所组成的矩阵 d = 8.4243 -0.0020 + 1.7077i -0.0020 - 1.7077i -0.1240 + 0.7030i -0.1240 - 0.7030i -0.1103 + 0.3207i -0.1103 - 0.3207i 0.0483 V = Columns 1 through 7 0.7427 0.8569 0.8569 0.7153 0.7153 0.7100 0.7100 0.3893 0.1636 + 0.0231i 0.1636 - 0.0231i 0.1747 - 0.0500i 0.1747 + 0.0500i -0.2144 + 0.4572i -0.2144 - 0.4572i 0.2579 -0.0614 + 0.3195i -0.0614 - 0.3195i -0.0739 - 0.0916i -0.0739 + 0.0916i -0.1506 - 0.0176i -0.1506 + 0.0176i 0.0985 -0.0976 - 0.0879i -0.0976 + 0.0879i 0.0679 + 0.0635i 0.0679 - 0.0635i 0.0183 + 0.0558i 0.0183 - 0.0558i 0.2588 0.0176 + 0.1232i 0.0176 - 0.1232i 0.0227 + 0.3409i 0.0227 - 0.3409i -0.0373 - 0.2293i -0.0373 + 0.2293i 0.0519 0.0080 - 0.0585i 0.0080 + 0.0585i -0.0134 - 0.0662i -0.0134 + 0.0662i -0.0507 - 0.0850i -0.0507 + 0.0850i 0.3352 0.1943 - 0.0809i 0.1943 + 0.0809i -0.4321 + 0.2823i -0.4321 - 0.2823i 0.1131 + 0.3427i 0.1131 - 0.3427i

Matlab笔记_层次分析法020

20. 层次分析法 一、概述 层次分析法(Analytic Hierarchy Process, AHD)是将要决策的问题及其有关因素分解成目标、准则、方案等层次,进而进行定性和定量分析的决策方法。它的特征是合理地将定性与定量决策结合起来,按照思维、心理的规律把决策过程细致化(层次化、数量化)。 层次分析法广泛地应用到处理复杂的决策问题,而决策是基于该方法计算出的权重,所以也常用来确定指标的权重。 层次分析法的基本思路与人们对一个决策问题的思维、判断过程大体上是一样的。例如,选购一台笔记本电脑,假设有三种不同品牌款式的笔记本电脑A、B、C供选择。我们一般会根据价格、外观、重量、用途、功耗、品牌等一些准则去反复比较这个三个候选。首先,会确定这些准则在自己心目中各占多大比重,不同的人这种比重会有很大差异(喜欢玩游戏的人看重硬件性能和散热、预算有限的人看重价格等)。其次,还会就每一个准则将A、B、C进行对比,比如A 最便宜,B次之;C性能最好,B次之;C的品牌最知名等。最后,将这两个层次的比较判断进行综合,在A、B、C中确定一台作为最符合自己需求的电脑。 二、算法步骤 1. 将问题条理化、层次化,建立层次结构模型 1)最高层(目标层)——只有一个元素:决策目标;

2)中间层(准则层)——考虑的因素,决策的准则、子准则; 3)最底层(方案层)——决策时的备选方案、措施。 层次分析法要解决的问题是,求出最底层对最高层的相对权重,以此对最底层的方案、措施进行排序,选择最优方案。 注1:为了避免两两比较判断过于复杂,每层次中各元素所支配的元素一般不要超过9个,否则应划分为若干子层; 注2:层次分析法只考虑相邻两个层次间自上向下的支配作用,认为同一层次的元素间相互独立,若考虑进来需要网络分析法(ANP)。 例如前文提到的选购笔记本电脑的决策模型,可以建立如下的层次结构: 2. 构造判断矩阵(成对比较矩阵) 构造好层次模型后,针对某一层来讲,在比较第i个元素与第j 个元素相对于上一层某个因素的重要性时,使用数量化的相对权重a ij来表示,假设共有n个元素参与比较,则矩阵

层次分析法示例

中国计量学院 本科毕业设计(论文) “90后”员工工作满意度研究 ——基于杭州的实证 A Research on Job Satisfaction of the Post-90s Staffs —Based on the Empirical Study of Hangzhou 学生姓名学号 学生专业工商管理班级 1 二级学院经济与管理学院指导教师 中国计量学院 2014年5月

郑重声明 本人呈交的毕业设计论文,是在导师的指导下,独立进行研究工作所取得的成果,所有数据、图片资料真实可靠。尽我所知,除文中已经注明引用的内容外,本学位论文的研究成果不包含他人享有著作权的内容。对本论文所涉及的研究工作做出贡献的其他个人和集体,均已在文中以明确的方式标明。本学位论文的知识产权归属于培养单位。 学生签名:日期: 2014年5月20日

分类号:F272.9 密级:公开 UDC:33 学校代码:10356 中国计量学院 本科毕业设计(论文) “90后”员工工作满意度研究 ——基于杭州的实证 A Research on Job Satisfaction of the Post-90s Staffs —Based on the Empirical Study of Hangzhou 作者学号 申请学位管理学学士指导教师 学科专业工商管理培养单位中国计量学院 答辩委员会主席评阅人 2014 年 5 月

致谢

“90后”员工工作满意度实证研究 ——基于杭州的实证 摘要:在全球经济一体化日渐形成和中国特色市场经济体制不断完善的背景下,国内各行各业的企事单业员工都承受着远超以往的工作压力。作为国家的希望,当“90后”这批新时代的生力军开始踏上职场之后,他们的工作满意度如何,影响他们工作满意度的因素有哪些,如何帮助他们更好地适应职场,便成了人们关心的问题,这即是本文研究的主要内容。 本次调查采用问卷调查的形式,对杭州市123位企事业单位“90后”员工工作满意度现状进行实证研究,研究结果如下: (1)“90后”企事单业员工工工作满意度现状总体水平处于正常水平,但有较大的提升空间; (2)“90后”企事单业员工对“同事关系”的满意度最高,而对“工作强度”的满意度最低; (3)除性别以外,不同教育程度、单位性质和收入状况对于“90后”企事单业员工的工作满意度的多数影响因素都有显著的影响。 关键词:“90后”员工;工作满意度;层次分析法 中图分类号:F272.9

层次分析法及其Matlab实现

第八章 层次分析法 层次分析法(Analytic Hierarchy Process ,简称AHP )是对一些较为复杂、较为模糊的问题作出决策的简易方法,它特别适用于那些难于完全定量分析的问题。它是美国运筹学家T. L. Saaty 教授于70年代初期提出的一种简便、灵活而又实用的多准则决策方法。 §1 层次分析法的基本原理与步骤 人们在进行社会的、经济的以及科学管理领域问题的系统分析中,面临的常常是一个由相互关联、相互制约的众多因素构成的复杂而往往缺少定量数据的系统。层次分析法为这类问题的决策和排序提供了一种新的、简洁而实用的建模方法。 运用层次分析法建模,大体上可按下面四个步骤进行: (i )建立递阶层次结构模型; (ii )构造出各层次中的所有判断矩阵; (iii )层次单排序及一致性检验; (iv )层次总排序及一致性检验。 下面分别说明这四个步骤的实现过程。 1.1 递阶层次结构的建立与特点 应用AHP 分析决策问题时,首先要把问题条理化、层次化,构造出一个有层次的结构模型。在这个模型下,复杂问题被分解为元素的组成部分。这些元素又按其属性及关系形成若干层次。上一层次的元素作为准则对下一层次有关元素起支配作用。这些层次可以分为三类: (i )最高层:这一层次中只有一个元素,一般它是分析问题的预定目标或理想结果,因此也称为目标层。 (ii )中间层:这一层次中包含了为实现目标所涉及的中间环节,它可以由若干个层次组成,包括所需考虑的准则、子准则,因此也称为准则层。 (iii )最底层:这一层次包括了为实现目标可供选择的各种措施、决策方案等,因此也称为措施层或方案层。 递阶层次结构中的层次数与问题的复杂程度及需要分析的详尽程度有关,一般地层次数不受限制。每一层次中各元素所支配的元素一般不要超过9个。这是因为支配的元素过多会给两两比较判断带来困难。 下面结合一个实例来说明递阶层次结构的建立。 例1 假期旅游有1P 、2P 、3P 3个旅游胜地供你选择,试确定一个最佳地点。 在此问题中,你会根据诸如景色、费用、居住、饮食和旅途条件等一些准则去反复比较3个侯选地点。可以建立如下的层次结构模型。 目标层O 选择旅游地 准则层C 景色 费用 居住 饮食 旅途 措施层P 1P 2P 3P

模糊层次分析法的程序实现

、模糊层次分析法的程序实现 给出模糊层次分析法的Matlab程序。 clear; clc; E=input('输入计算精度e:') Max=input('输入最大迭代次数Max:') F=input('输入优先关系矩阵F:'); %计算模糊一致矩阵 N=size(F); r=sum(F'); for i=1:N(1) for j=1:N(2) R(i,j)=(r(i)-r(j))/(2*N(1))+0.5; end end E=R./R'; % 计算初始向量---------- % W=sum(R')./sum(sum(R)); % 和行归一法 %--------------------------------------------------------- for i=1:N(1) S(i)=R(i,1); for j=2:N(2) S(i)=S(i)*R(i,j); end end S=S^(1/N(1)); W = S./sum(S);%方根法%-------------------------------------------------------- % a=input('参数a=?'); %W=sum(R')/(N(1)*a)-1/(2*a)+1/N(1); %排序法 % 利用幂法计算排序向量----V(:,1)=W'/max(abs(W)); %归一化 for i=1:Max V(:,i+1)=E*V(:,i); V(:,i+1)=V(:,i+1)/max(abs(V(:,i+1))); if max(abs(V(:,i+1)-V(:,i)))k=i; A=V(:,i+1)./sum(V(:,i+1)); break Else End End 四、计算实例 由优先关系矩阵得到模糊一致矩阵 利用三种方法计算排序向量分别为:

层次分析法C#代码

层次分析法Analitic Hierachy Process (AHP) 一、需求分析 问题举例 1. 在海尔、新飞、容声和雪花四个牌号的电冰箱中选购一种。要考虑品牌的信誉、冰箱的功能、价格和耗电量。 2. 在泰山、杭州和承德三处选择一个旅游点。要考虑景点的景色、居住的环境、饮食的特色、交通便利和旅游的费用。 3. 在基础研究、应用研究和数学教育中选择一个领域申报科研课题。要考虑成果的贡献(实用价值、科学意义),可行性(难度、周期和经费)和人才培养。 模型和方法 1. 层次结构模型的构造 步骤一:确定层次结构,将决策的目标、考虑的因素(决策准则)和决策对象按它们之间的相互关系分为最高层、中间层和最低层,绘出层次结构图。 最高层:决策的目的、要解决的问题。 最低层:决策时的备选方案。 中间层:考虑的因素、决策的准则。 对于相邻的两层,称高层为目标层,低层为因素层。 步骤二:通过相互比较,确定下一层各因素对上一层目标的影响的权重,将定性的判断定量化,即构造因素判断矩阵。 步骤三:由矩阵的特征值确定判别的一致性;由相应的特征向量表示各因素的影响权重,计算权向量。 步骤四:通过综合计算给出最底层(各方案)对最高层(总目标)影响的权重,权重最大的方案即为实现目标的最由选择。 2. 因素判断矩阵 比较n个因素y=(y1,y2,…,yn)对目标 z 的影响. 采用两两成对比较,用aij表示因素 yi与因素yj对目标z的影响程度之比。通常用数字 1~ 9及其倒数作为程度比较的标度,即九级标度法 xi/xj 相当较重要重要很重要绝对重要 aij 1 3 5 7 9 2, 4, 6, 8 居于上述两个相邻判断之间。 当aij > 1时,对目标 Z来说 xi 比 xj重要, 其数值大小表示重要的程度。同时必有 aji = 1/ aij 1,对目标 Z来说 xj比 xi 不重要,其数值大小表示不重要的程度。 称矩阵 A = ( aij )为因素判断矩阵。 因为 aij >0 且 aji =1/ aij 故称A = (aij )为正互反矩阵。 例. 选择旅游景点 Z:目标,选择景点 y:因素,决策准则 y1 费用,y2 景色,y3 居住,y4 饮食,y5 交通 3. 一致性与权向量 如果 aij ajk =aik i, j, k=1,2,…,n,则称正互反矩阵A具有一致性. 这表明对各个因素所作的两两比较是可传递的。

相关主题
文本预览
相关文档 最新文档