权重计算方法一:层次分析法(AHP)

目录

1.层次分析法原理介绍

2.层次分析法建模步骤

3.案例分析

3.1 题目简述

3.2 确定评价指标,建立层次关系

3.3 构造判断矩阵

3.3.1 标度定义

3.3.2 构造判断矩阵

 3.4 一致性检验

3.5 层次总排序

4.代码实现


1.层次分析法原理介绍

        关于层次分析法的具体原理即详细的步骤以及有很多人发布,可自行搜索查看,以下链接为个人认为较好的两篇:数学建模方法——层次分析法(AHP)_Learning-Deep-CSDN博客_层次分析法列向量归一化计算0. 层次分析法简介层次分析法(Analytic Hierarchy Process,简称AHP)主要是对于定性的决策问题进行定量化分析的方法。举个例子,在日常生活中,我们经常需要进行感性的判断,比如报高考志愿,感觉清华北大都很好,到底要报哪个;再比如去市场买菜,到底是买青椒做青椒炒鸡蛋,还是买黄瓜做黄瓜炒鸡蛋;再比如想去出游,到底是去公园A还是公园B。上面提到的这些问题,都是决策,也叫做评价类...https://blog.csdn.net/limiyudianzi/article/details/103389880?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164386596716780261988153%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164386596716780261988153&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-103389880.pc_search_insert_es_download&utm_term=AHP&spm=1018.2226.3001.4187

【AHP】层次分析法 | 过程解读 案例实践_Fxtack的博客-CSDN博客_ahp分析法完整案例AHP 层次分析法一. AHP 层次分析法介绍AHP 层次分析法简介AHP,即层次分析法(Analytic Hierarchy Process,AHP)是一种系统化的、层次化的多目标综合评价方法。在评价对象的待评价属性复杂多样,结构各异,难以量化的情况下AHP层次分析法也能发挥作用。AHP 基本思想 [1]AHP 把复杂的问题分解为各个组成因素,又将这些因素按支配关系分组形成地递阶层次结构。通过两两比较的方式确定方式确定层次中诸因素的相对重要性。然后综合有人员的判断,确定备选方案相对重要https://blog.csdn.net/weixin_43095238/article/details/108055579?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164386596716780261988153%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164386596716780261988153&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-2-108055579.pc_search_insert_es_download&utm_term=AHP&spm=1018.2226.3001.4187

2.层次分析法建模步骤

3.案例分析

3.1 题目简述

        假定现需要购置一批冰箱,由于市场上冰箱种类参差不齐,其性能及性价比也存在很大差异,现有一批冰箱待选择,请考虑冰箱的容积、功耗、外观、噪声、寿命、价格、保修时间等因素,建立模型,确定性价比最高的购买方案。

量化后冰箱参数:

以冰箱A为基准,若该项性能优于A则其值加1,且每优一级都加1,反之亦然。

容积功耗外观噪声寿命价格保修时间
A5555555
B6838797
C24828510

3.2 确定评价指标,建立层次关系

3.3 构造判断矩阵

3.3.1 标度定义

标度含义
1两个要素相比,重要性相同
3两要素相比,前者比后者稍微重要或有优势
5两要素相比,前者比后者比较重要或有优势
7两要素相比,前者比后者十分重要或有优势
9两要素相比,前者比后者绝对重要或有优势
2,4,6,8为上述标度之间的中间值

若要描述后者与前者比较,则用倒数为标度。例如 1/3 描述的是,后者比前者稍微重要。 

3.3.2 构造判断矩阵

属性容积功耗外观噪声寿命价格保修时间
容积

1

3

2

1/2

1/3

1/6

1/2

功耗

1/3

1

5

1

1/3

1/2

1/2

外观

1/2

1/5

1

1/3

1/3

1/4

1/3

噪声

2

1

3

1

1/3

1/3

1/3

寿命

3

3

3

3

1

1/2

1/2

价格

6

2

4

3

1

1

3

保修时间

2

2

3

3

2

1/3

1

 3.4 一致性检验

具体的计算方法见推荐阅读的两篇文章。

经过计算得到C.R=0,025<0.1,故一致性检验成功。

 得到七种属性的权值如下:

属性容积功耗外观噪声寿命价格保修时间
权值0.090.100.050.100.180.290.19

3.5 层次总排序

属性容积功耗外观噪声寿命价格保修时间评分
权值0.090.100.050.100.180.290.19
A55555555
B68387977.49
C248285105.97

 由此可见评分:B>C>A。故冰箱B对顾客来说性价比最高。

4.代码实现

package AHP;

import java.util.Scanner;

