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

2023-11-03

目录

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,反之亦然。

容积 功耗 外观 噪声 寿命 价格 保修时间
A 5 5 5 5 5 5 5
B 6 8 3 8 7 9 7
C 2 4 8 2 8 5 10

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.09 0.10 0.05 0.10 0.18 0.29 0.19

3.5 层次总排序

属性 容积 功耗 外观 噪声 寿命 价格 保修时间 评分
权值 0.09 0.10 0.05 0.10 0.18 0.29 0.19
A 5 5 5 5 5 5 5 5
B 6 8 3 8 7 9 7 7.49
C 2 4 8 2 8 5 10 5.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);
	}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

权重计算方法一:层次分析法(AHP) 的相关文章

  • 按键时关闭 ModalWindow

    我希望能够在用户按下某个键 在我的例子中是 ESC 时关闭 ModalWindow 我有一个用于按键的 Javascript 侦听器 它调用取消按钮 ID 的单击事件 jQuery modalWindowInfo closeButtonId
  • 不同帐户上的 Spring Boot、JmsListener 和 SQS 队列

    我正在尝试开发一个 Spring Boot 1 5 应用程序 该应用程序需要侦听来自两个不同 AWS 帐户的 SQS 队列 是否可以使用 JmsListener 注解创建监听器 我已检查权限是否正确 我可以使用 getQueueUrl 获取
  • 如何通过 javaconfig 使用 SchedulerFactoryBean.schedulerContextAsMap

    我使用 Spring 4 0 并将项目从 xml 移至 java config 除了访问 Service scheduleService 带注释的类来自QuartzJobBean executeInternal 我必须让它工作的 xml 位
  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • 如何在用户输入数据后重新运行java代码

    嘿 我有一个基本的java 应用程序 显示人们是成年人还是青少年等 我从java开始 在用户输入年龄和字符串后我找不到如何制作它它们被归类为 我希望它重新运行整个过程 以便其他人可以尝试 的节目 我一直在考虑做一个循环 但这对我来说没有用
  • 当 OnFocusChangeListener 应用于包装的 EditText 时,TextInputLayout 没有动画

    不能比标题说得更清楚了 我有一个由文本输入布局包裹的 EditText 我试图在 EditText 失去焦点时触发一个事件 但是 一旦应用了事件侦听器 TextInputLayout 就不再对文本进行动画处理 它只是位于 editText
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp

