`
zengshaotao
  • 浏览: 777554 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

层次分析法java实现续

    博客分类:
  • java
 
阅读更多

public static void main(String args[])
 {
  Caltest1 ct=new  Caltest1();
  Caltest1 ct1=new Caltest1();
  Caltest1 ct2=new Caltest1();
  Caltest1 ct3=new Caltest1();
  //目标层比较矩阵
  double Cal[][]={{1,4,3},{0.25,1,2},{0.33333333,0.5,1}};
  double Cal1[][]={{1,4,3},{0.25,1,2},{0.33333333,0.5,1}};
  //准则层(元素1)比较矩阵
  double Cal2[][]={{1,5,2},{0.2,1,0.5},{0.5,2,1}};
  double Cal3[][]={{1,5,2},{0.2,1,0.5},{0.5,2,1}};
  //准则层(元素2)比较矩阵
  double Cal4[][]={{1,0.2,0.5},{5,1,2},{2,0.5,1}};
  double Cal5[][]={{1,0.2,0.5},{5,1,2},{2,0.5,1}};
  //准则层(元素3)比较矩阵
  double Cal6[][]={{1,2,0.25},{0.5,1,0.125},{4,8,1}};
  double Cal7[][]={{1,2,0.25},{0.5,1,0.125},{4,8,1}};
  
  ct.setN(3);//矩阵的阶数,共享
  int n=ct.getN();
  
  double arr[]=new double[n];//原始比较矩阵的每列和,目标层
  double arr1[]=new double[n];//单层权重,目标层
  double arr2[]=new double[n];//A*w,目标层
  
  double arr11[]=new double[n];//原始比较矩阵的每列和,准则层(元素一)
  double arr1_1[]=new double[n];//单层权重,准则层(元素一)
  double arr2_1[]=new double[n];//A*w,准则层(元素一)
  
  double arr22[]=new double[n];//原始比较矩阵的每列和,准则层(元素二)
  double arr1_2[]=new double[n];//单层权重,准则层(元素二)
  double arr2_2[]=new double[n];//A*w,准则层(元素二)
  
  double arr33[]=new double[n];//原始比较矩阵的每列和,准则层(元素三)
  double arr1_3[]=new double[n];//单层权重,准则层(元素三)
  double arr2_3[]=new double[n];//A*w,准则层(元素三)
  
  ct.cal=Cal;
  ct.cal1=Cal1;
  
  ct1.cal=Cal2;
  ct1.cal1=Cal3;
  
  ct2.cal=Cal4;
  ct2.cal1=Cal5;
  
  ct3.cal=Cal6;
  ct3.cal1=Cal7;
  
  Caltest1.setHm();//各矩阵共享
  
  double CI,nameda,RI,CR;
  double CI1,nameda1,CR1;
  double CI2,nameda2,CR2;
  double CI3,nameda3,CR3;
  
  Double ri=new Double(0);
  ri=(Double)ct.hm.get(3);//ct.hm.get(3)返回的是一个对象
  RI=ri.doubleValue();//得到RI,共享
  
  //计算目标层相关系数
  ct.colvectortoone(arr);
  arr1=ct.rowsum(arr1);
  nameda=ct.getnamda(arr1, arr2);
  System.out.println("最大特征值是 :"+nameda);//打印最大特征值
  CI=(nameda-n)/(n-1);
  System.out.println("计算的一致性指标CI:"+CI);
  System.out.println("查出的平均随机一致性指标RI:"+RI);
  CR=CI/RI;
  System.out.println("一致性比率CR :"+CR);
  if(CR<0.1)
  {
   System.out.println("比较矩阵不一致程度在容许范围内,可用其特征向量作为权向量");
  }
  else
  {
   System.out.println("请重新构造比较矩阵");
  }
  
  //计算准则层元素一相关系数
  ct1.colvectortoone(arr11);
  arr1_1=ct1.rowsum(arr1_1);
  nameda1=ct1.getnamda(arr1_1, arr2_1);
  System.out.println("最大特征值是 :"+nameda1);//打印最大特征值
  CI1=(nameda1-n)/(n-1);
  System.out.println("计算的一致性指标CI1 :"+CI1);
  System.out.println("查出的平均随机一致性指标RI :"+RI);
  CR1=CI1/RI;
  System.out.println("一致性比率CR1 :"+CR1);
  if(CR1<0.1)
  {
   System.out.println("比较矩阵不一致程度在容许范围内,可用其特征向量作为权向量");
  }
  else
  {
   System.out.println("请重新构造比较矩阵");
  }
  
  //计算准则层元素二相关系数
  ct2.colvectortoone(arr22);
  arr1_2=ct2.rowsum(arr1_2);
  nameda2=ct2.getnamda(arr1_2, arr2_2);
  System.out.println("最大特征值是 :"+nameda2);//打印最大特征值
  CI2=(nameda2-n)/(n-1);
  System.out.println("计算的一致性指标CI2 :"+CI2);
  System.out.println("查出的平均随机一致性指标RI :"+RI);
  CR2=CI2/RI;
  System.out.println("一致性比率是CR2 :"+CR2);
  if(CR2<0.1)
  {
   System.out.println("比较矩阵不一致程度在容许范围内,可用其特征向量作为权向量");
  }
  else
  {
   System.out.println("请重新构造比较矩阵");
  }
  
  //计算准则层元素三相关系数
  ct3.colvectortoone(arr33);
  arr1_3=ct3.rowsum(arr1_3);
  nameda3=ct3.getnamda(arr1_3, arr2_3);
  System.out.println("最大特征值是 :"+nameda3);//打印最大特征值
  CI3=(nameda3-n)/(n-1);
  System.out.println("计算的一致性指标CI3 :"+CI3);
  System.out.println("查出的平均随机一致性指标RI :"+RI);
  CR3=CI3/RI;
  System.out.println("一致性比率CR3 :"+CR3);
  if(CR3<0.1)
  {
   System.out.println("比较矩阵不一致程度在容许范围内,可用其特征向量作为权向量");
  }
  else
  {
   System.out.println("请重新构造比较矩阵");
  }
  
  //组合权向量的计算
  double corvector[][] = new double[3][3];
  
  //构造准则层的权向量矩阵
  System.out.println("****************构造准则层的权向量矩阵开始****************");
  for(int j=0;j<n;j++)
  {
   for(int i=0;i<n;i++)
   {
    if(j==0)
    {
     corvector[i][j]=arr1_1[i];
    }
    if(j==1)
    {
     corvector[i][j]=arr1_2[i];
    }
    if(j==2)
    {
     corvector[i][j]=arr1_3[i];
    }
   }
  }
  System.out.println("****************构造准则层的权向量矩阵结束****************");
  
  //打印准则层矩阵
  System.out.println("****************打印准则层的权向量矩阵开始****************");
  for(int j=0;j<n;j++)
  {
   for(int i=0;i<n;i++)
   {
    System.out.print(corvector[j][i]+"\t");
   }
   System.out.println();
  }
  System.out.println("****************打印准则层的权向量矩阵结束****************");
  
  //打印目标层矩阵
  System.out.println("****************打印目标层的权向量矩阵开始****************");
  for(int j=0;j<n;j++)
  {
   System.out.println(arr1[j]);
  }
  System.out.println("****************打印目标层的权向量矩阵结束****************");
  
  //求组合权重
  System.out.println("****************求组合权重开始****************");
  double arr3[]=new double[3];//保存组合权重的数据
  for(int j=0;j<n;j++)
  {
   for(int i=0;i<n;i++)
   {
    arr3[j]+=corvector[j][i]*arr1[i];//得到组合权重
   }
  }
  System.out.println("****************求组合权重结束****************");
  
  //打印组合权重
  System.out.println("****************打印组合权重开始****************");
  for(int j=0;j<n;j++)
  {
   System.out.println(arr3[j]);
  }
  System.out.println("****************打印组合权重结束****************");
 }
}

分享到:
评论

相关推荐

    java 层次分析法

    总之,Java层次分析法的实现结合了软件工程与决策科学,是解决复杂问题的有效工具。通过对给定的Java代码进行学习和实践,你可以提升自己的编程能力和决策分析技巧,为未来的项目提供有力的支持。

    层次分析法源代码

    在本压缩包文件中,包含了一个用Java实现的层次分析法的源代码,用于判断判断矩阵是否符合要求,并计算一致性比率(Consistency Ratio,简称CR)。 在AHP中,首先需要构建层次结构模型,包括目标层、准则层和方案层...

    数学建模-层次分析法Java实现

    数学建模-层次分析法Java简单代码实现

    层次分析法-使用JAVA开发的基于粒子群的层次分析法算法.zip

    在本项目中,开发者运用了JAVA编程语言实现了一个基于粒子群优化(Particle Swarm Optimization,PSO)的层次分析法算法。 粒子群优化是一种模仿鸟类群飞行为的全局优化算法,由Eberhart和Kennedy于1995年提出。在...

    模糊层次分析法的Matlab实现

    模糊层次分析法的Matlab实现 模糊层次分析法是一种多目标决策方法,将定量与定性相结合,广泛应用于经济管理、城市规划等多个领域。该方法的主要问题在于判断矩阵的一致性与人类思维的一致性存在差异,为了克服这个...

    AHP层次分析法Python实现代码.rar

    AHP层次分析法,全称为Analytic Hierarchy Process(分析层次过程),是一种在决策分析中广泛应用的方法,由美国运筹学家Thomas L. Saaty提出。它通过将复杂问题分解为多个层次和子因素,然后利用比较矩阵来确定各...

    基于熵权法与层次分析法相结合的模糊物元评价模型

    1、 实现了隶属度计算 2、将熵权法与层次分析法相结合 3、层次分析法分别实现了特征根法、算术平均法、开根法

    层次分析法代码和例题数据.7z

    本压缩包“层次分析法代码和例题数据.7z”可能包含了实现层次分析法的编程代码和相关的例题数据,这对于学习和应用层次分析法非常有帮助。 层次分析法的核心思想是将复杂的问题分解为多个层次,其中包含目标层、...

    MATLAB代码_matlab_层次分析法_

    下面我们将详细介绍如何在MATLAB中实现层次分析法。 首先,我们需要理解AHP的核心步骤: 1. **构建层次结构**:明确决策问题,确定目标、准则和备选方案,形成层次结构模型。 2. **判断矩阵的构建**:对于同一层次...

    层次分析法的C++简单代码

    层次分析法(Analytic Hierarchy Process,简称AHP)是一种多准则决策分析方法,由美国运筹学家Thomas L. Saaty提出。它通过结构化的方法将复杂问题分解为多个层次和子问题,然后通过比较判断矩阵来确定各因素之间的...

    熵权法 MATLAB实现,熵权法matlab实现+层次分析法,matlab

    在MATLAB中实现层次分析法,主要涉及以下步骤: 1. 建立层次结构:将问题分解为目标层、准则层和方案层,形成层次结构模型。 2. 编制判断矩阵:对每一对准则或方案进行比较,得到偏好关系的判断矩阵。 3. 计算...

    AHP层次分析法Excel

    层次分析法 数学建模层次分析法 数学建模层次分析法 数学建模层次分析法 数学建模层次分析法 数学建模层次分析法 数学建模层次分析法 数学建模

    层次分析法-使用C#开发的AHP层次分析法计算器工具.zip

    在本项目中,"层次分析法-使用C#开发的AHP层次分析法计算器工具.zip" 提供了一个用C#编程语言实现的AHP计算器工具。 AHP层次分析法的核心步骤包括: 1. **构建层次结构**:首先,我们需要定义决策问题,并构建一个...

    层次分析法,在学习层次分析法以后的一些体会和感悟

    层次分析法,在学习层次分析法以后的一些体会和感悟

    APH层次分析法原理及C#实现代码

    APH 层次分析法原理及 C# 实现代码 APH 层次分析法(Analytic Hierarchy Process)是一种多准则决策分析方法,旨在解决复杂的决策问题。该方法由 Thomas L. Saaty 提出,广泛应用于各个领域,包括商业、管理、工程...

    层次分析法案例.pdf

    层次分析法案例 层次分析法是一种系统分析和评价方法,由美国著名运筹学家萨蒂于1982年提出。该方法综合了人们主观判断,是一种简明、实用的定性分析与定量分析相结合的系统分析与评价方法。目前,该方法在国内已...

    层次分析法程序代码.pdf

    数学建模层次分析法的步骤解读,专注于解决数学建模问题,文档免费,欢迎下载,解决问题 数学建模层次分析法的步骤解读,专注于解决数学建模问题,文档免费,欢迎下载,解决问题 数学建模层次分析法的步骤解读,...

    层次分析法在旅游景点选择中的应用

    层次分析法(Analytic Hierarchy Process,简称AHP)是一种决策分析方法,由美国运筹学家托马斯·L·萨蒂(Thomas L. Saaty)于20世纪70年代初期提出。它结合了定性和定量的决策方法,通过建立层次结构模型,将复杂...

Global site tag (gtag.js) - Google Analytics