public class AHP {
	public static void main(String[] args) {
		System.out.println("输入矩阵阶数:");
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		System.out.println("按行输入:");
		double d[][] = new double[n][n];
		double temp[][] = new double[n][n];
		for (int i = 0; i < n; i++) { 
			for (int j = 0; j < n; j++) {
				double sToD = SToD(scanner.next());
				d[i][j] = sToD;
				temp[i][j] = sToD;
			}
		}

		System.out.println("以下是判断矩阵");
		// 得到判断矩阵
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				System.out.printf("%.2f\t", d[i][j]);
			}
			System.out.println();
		}
 
		// 1.对判断矩阵进行求和
		System.out.println("列相加结果w1");
 
		double w1[] = new double[n];
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				w1[i] = w1[i] + d[j][i];
			}
			System.out.printf("%.2f\t", w1[i]);
		}
 
		// 2.相除
		System.out.println();
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				d[i][j] = d[i][j] / w1[j];
			}
		}
		System.out.println("和积法第一步求出的结果d(即对列向量归一化):");
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				System.out.printf("%.2f\t", d[i][j]);
			}
			System.out.println();
		}
 
		System.out.println("对第一步求出的结果进行 行相加");
 
		System.out.println("行相加结果w2:");
 
		double w2[] = new double[n];
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				w2[i] = w2[i] + d[i][j];
			}
			System.out.printf("\t%.2f\n", w2[i]);
		}
 
		System.out.println("特征向量求解第一步 : 将上面的行相加的所有结果相加sum:");
		double sum = 0.0;
		for (int i = 0; i < n; i++) {
			sum += w2[i];
		}
		System.out.printf("结果为sum = \t%.2f\n", sum);
 
		System.out.println("将行结果与 sum 相除 得出结果为w3:  ");
		double w3[] = new double[n];
		for (int i = 0; i < n; i++) {
			w3[i] = w2[i] / sum;
			System.out.printf("\t%.2f\n", w3[i]);
		}
 
		System.out.println();
		System.out.println("************************************************");
		System.out.println("用和积法计算其最大特征向量为(即权重):W = ");
		// 以下是校验
		System.out.printf("(");
		for (int i = 0; i < n; i++) {
			System.out.printf("%.2f ,", w3[i]);
		}
		System.out.printf(")");
 
		System.out.print("\nBW(w4) = ");//BW即行相加结果
		double w4[] = new double[n];
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				w4[i] = w4[i] + temp[i][j] * w3[j];
			}
			System.out.printf("%.5f \t", w4[i]);
		}
		System.out.println("\n----------------------------------------");
		double sum2 = 0.0;
		for (int i = 0; i < n; i++) {
			sum2 = sum2 + w4[i];
		}
		System.out.printf("得到最大特征值sum2:\t %.2f\n", sum2);
		System.out.println("************************************************");
		System.out.println("最大的特征向量为 :  ");
 
		double result = 0.0;
		for (int i = 0; i < n; i++) {
			result = result + w4[i] / (6 * w3[i]);
		}
		System.out.printf(" %.2f \n", result);
 
		System.out.println("\n判断矩阵一致性指标C.I.(Consistency Index)");
		double CI = (result - n) / (n - 1);
		System.out.printf(" %.2f \n", CI);
 
		System.out.println("随机一致性比率C.R.(Consistency Ratio)");
 
		/*
		 * 
		 n  1  2  3  	4  		5	  6	  7		  8		 9	  10	  11
		RI  0  0  0.58  0.90  1.12  1.24  1.36  1.41  1.45  1.49  1.51 
		一般,当一致性比率 <0.1 时
		的不一致程度在容许范围之内,可用其归一化特征向量
		作为权向量,否则要重新构造成对比较矩阵,对  加
		以调整
		 */
		double RI = 0.0;
		switch (n) {
		case 0:
			RI=0;
			break;
		case 1:
			RI=0;
			break;
		case 2:
			RI=0;
			break;
		case 3:
			RI=0.58;
			break;
		case 4:
			RI=0.90;
			break;
		case 5:
			RI=1.12;
			break;
		case 6:
			RI=1.24;
			break;
		case 7:
			RI=1.36;
			break;
 
		default:
			break;
		}
		double CR=CI / RI;
		if(CR<0.1) {
			System.out.printf("一致性检验成功!  C.R =  %.2f \n", CR);
		}
		else
			System.out.printf("一致性检验失败!  C.R =  %.2f \n", CR);
		
		
		scanner.close();
	}
 
	public static double SToD(String s) {
		String[] p = s.split("/");
		if (p.length > 1) {
			return Double.parseDouble(p[0]) / Double.parseDouble(p[1]);
		}
		return Double.parseDouble(s);
	}
}

  • 17
    点赞
  • 148
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
AHP层次分析法中,权重计算通常采用三种方法:算术平均法、几何平均法和特征值法。这些方法都是用来计算每个层次中元素的相对重要性。算术平均法是将每个元素的权重相加后取平均值,几何平均法是将每个元素的权重相乘后取平方根,而特征值法是通过计算矩阵的特征值和特征向量来确定权重。在实际应用中,为了保证结果的稳健性,可以同时采用这三种方法求出权重,并将它们的平均值作为最终的权重。这样可以避免单一方法所产生的偏差,并得出更全面、更有效的结论。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [数学建模常用算法层次分析法(AHP)](https://blog.csdn.net/cyj972628089/article/details/107300145)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [层次分析法(AHP)](https://blog.csdn.net/weixin_41563161/article/details/114889420)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

离陌lm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值