随机推荐

  • Qt Plugin插件机制与实例

    1 Qt 插件机制 1 1 Qt 插件简介 插件是一种遵循一定规范的应用程序接口编写出来的程序 定位于开发实现应用软件平台不具备的功能的程序 插件与宿主程序之间通过接口联系 就像硬件插卡一样 可以被随时删除 插入和修改 所以结构很灵活 容易
  • 深度:微软对Sun的步步紧逼催生了JavaFX

    在旧金山召开的JavaOne会议上 Sun首次公开了Java家族的新产品JavaFX 之后国内外各大媒体就开始竞相报道 也采访了国内的一些Java技术方面的专家 大家针对这一产品的褒贬不一 打开参与JavaFX产品研发的Sun的工程师Chr
  • 解决一个安装office2016缺少vcruntime140.dll的问题

    问题描述 在安装并激活好office2016之后 双击word 显示 缺少vcruntime140 dll 解决方案一 1 下载vcruntime140 dll 2 复制到C盘windows sysWOW64 3 然后寻找下载文件夹里zhu
  • 一文详解 Spring Bean 循环依赖

    一 背景 有好几次线上发布老应用时 遇到代码启动报错 具体错误如下 Caused by org springframework beans factory BeanCurrentlyInCreationException Error cre
  • chooseAddress:fail the api need to be declared in the requiredPrivateInfos field in app.json/ext.js

    错误描述 在使用uni app开发微信小程序的时候 想要通过uni chooseLocation获取用户地理位置的时候出现chooseAddress fail the api need to be declared in the requi
  • Linux环境安装配置ffmpeg

    最近需要在云主机上配置ffmpeg 租的服务器上面的环境往往是Linux 参考别人的文章配好了环境 在此进行综合记录 参考文章 https zhuanlan zhihu com p 347780238 https blog csdn net
  • Python 变量类型

    变量是存储在内存中的值 这就意味着在创建变量时会在内存中开辟一个空间 基于变量的数据类型 解释器会分配指定内存 并决定什么数据可以被存储在内存中 因此 变量可以指定不同的数据类型 这些变量可以存储整数 小数或字符 变量赋值 Python 中
  • python技能描述_【python】利用python爬虫 将LOL所有英雄的技能介绍给爬取下来

    工欲善其事 必先利其器 要想玩好LOL 那了解所有英雄的技能必然是其最基本的 所以此爬虫就应运而生 运行环境 python 3 7 此爬虫所用的库有 requests 获取网页信息 openpyxl Excel相关操作 pymysql My
  • UE4 命令行创建Pak

    原创文章 转载请注明出处 回头还会出一个通过编辑器扩展创建Pak的 命令行的还是比较麻烦 命令行打包如下 引擎版本4 25 由于使用新的引擎版本 感觉pak这块变化挺大的 1 gt 注意中间的空格 2 gt 解析 1 E engine 4
  • 2021全国大学生信息安全竞赛初赛部分WP

    第一阶段 Misc tiny traffic 分析pcap包 能发现几个可疑的请求 flag wrapper test secret 分别把它们传输的文件提取出来 得到三个压缩包 通过flag gzip的内容可以确认这个IP就是我们要分析的
  • 初次使用PPYOLOE-R

    目的 优化基于yolov5 obb旋转目标检测算法的证件区域检测 之前的方法是基于anchor 每次使用都要调试anchor 而ppyoloe r是free anchor的算法 源码位置 https github com PaddlePad
  • 网络IO的阻塞与非阻塞、异步与同步

    1 阻塞与非阻塞 IO默认是阻塞的 设置非阻塞方法如下 include
  • Oracle自动工作量资料档案库(AWR)和自动数据库诊断监视器(ADDM)基础知识

    OracleDB内置的AWR存放一些快照 这些快照的内容是重要的统计信息和工作量的信息 默认每隔60分钟自动从SGA中获取一次 被易管理性监视器 MMOM 存在磁盘上 默认保存8天 可以在EM中单击 Server 服务器 选项卡 然后单击
  • 【PI控制】位置式PI的拉普拉斯变化和离散化(在开关电源的应用)

    0 导读 开关电源主要是利用MCU的PWM波控制MOS管导通与截止 以达到控制输出电压或则输出电流的作用 以下描述均建立在开关电源控制上 1 位置式PI 位置式PI控制式对于咱这种小白是一种比较友善和直观的控制算法 很形象的描述了对控制对象
  • C# 序列化原码分析

    mcs class referencesource mscorlib system runtime serialization formatterservices cs private static MemberInfo GetSerial
  • 华为OD机试真题【滑动窗口最大值】Java版本

    滑动窗口最大值 题目描述 有一个N个整数的数组 和一个长度为M的窗口 窗口从数组内的第一个数开始滑动直到窗口不能滑动为止 每次窗口滑动产生一个窗口和 窗口内所有数和和 求窗口滑动产生的所有窗口和的最大值 输入描述 第一行输入一个正整数N 表
  • C语言函数大全-- l 开头的 Linux 内核函数(链表管理函数)

    l 开头的 Linux 内核函数 链表管理函数 1 list add list add tail 1 1 函数说明 1 2 演示示例 2 list cut before list cut position 2 1 函数说明 2 2 演示示例
  • MCP

    文献名 Identification of candidate plasma protein biomarkers for cervical cancer using the multiplex proximity extension as
  • 半岛铁盒平板测评--真的很垃圾的平板-怎么修改CPU型号

    兼职 赚了点钱 双十一到了 于是想买个平板 看了老久了 大牌太贵 买不起 正在犹豫的时候发现了这个什么鸟半岛铁盒出来了 这个该死的淘宝 真是让人又恨又爱 然后选了半天 决定入坑这个 看着参数不错 1200的价格也差不多对得上这个参数 就动手
  • 权重计算方法一:层次分析法(AHP)

    目录 1 层次分析法原理介绍 2 层次分析法建模步骤 3 案例分析 3 1 题目简述 3 2 确定评价指标 建立层次关系 3 3 构造判断矩阵 3 3 1 标度定义 3 3 2 构造判断矩阵 3 4 一致性检验 3 5 层次总排序 4 代码