多准则决策模型-TOPSIS评价方法-源码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
#多准则决策模型-TOPSIS评价方法 ##R语言实现-代码 MCDM = function (decision = NULL, weights = NULL, impacts = NULL) #决策矩阵,权重向量,影响因子 { if (missing(weights)) stop( "缺少'权重向量-weights'" ) if (missing(impacts)) stop( "缺少'影响因子-impacts'" ) if (! is .matrix(decision) | is .data.frame(decision)) stop( "'决策矩阵-decision'必须是矩阵或数据框" ) if (length(weights) ! = ncol(decision)) stop( "权重向量长度错误" ) if (length(impacts) ! = ncol(decision)) stop( "影响因子长度错误" ) if (! all (weights > 0 )) stop( "权重必须大于零" ) if (! is .character(impacts)) stop( "影响因子必须是字符型 '+'或'-' 符号" ) if (! all (impacts = = "+" | impacts = = "-" )) stop( "影响因子只能是字符型 '+'或'-' 符号" ) weights < - weights / sum (weights) N < - matrix(nrow = nrow(decision), ncol = ncol(decision)) #建一个空矩阵 for (i in 1 :nrow(decision)) { for (j in 1 :ncol(decision)) { N[i, j] < - decision[i, j] / sqrt( sum (decision[, j]^ 2 )) } } #决策矩阵标准化 W = diag(weights) #建权重对角矩阵 V = N %
% W #构造加权规范化矩阵 #确定理想方案和负理想方案 u < - as.integer(impacts = = "+" ) apply (V, 2 , max ) + as.integer(impacts = = "-" ) apply (V, 2 , min ) l < - as.integer(impacts = = "-" ) apply (V, 2 , max ) + as.integer(impacts = = "+" ) * apply (V, 2 , min ) #构建理想方案和负理想方案距离公式 distance_u = function(x) { sqrt( sum ((x - u)^ 2 )) } distance_l = function(x) { sqrt( sum ((x - l)^ 2 )) } #计算相对接近度并排序 du < - apply (V, 1 , distance_u) dl < - apply (V, 1 , distance_l) score < - dl / (dl + du) outcome < - data.frame( "方案" = 1 :nrow(decision), 得分 = score, 排名 = rank( - score)) return (outcome) } Author(s) |
多准则决策模型-TOPSIS评价方法-源码的更多相关文章
- 多准则决策模型-TOPSIS方法
多准则决策–Multiple Criteria Decision Making 多准则决策–Multiple Criteria Decision Making 多准则决策是指在具有相互冲突.不可共度的 ...
- Atitit 图像清晰度 模糊度 检测 识别 评价算法 源码实现attilax总结
Atitit 图像清晰度 模糊度 检测 识别 评价算法 源码实现attilax总结 1.1. 原理,主要使用像素模糊后的差别会变小1 1.2. 具体流程1 1.3. 提升性能 可以使用采样法即可..1 ...
- Java split方法源码分析
Java split方法源码分析 public String[] split(CharSequence input [, int limit]) { int index = 0; // 指针 bool ...
- erlang下lists模块sort(排序)方法源码解析(二)
上接erlang下lists模块sort(排序)方法源码解析(一),到目前为止,list列表已经被分割成N个列表,而且每个列表的元素是有序的(从大到小) 下面我们重点来看看mergel和rmergel ...
- erlang下lists模块sort(排序)方法源码解析(一)
排序算法一直是各种语言最简单也是最复杂的算法,例如十大经典排序算法(动图演示)里面讲的那样 第一次看lists的sort方法的时候,蒙了,几百行的代码,我心想要这么复杂么(因为C语言的冒泡排序我记得不 ...
- getOrCreateEnvironment()方法源码探究
该方法目的是创建一个环境对象,并且根据环境类型,自动判断是创建web环境对象,还是标准非web环境对象. 首先该方法源于prepareEnvironment准备环境: 然后进入该方法源码: 可以发现: ...
- TreeSet集合的add()方法源码解析(01.Integer自然排序)
>TreeSet集合使用实例 >TreeSet集合的红黑树 存储与取出(图) >TreeSet的add()方法源码 TreeSet集合使用实例 package cn.itca ...
- invalidate和requestLayout方法源码分析
invalidate方法源码分析 在之前分析View的绘制流程中,最后都有调用一个叫invalidate的方法,这个方法是啥玩意?我们来看一下View类中invalidate系列方法的源码(ViewG ...
- Linq分组操作之GroupBy,GroupJoin扩展方法源码分析
Linq分组操作之GroupBy,GroupJoin扩展方法源码分析 一. GroupBy 解释: 根据指定的键选择器函数对序列中的元素进行分组,并且从每个组及其键中创建结果值. 查询表达式: var ...
随机推荐
- iOS工程集成支付宝错误Undefined symbols for architecture armv7
问题描述: 新工程中需要集成支付宝功能,于是咱就把支付宝的库给集成了进入然后就出现了下面这种错误了说,错误信息如下: Undefined symbols for architecture armv7: ...
- JDBC性能分析与优化
JDBC性能分析与优化V1.0http://www.docin.com/p-758600080.html
- 使用NSKeyedArchiver归档
将各种类型的对象存储到文件中,而不仅仅是字符串.数组和字典类型,有一种更灵活的方法.就是利用NSKeyedAarchiver类创建带键(keyed)的档案来完成. Mac OS X从版本10.2开始支 ...
- jqGrid标题行与第一行之间有很大空白的问题解决。
如题的问题,网上找了很久,都没有解决方案.最后发现,问题不在jqgrid的配置代码,问题在前台HTML代码. <table id="grid" height="30 ...
- 墓地雕塑-LA3708
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=20& ...
- 读书笔记_Effective_C++_条款四十五:运用成员函数模板接受所有兼容类型
比如有一个Base类和一个Derived类,像下面这样: class BaseClass {…}; class DerivedClass : public BaseClass {…}; 因为是父类与子 ...
- pod install 错误 - incompatible character encodings: UTF-8 and ASCII-8BIT
pod install [!] Invalid `Podfile` file: incompatible character encodings: UTF-8 and ASCII-8BIT. Upda ...
- Android样式的开发:drawable汇总篇
Android有很多种drawable类型,除了前几篇详细讲解的shape.selector.layer-list,还有上一篇提到的color.bitmap.clip.scale.inset.tran ...
- Logstash日志搜集
软件准备: logstash-2.1.0.zip elasticsearch-2.1.0.zip kibana-4.3.0-windows.zip Redis-x64-2.8.2104.msi 下载地 ...
- 【问题与思考】1+"1"=?
概述 在数学中1+1=2,在程序中1+1=2,而1+"1"=? 围绕着1+"1"的问题,我们来思考下这个问题. 目录: 一.在.Net代码中 二.在JavaSc ...