多准则决策模型-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 ...
随机推荐
- java对过反射调用方法
public class InvokeTester { public InvokeTester() { } String str; public InvokeTester(String str) ...
- nginx 相关问题
Nginx配置文件nginx.conf 参考:http://www.2cto.com/os/201212/176520.html Nginx自动切分日志: nignx没有自动分开文件存储日志的机制. ...
- css3整理--filter
只在chrome的少数版本的浏览器中有实现,兼容性差,不适宜应用. filter语法: elm { filter: none | <filter-function > [ <filt ...
- WCF关于svcutil生成关于绑定出现 元数据包含无法解析的引用的解决方案
元数据包含无法解析的引用. 没有终结点在侦听可以接受消息的 net.tcp://localhost:8000/service.这通常是由于不正确的地址或者 SOAP 操作导致的.如果存在此情况,请参阅 ...
- 二十五、【开源】EFW框架Winform前端开发之强大的自定义控件库
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan ...
- IOS8Preview-Huge for developer and Massive for everyone else
IOS8Preview-Huge for developer and Massive for everyone else 不管对于开发者还是用户来说,IOS8都是IOS自发布以来功能最强大的版本,但是 ...
- LiveWriter Test
From LiveWriter.
- 在MACOS上实现交叉编译
在嵌入式开发过程中,设备的存储空间和运算能力通常会比较低,这时候,比如要编译一个linux的内核,嵌入式设备就不能胜任了,所以,实现交叉编译还是很必要的.通过交叉编译,我们就能够在我们的pc上编译出能 ...
- Android 优化布局层次结构
前面介绍过使用HierarchyViewer和Android lint来优化我们的程序,这一篇算是总结性的,借助一个小例子来说用怎么优化应用布局.这个例子是android官网给出的,作者也当一把翻译. ...
- eclipse 手动/自动安装插件
只要你的Eclipse的压缩包,一般为xxx.zip,其内部包含了对应的features和plugins文件夹,(不管是否还有content.jar和artifacts.jar)则都可以: 要么手动解 ...